单片机c51求大神写一个C语言程序!挺急的

作者&投稿:徐悦 (若有异议请与网页底部的电邮联系)
求大神在keil上帮写51单片机C语言程序~

//第一个实验://假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7//假设K1按键在P2.3引脚#include#includesbit k1=P2^3;//假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}//第二个实验://假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7#includechar led[]={0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff};void main(){char i=0;char counter=0;TMOD=0x01;//T0 工作方式1TH0=(655356-50000)/256;//延时50msTL0=(655356-50000)%256;//延时50msTR0=1;//启动T0while(1){if(TF0==1)//查询{TH0=(655356-50000)/256;//重新延时50msTL0=(655356-50000)%256;//重新延时50mscounter++;if(counter==10)//延时0.5秒{counter=0;//重新开始新一轮0.5秒延时i++;if(i==16){i=0;}P0=led[i];//点灯}}}}

以下是我编的简易计算器程序,基本成功
//4*4键盘检测程序,按下键后相应的代码显示在液晶屏上
//显示5位后,第6次显示操作符号
//再显示下一个数
// 键值与功能对应表
//键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ = 清零
#include
sbit beep=P2^3;
sbit lcden=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;

#define uint unsigned int
#define ulint unsigned long int
#define uchar unsigned char
#define lcddata P0

ulint bb,dd,ee,ff;
uchar d,flag1;
uchar fd1,fd2;
uchar b1=16,b2=16,b3=16,b4=16,b5=16;
uchar d1=16,d2=16,d3=16,d4=16,d5=16;
uchar f1=16,f2=16,f3=16,f4=16,f5=16,f6=16,f7=16,f8=16,f9=16,f10=16;
uchar key,keyval,c,temp;

void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}

void write_com(uchar com)
{
lcddata=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10);
lcden=1;
Delay1ms(10);
lcden=0;
}
void write_date(uchar date)
{
lcddata=date;
rs=1;
rw=0;
lcden=0;
Delay1ms(10);
lcden=1;
Delay1ms(10);
lcden=0;
}

void init2()
{
rw=0;
write_com(0x38);
Delay1ms(10);
write_com(0x0f);
Delay1ms(10);
write_com(0x06);
Delay1ms(10);
write_com(0x01);
Delay1ms(10);
}


void display1(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) //第1个数显示程序
{
init2();
write_com(0x80);//第1行,第1字
Delay1ms(10);
write_date(0x30+A1);
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
}
void display2(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) //第2个数显示程序
{
write_com(0x88);//第1行,第1字
Delay1ms(10);
write_date(0x30+A1);
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
}

void display3(uchar a) //操作符号显示程序
{
write_com(0x86);//第1行,第1字
Delay1ms(10);
switch(a)
{
case 10:
write_date('+');
Delay1ms(10);
case 11:
write_date('-');
Delay1ms(10);
case 12:
write_date('x');
Delay1ms(10);
case 13:
write_date('/');
Delay1ms(10);
}
}

void display4(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5,uchar A6,uchar A7,uchar A8,uchar A9,uchar A10,uchar A11,uchar A12) //结果显示程序
{
write_com(0x80+0x40);//第2行,第1字
Delay1ms(10);
if (flag1==0)
{
write_date('-');
}
else write_date('+');
Delay1ms(10);
write_date(0x30+A1);
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
write_date(0x30+A6);
Delay1ms(10);
write_date(0x30+A7);
Delay1ms(10);
write_date(0x30+A8);
Delay1ms(10);
write_date(0x30+A9);
Delay1ms(10);
write_date(0x30+A10);
Delay1ms(10);
write_date('.');
Delay1ms(10);
write_date(0x30+A11);
Delay1ms(10);
write_date(0x30+A12);
Delay1ms(10);
}

uchar keyscan()
{
key=16;
P3=0xef;//P3.7输出1个低电平
temp=P3; //读取
temp=temp&0x0f;//屏蔽高4位
if(temp!=0x0f)
{
Delay1ms(10);
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;

case 0xed:
key=4;
break;

case 0xeb:
key=8;
break;

case 0xe7:
key=12;
break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
beep=0;
}
beep=1;

}
}

P3=0xdf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
Delay1ms(10);
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xde:
key=1;
break;

