《51单片机常见程序,附带注释》由会员分享,可在线阅读,更多相关《51单片机常见程序,附带注释(39页珍藏版)》请在金锄头文库上搜索。
1、. .51 单片机常见程序附带注释三位数别离成3个一位数,截取bai=num/100;/输出百位数shi=num%100/10;/输出十位数ge=num/10;/输出个位数 *include /跑马灯程序。当时间约为20ms,形成动态扫描,看上去全亮。 *include *define uint unsigned int /无符号整型,占16位数,表示围065536 *define uchar unsigned char /无符号字符型占八位数,表示围0255 void delayms(uint); uchar aa; /定义变量 void main() aa=0xfe; while(1) P
2、2=aa; /控制单片机接口p2,循环亮 delayms(500); /当500换成5,看起来全亮,实际上灯一直亮灭,原因是视觉延迟 aa=_crol_(aa, 1); void delayms(uint xms) /子程序,延时,通过数数 uint i, j; for(i=xms;i0;i-) for(j=110;j0;j-); *include /跑马灯程序。现在时间较长,多以是亮灭的流动,当时间约为20ms,形成动态扫描,看上去全亮。 *include *define uint unsigned int /无符号整型,占16位数,表示围065536 *define uchar unsig
3、ned char /无符号字符型占八位数,表示围0255 void delayms(uint); uchar aa; /定义变量 void main() aa=0xfe; while(1) P2=aa; /控制单片机接口p2,循环亮 delayms(500); /当500换成5,看起来全亮,实际上灯一直亮灭,原因是视觉延迟 aa=_crol_(aa, 1); void delayms(uint xms) /子程序,延时,通过数数 uint i, j; for(i=xms;i0;i-) for(j=110;j0;j-);*include /52系列单片机头文件目标:用单片机和两个共阴极数码管:使
4、用单片机的引脚1和2,控制两个数码管静态显示00到59*define uchar unsigned char*define uint unsigned intsbit dula1=P17;/申明U1锁存器锁存端段选sbit dula2=P07;/申明U1锁存器锁存端段选uchar num,num1;uchar code table= /共阴极数码管0123456789abcdef0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint) ;void mai
5、n () while(1) for(num1=0;num1=5;num1+) for(num=0;num0;x-)/x=xms即延时约为xms毫秒 for (y=200;y0;y-);*include /52系列单片机头文件目标:用单片机和两个共阴极数码管*define uchar unsigned char*define uint unsigned intsbit dula1=P17;/申明U1锁存器锁存端段选sbit dula2=P27;/申明U1锁存器锁存端段选uchar num,num1;uchar code table= /共阴极数码管0123456789abcdef0x3f,0x0
6、6,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint) ;void main () while(1) for(num1=0;num1=9;num1+) dula1=1; /翻开U1锁存端 P1=tablenum1; /送入位选信号 dula1=0; /关闭U1锁存器 delayms(1000); /延时500毫秒约0.3s for(num=0;num0;x-)/x=xms即延时约为xms毫秒 for (y=200;y0;y-);有语法错误*include /52系列单
7、片机头文件*define uchar unsigned char /无符号字符型占八位数,表示围0255*define uint unsigned int /无符号整型,占16位数,表示围sbit dula1=P16; /申明U锁存器锁存端段选sbit dula2=P07; /申明U锁存器锁存端段选uchar code table=0xc0,0xf9,0xa4, 0xb0,/共阳极数字:0123456789abcdefg0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xcd,0xa1,0x86,0x8e;void delayms(uint) ;void dis
8、play(uchar,uchar) ;uchar num,num2,shi,ge;void main ()TMOD=0x11;/设置定时器0和1为工作方式1M1M0为01,0001 00TH0= (65535-50000)/256;/装初值12.00M晶振定时50s数为50000TL0= (65535-50000)%256;TH1= (65535-50000)/256;/装初值12.00M晶振定时50s数为50000TL1= (65535-50000)%256;EA=1;/开总中断ET0=1; / 开定时器0中断ET1=1; / 开定时器1中断TR0=1;/ 启动定时器0TR1=1;/ 启动定
9、时器1while(1)/程序停顿在这里不停的对数码管动态扫描同时等待中断的发生 display(shi,ge);dula2=1; /翻开U1锁存端 P1=tableshi; /送入位选信号 dula2=0; /关闭U1锁存器 delayms(1175); /延时0.1毫秒 void delayms(uint xms)/延时子程序uint i,j;for (i=xms;i0;i-) /i=xms即延时约为xms毫秒 for (j=110;j0;j-);void T1_time()interrupt 1TH1= (65536-50000)/256; /重装初值TL1= (65536-50000)%
10、256; num2+; /num每加1次判断一次是否到20次 if(num2=20) num2=0; /然后把num2清0重新再计数20次 num+; if (num=60)/这个数用来送数码管显示,到60后归0 num=0; shi=num/10; /把一个2位数别离后分别送数码管显示,十位数 ge=num%10; /个位数 *include /52系列单片机头文件目标:控制时间24小时一循环*define uchar unsigned char*define uint unsigned intsbit dula1=P17;/申明U1锁存器锁存端段选sbit dula2=P07;/申明U1锁存器锁存端段选uchar num,num1,num2,num3,num4;uchar code table=0xc0,0xf9,0xa4, 0xb0,/共阳极数字:0123456789abcdefg0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xcd,0xa1,0x86,0x8e;void delayms(uint) ;void main () while(1) for(num3=0;num3=23;num3+) /每天24小时进位一 for(num2=0;num2=59;num2+) /