1、单片机程序源代码第二章任务一:闪烁广告灯的设计 利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。#include#define uint unsigned int#define uchar unsigned charsbit LED1=P00;sbit LED2=P01;void delayms(uint ms)uint i;while(ms-)for(i=0;iD3-D4-D5 -D6-D7 ,然后再点亮D7-D6-D5-D4 -D3-D2-D1-D0,重复循环。#include#include #define uint unsigned int#def
2、ine uchar unsigned charuint i;uchar temp;uint a8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;void delayms(uint ms)while(ms-) uint j;for(j=0;j120;j+);void main()while(1)P0=0xfe;while(P0!=0x7f)/P1=temp;/delayms(500); P0=_crol_(P0,1);delayms(250);temp=0x7f;while(P0!=0xfe)P0=temp;delayms(500);temp=_cror_(te
3、mp,1); 任务三:拉幕式与闭幕式广告灯的设计 利用 89c51 单片机的 P0端口实现 8个 LED D0D7 的拉幕式与闭幕式广告灯设计。拉幕式: 开始D0D7 全灭,延时片刻后首先 D3和 D4亮,其次是 D2和D5亮,再是D1 和 D6 亮,最后是 D0 和 D7 亮。闭幕式:开始 D0D7 全亮,延时片刻后首先 D0 和 D7 灭,其次是 D1 和 D6 灭,再是 D2 和 D5 灭,最后是 D3 和 D4 灭。#include#define uint unsigned int#define uchar unsigned charuchar code table=0xe7,0xc3
4、,0x81,0x00;void delay(uint x)uint i,j;for(i=x;i0;i-) for(j=120;j0;j-);void main()uint i;while(1)P1=0xff;delay(500);for(i=0;i0;i-)P1=tablei-1; delay(500);任务四:复杂广告灯的设计利用 89c51 单片机的端口实现 8 个 LED(D0D7)复杂广告灯的控制,要求显示规律为: 正向流水-反向流水-隔灯闪烁 3 次-高四盏、低四盏闪烁 2 次-隔两盏闪烁 3 次,再重复 循环。#include#define uint unsigned int#in
5、cludevoid delayms(uint ms)uint i;while(ms-)for(i=0;i110;i+);void main()uint i,j,xx2=0xaa,0xff,yy2=0xf0,0x0f,zz2=0xb6,0xff;unsigned char aa;while(1)aa=0xfe;for(i=0;i7;i+)P0=aa;aa=_crol_(aa,1);delayms(500);for(i=0;i8;i+)P0=aa;aa=_cror_(aa,1);delayms(500);for(i=0;i3;i+)for(j=0;j2;j+)P0=xxj; delayms(500
6、);for(i=0;i2;i+)for(j=0;j2;j+)P0=yyj ; delayms(500);for(i=0;i3;i+)for(j=0;j2;j+)P0=zzj ;delayms(500);任务五:单个LED数码管显示设计使用 89c51 的 P0 口作为输出口,外接 LED 数码管,编写程序,使数码管循环显示从 09 的加 1 计数。#include#define uint unsigned int#define uchar unsigned charuchar table10= 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90;
7、uint key=0;void int_int()EA=1;IT0=1;EX0=1;void count_num() interrupt 0if(key=9)key=0;else key+;void main()int_int();while(1)P0=tablekey;任务六:多个LED数码管显示设计使用单片机 P0和 P2口作为输出口,外接一个 8 位LED数码管,编写程序,使数码管显示 “872AF635”。#include#include#define uint unsigned int#define uchar unsigned chardelay(ms)while(ms-) int
8、 i;for(i=0;i110;i+);main()uchara16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; uchar b8=0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05,j;uint i;while(1) j=0x01;for(i=0;i8;i+)P2=j;P0=abi;j=_crol_(j,1);delay(3);任务七:查询式按键设计将 8 个按键从 18 进行编号,如果其中一个键被按下,则在 LED 数码管上显示相应的键值。 #i
9、nclude#define uint unsigned int#define uchar unsigned charmain()uchara16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;P0=0xff;while(P0!=0xff) switch(P0)case 0xfe:P2=a1; break;case 0xfd:P2=a2; break;case 0xfb:P2=a3; break;case 0xf7:P2=a4; break;case 0xef:P2=a5; brea
10、k;case 0xdf:P2=a6; break;case 0xbf:P2=a7; break;case 0x7f:P2=a8;任务八:LED数码管显示矩阵键盘按键的设计设计一个 4*4 的矩阵键盘,以 P1.0P1.3 作为行线,以 P1.4P1.7 作为列线。要求:未按下 按键时,LED 数码管显示“-”,按下按键时,在数码管上显示相应的键值。#include#define uchar unsigned char#define uint unsigned intuchartable17=0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x
11、90,0x88,0x83,0xc6,0xa1,0x8 6,0x8e;uint num=0;void delay(uint x)uchar i,j;for(i=x;i0;i-) for(j=120;j0;j-);keyscan() uint temp;temp=P2;temp&=0x0f;if(temp=0x0e)P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;if(temp=0x0d)P2=0xf0;t
12、emp=P2;temp&=0xf0;switch(temp)case 0xe0:num=5;break;case 0xd0:num=6;break;case 0xb0:num=7;break;case 0x70:num=8;if(temp=0x0b)P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=9;break;case 0xd0:num=10;break;case 0xb0:num=11;break; case 0x70:num=12;if(temp=0x07)P2=0xf0;temp=P2;temp&=0xf0; switch(te
13、mp) case 0xe0:num=13;break; case 0xd0:num=14;break; case 0xb0:num=15;break; case 0x70:num=16;return num;void display(uint num) if(num=0)P0=0xbf;P0=tablenum ;main()uint temp;while(1)P2=0x0f;temp=P2; if(temp!=0x0f) keyscan();display(num);(2)#include#define uchar unsigned char#define uint unsigned int
14、sbit LED1=P20;sbit LED2=P21;uchar num;uchar code LED_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e ;/数码管字形码编码 void delay(uint x) uchar i,j;for(i=x;i0;i-)for(j=120;j0;j-);/延时函数void display(uchar num)P0=LED_codenum;/数码管显示函数void keyscan()/键盘扫描函数uchar temp;P1=0xfe;
15、/key1-key4 第一行按下temp=P1;temp&=0xf0;if(temp!=0xf0)delay(10);/ 消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e: num=4; break; while(temp!=0xf0)/ 等待按键释放 temp=P1; temp&=0xf0;P1=0xfd;/key5-key8 第二行按下 temp=P1;temp&=0xf0;
16、if(temp!=0xf0) delay(10);/ 消除抖动 temp=P1;temp&=0xf0; if(temp!=0xf0) temp=P1; switch(temp) case 0xed: num=5; break;case 0xdd: num=6; break;case 0xbd: num=7; break;case 0x7d: num=8; break; while(temp!=0xf0)/ 等待按键释放 temp=P1; temp&=0xf0;P1=0xfb;/key9-key12 第三行按下(duio;)qo;TMS f d=duq(OJXO=id 啊尹 :0JXO=茅 du
17、 fd=duqQW(oi)xbi9p (OJXO= ids :0JXo=茅 dura f d=duq91 心平 I 心*/:ZJXO=Id :0JXo=茅 dura (J=dus; /(OJXO= i dui9j)9qM 沏EaIqP=UHUI:q/(XQ OSnO沏EaIqi.=vaxm:qqx OSnO沏EaIq!q j=unu:qpx OSnO沏EaIq M=TOUi:qoxQ OSnO (duio;)qo;TMS (J=dus; (OJXO=id 啊尹 :0JXO=茅 du fd=duqQW(oi)xbi9p (OJXO= ids :0JXo=茅 dura f d=duqcase 0x
18、e7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;while(temp!=0xf0)/ 等待按键释放temp=P1; temp&=0xf0;void main()while(1)keyscan();if(num=0)P0=0xbf;elsedisplay(num-1); 任务九:简单拨号键盘的设计使用 4*4的矩阵式键盘及8位共阳极LED 数码管设计一个简单拨号键盘,要求在初始状态 时,8 位数码管均显示“-”,每按下一个号码后,原 8 位 LED 数码管显示的内容向左移动
19、1 位。#include#include#define uint unsigned int#define uchar unsigned charuchar keycount=0,num;uchar code LED1_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/数码管字形码编码uchar LED2_duan8=0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf;/8 段共阳数码管编码uchar LED2_wei8= 0x80,0x40,0x
20、20,0x10,0x08,0x04,0x02,0x01;void delay(uint x)uchar i,j;for(i=x;i0;i-)for(j=120;j0;j-);void display()uchar i;/P2=0x80;for(i=0;i8;i+)P2=LED2_weii;P0=LED2_duan7-i;delay(1);void keyscan()uchar temp;P3=0xfe;temp=P3;temp&=0xf0;if(temp!=0xf0)delay(10);temp=P3;temp&=0xf0;if(temp!=0xf0)temp=P3;switch(temp)c
21、ase 0xee:keycount+;num=0;break;case 0xde:keycount+;num=1;break;case 0xbe:keycount+;num=2;break;case 0x7e:keycount+;num=3;break; while(temp!=0xf0)temp=P3; temp&=0xf0;P3=0xfd;temp=P3; temp&=0xf0;if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xed:keycount+;num=4;bre
22、ak;case 0xdd:keycount+;num=5;break;case 0xbd:keycount+;num=6;break;case 0x7d:keycount+;num=7;break; while(temp!=0xf0)temp=P3; temp&=0xf0;P3=0xfb;temp=P3; temp&=0xf0;if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xeb:keycount+;num=8;break;case 0xdb:keycount+;num=9
23、;break;case 0xbb:keycount+;num=10;break;case 0x7b:keycount+;num=11;break; while(temp!=0xf0)temp=P3; temp&=0xf0;P3=0xf7;temp=P3; temp&=0xf0;if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xe7:keycount+;num=12;break;case 0xd7:keycount+;num=13;break;case 0xb7:keycoun
24、t+;num=14;break;case 0x77:keycount+;num=15;break; while(temp!=0xf0)temp=P3; temp&=0xf0;void main()uchar i;while(1)display();keyscan();if(keycount!=0)for(i=0;i右移流水-隔灯闪烁 3次花样显示;如果按下 K键 后,8只 LED 暂停默认显示,而进行闪烁显示,当显示达到 5次后,继续按默认规律显示。#include#define uint unsigned int#define uchar unsigned charuint LED_tabl
25、e14=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd; void delayms(uint ms)uint i;while(ms-)for(i=0;i120;i+);void int_int()EA=1;EX0=1;IT0=1;void LED_shan() interrupt 0uint k;for(k=0;k5;k+)P0=0xaa;delayms(500);P0=0xff;delayms(500);void main()int_int();while(1) uint i;for(i=0;i14;i+) P0=LED_tablei; delayms(500); for(i=0;i3;i+)P0=0xaa; delayms(500);P0=0xff; delayms(500); 任务二:采用外中断控制的条形LED彩灯设计P0端口作为输出口,外接条形LED。编写程序,当按键K 未按下时,LED 进行循环左移显 示。如果第 1 次按下按键K 后,LED进行循环右移显示。如果第 2次按下按键 K 后,LED 进行拉幕式与闭幕式花样显示。如果第 3次按下按键 K 后,又恢复循环左移显示。 #include unsigned char flag=0; /状态标志位
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1