case 0xdd:
key=5;
break;

case 0xdb:
key=9;
break;

case 0xd7:
key=13;
break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
beep=0;
}
beep=1;

}
}

P3=0xbf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
Delay1ms(10);
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xbe:
key=2;
break;

case 0xbd:
key=6;
break;

case 0xbb:
key=10;
break;

case 0xb7:
key=14;
break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
beep=0;
}
beep=1;

}
}

P3=0x7f;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
Delay1ms(10);
if(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0x7e:
key=3;
break;

case 0x7d:
key=7;
break;

case 0x7b:
key=11;
break;

case 0x77:
key=15;
break;
}
while(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
beep=0;
}
beep=1;

}
}
return(key);
}

void main()
{ while(1)
{
c=1;
while(c<6)//输入第1个5 位数
{
keyval=keyscan();
if(keyval<10)
{
switch(c)
{
case 1:b1=keyval; break;
case 2:b2=keyval; break;
case 3:b3=keyval; break;
case 4:b4=keyval; break;
case 5:b5=keyval; break;
}
c++;
}
display1(b1,b2,b3,b4,b5);
}

while(c==6) //输入计算符号
{
keyval=keyscan();
if((keyval>=10)&&(keyval<14)) //可去一层括号,因逻辑运算优先级较低
{
d=keyval;
}
c=1;
display3(d);

}
while(c<6) //输入第2个5 位数
{
keyval=keyscan();
if(keyval<10)
{
switch(c)
{
case 1:d1=keyval; break;
case 2:d2=keyval; break;
case 3:d3=keyval; break;
case 4:d4=keyval; break;// 除
case 5:d5=keyval; break;
}
c++;
}
display2(d1,d2,d3,d4,d5);
}

bb=b1*10000+b2*1000+b3*100+b4*10+b5;
dd=d1*10000+d1*1000+d3*100+d4*10+d5;
while(keyval!=14) //等待按下"="
{
keyval=keyscan();
}
Delay1ms(10);
switch(d)
{
case 10:ee=bb+dd; break;//+
case 11:
flag1=1;
if(bb>=dd)
{
ee=bb-dd; //-
flag1=0;
}
else ee=dd-bb;
break;

case 12:ee=bb*dd; break;//*可能会溢出
case 13:ee=bb/dd; //除法小数部分会丢失,保留2位
ff=bb%dd;
fd1=ff*10/dd;
fd2=ff*100/dd%10;
break;
}
f10=ee/1000000000%10;
f9=ee/100000000%10;
f8=ee/10000000%10;
f7=ee/1000000%10;
f6=ee/100000%10;
f5=ee/10000%10;
f4=ee/1000%10;
f3=ee/100%10;
f2=ee/10%10;
f1=ee%10;
display4(f10,f9,f8,f7,f6,f4,f4,f3,f2,f1,fd1,fd2);

while(keyval!=15)
{
keyval=keyscan();
}
b1=0;b2=0;b3=0;b4=0;b5=0;
d1=0;d2=0;d3=0;d4=0;d5=0;
bb=0;dd=0;ee=0;
init2();
}
}

#include<reg51.h>
#include<intrins.h>
void delay(int a)
{
unsigned char i;
while(a--)
for(i=0;i<120;i++);
}
void ext0() interrupt 0
{
P1=0xff;
delay(5000);
}
main()
{
unsigned char led=0xfe;
EX0=1;
IT0=1;
EA=1;
while(1)
    {
    P1=led;
    led=_crol_(led,1);
    delay(500);
    }
}



p43-c51主板上呢个红色方块是啥
这个不是红色方块,而是散热片,下面压着芯片,给芯片散热用的。散热片是一种给电器中的易发热电子元件散热的装置,多由铝合金,黄铜或青铜做成板状,片状,多片状等,如电脑中CPU中央处理器要使用相当大的散热片,电视机中电源管,行管,功放器中的功放管都要使用散热片。一般散热片在使用中要在电子...

哪位大佬有 《单片微机原理与接口技术(第2版)》,求教材求分享百度网盘...
提取码:1234 本书以80C51系列单片机为典型机介绍微机基本理论与原理,实现将微机原理的学习和具体的单片机应用实践密切结合。本书从计算机基础知识入手,全面介绍微机的基本组成和原理,重点讲述80C51系列单片机的结构、指令系统、程序设计以及常用的接口技术,对8086系统和C51语言分设两章介绍,一些最新实用...

如果零基础学习单片机,要多少学费 比如说教你c51,stm32等
不用学费,但有成本,单 片机学习要注重实验和编程,买一块开发板,完全可以自学,一般都有配套配套文字和视频教程,网上还可以提问和讨论 C51的开发板就 200-300块钱,质量差别不大,价格差是因配件的多少不同 STM32的开发板便宜一些的300-400元,高端一些600一900元,配件也可以自由搭配 另外有...

求文档: AT89C2051-24PU中文资料
在现场选择合适的安装位置是避免红外探头误报、求得最佳检测灵敏度极为重要的一环。片机攻击技术 目前,攻击单片机主要有四种技术,分别是: (1)软件攻击...AT89C2051的C语言也就是8051单片单片机C语言,即C51语言[5]。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题...

急!!求大神帮忙翻译一下日本洗衣机的说明书,万分感谢
C21\/洗衣机盖开着?\/关闭洗衣机盖并按「スタート」。C26\/线头滤网脱落?\/重新安装。C51-C52\/没有供水?\/打开水龙头并按「スタート」。冷却中\/洗衣筒内高温?\/想开洗衣机盖时,请等「ドアロック」灯熄灭时再开。衣类片寄り\/衣服量太少?\/添加衣服并按「スタート」。槽内水あり\/洗衣筒...

求单片机串口通讯前景 发展趋势
片机自诞生以来,以其体积小、面向控制、高性价比等优点,在工控领域扮演着重要角色。 但随着微机和网络技术的普及应用,控制过程中如虚拟设备面板、曲线记录显示、打印输出等一系列更高的要求也相应被提出,这些要求往往是面向底层控制的单片机分立控制系统所无法企及的。 而许多基于微机视窗操作平台运行的...

海尔LU58C51电视如何息屏听音乐?
电视机的类型结构与技术 :目前国内市场上的电视机主要分为led和OLED两大阵营,而Qled电视是指搭载量子点技术的led电视。液晶板 :液晶显示技术的基本原理是背光经过下偏光片(起偏器)形成单一偏振方向的光束也叫做线性偏振光,而tf驱动两层基板之间,液晶分子发生扭转,改变光束的偏振特性,从而产生不同的...

求GBA口袋怪兽绿叶的金手指代码,要可以用的
0018 精神片(死亡恢复体力一半)0019 精神草(死亡全恢复体力)001a 美味水(恢复体力50)001b 精神汽水(恢复体力60)001c 米力液(恢复体力80)001d 木木奶(恢复体力100)001e 力量粉(恢复体力50,很苦粉,减底怪兽亲密度)001f 力量根(恢复体力200,很苦根,减底怪兽亲密度)0020 万能粉(...

蓝屏0x00000023(0x000E00E0、0xBA4E7ACC、0xBA4E77C8、0x8054C51A...
朋友,电脑蓝屏的原因是很复杂的!这是软件之间有冲突!(3。软件冲突)(答案原创,引用请说明原作者:力王历史)1。如果这是偶然,一般重启电脑,症状便可消失!2。杀毒不彻底,(使用杀毒软件,全盘扫描和自定义扫描)!如果杀到木马或病毒后,应立即重启, 重启电脑后,来到“隔离|恢复”,彻底删除...

C++中如何表示从2到10?
在概念方面问题可以参见此前推文《对于C语言指针最详尽的讲解》,那么在指针方面可以参见一下大神的经验...如果说结构体有机地组织了对象的属性表示结构体“中看”,那么以修改结构体成员变量的方法代替函数(入口...所以,无论你是在VC6.0还是Keil C51,还是Keil MDK中,当你需要定义一个结构体时,只要你稍微留心结构体...

曲水县13641118689: 急急急急求,单片机C51的C语言程序 -
塔豪加味: ;***************************;; DAC0832 ;;***************************; ORG 0000H START: MOV DPTR,#7FFFH MOV A,#00H MOVX @DPTR,A LCALL DELAY MOV A,#0FEH MOVX @DPTR,A LCALL DELAY SJMP LOOP DELAY: MOV R6,#00H DELAY2: MOV R5,#00H DELAY1: DJNZ R5,DELAY1 DJNZ R6,DELAY2 RET END

曲水县13641118689: 求c51单片机电子钟程序(c语言) -
塔豪加味: 以下是四位数码管可调时带秒闪烁的c51单片机电子钟程序(c语言)./**** 本程序中,晶振为12MHz, ****//**** 时间控制采用定时中断控制方式. ****//**** 模式和时间调整采用查询方式. ****/#include<reg52.h> sbit P20=P2^0; //分个位控制端 ...

曲水县13641118689: 请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写的,不要百度什么的复制粘贴 -
塔豪加味: 这是我初学时写的,刚好也是数码管/*位选接P2口,三个按钮分别接P25~P27.段码接P1,T0计数 */ #include<reg51.h> #define DOU 1818//按键消抖时间 sbit led_1=P2^0; sbit led_2=P2^1; sbit led_3=P2^2; sbit led_4=P2^3; sbit led_5=P2^4; sbit...

曲水县13641118689: 编写一个C51C语言程序 -
塔豪加味: 键盘取地址 两个短地址=一个长地址=对应一个数字 (LCD显示) 输入执行计算 输出结果 LCD显示 至于声音更简单了,由电路部分实现,不需要程序来控制 只是给你个流程 这么简单的东西都要让人帮写,就可悲了,这可是51单片机的(基础中的基础了)

曲水县13641118689: 试用c语言编写一个能输出锯齿波信号的单片机c51程序 -
塔豪加味: 程序加一个的LCD1602,你选择使用 的#include <reg52.h>的/ /包含头文件 ?#包括<intrins.h>的 #定义UCHAR无符号的字符/ /宏定义 ?#定义UINT无符号整数 ?UCHAR I,J,N,Z,/ /定义全局变量 SBIT RS = P2 ^ 0; / /定义端口 ?和SBIT RW = P2 ...

曲水县13641118689: 求用C语言编写的交通灯程序,C51单片机控制,无左转右转 -
塔豪加味: //以下代码经过Keil C51软件调试通过 #include "reg51.h" //头文件包含//宏定义 #define uint unsigned int #define uchar unsigned char#define ON 0 //0的时候灯亮 #define OFF 1 //1的时候灯亮//管脚定义 //南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 ...

曲水县13641118689: 求C51大神帮编写下下面问题的C程序 -
塔豪加味: 针对本题的程序如下:; MOV DPTR, #1200H MOVX A, @DPTR ;取出第一个 MOV R2, A ;当做最大 MOV R4, DPL ;最大值的地址 MOV R5, DPH MOV R3, #49 ;和其余49个比较 LOOP: MOVX A, @DPTR CJNE A, R2, $ + 3 JC NEXT ;小...

曲水县13641118689: 求单片机c51的C语言编程:设当开关为1时,控制2个led交替闪烁,闪烁时间为5秒 -
塔豪加味: uchar a=0; void main() { TMOD=0X01; TL0=(65536-50000)%256;//定时50ms TH0=(65536-50000)/256; ET0=1; EA=1; TR0=1; while(key==1) {if(a<100)//50*100=5000ms 即5S{led1=0;led2=1;} else//5-10秒,灯变换状态{led1=1;led2=0;} }...

曲水县13641118689: 我想要做一个c51单片机的c语言程序,是用超声波模块控制蜂鸣器 -
塔豪加味: 单片机IO口A——>驱动电路——>超声波发射——>超声波接收——>放大电路——>单片机外部中断引脚——>单片机定时器(判断距离)——>单片机IO口B——>蜂鸣器.硬件:超声波模块驱动电路、超声波模块放大电路 软件:内部定时器使用、外部中断和定时器中断的使用 现在好多倒车雷达是通过蜂鸣器鸣叫快慢表示距离远近,直接用单片机控制蜂鸣器变调比较浪费单片机资源(建议而已).软件最好自己写,因为量体裁衣最合适!祝你成功!

曲水县13641118689: 【单片机】请用C语言写一个超级简单的单片机程序.万分感谢!! -
塔豪加味: 高级语言,使用的都是变量.一般来说,都不指定某个变量的 RAM 的具体地址号码.所以,C,不适宜针对 RAM 的具体地址单元进行操作.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网