
单片机程序源代码.docx
42页第二章任务一:闪烁广告灯的设计利用89c51单片机的端口控制两个LED (DO和D1),编写程序,实现两个LED互闪includevreg52.h>#define uint unsigned int#define uchar unsigned charsbit LED1=POAO;sbit LED2=P0A1;void delayms(uint ms){uint i;while(ms--){for(i=0;iv120;i++);}}void main(){while(1){LED1=0;LED2=1;delayms(500);LED1=1;LED2=0;delayms(500);}}任务二:流水广告灯的设计利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时DO点亮,延时片刻 后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->D0,重复循环includevreg52.h>#include
拉幕式:开始D0~D7全灭,延时片刻后首先D3和D4亮,其次是D2和D5亮,再是D1 和D6亮,最后是DO和D7亮闭幕式:开始D0~D7全亮,延时片刻后首先DO和D7灭,其次是D1和D6灭,再是D2 和D5灭,最后是D3和D4灭includevreg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0xe7,0xc3,0x81,0x00};void delay(uint x){uint i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}void main()uint i;while(1)Pl=Oxff;delay(500);for(i=0;iv4;i++){P1=table[i]; delay(500);}for(i=3;i>0;i--){P1=table[i-1]; delay(500);}}}任务四:复杂广告灯的设计利用89c51单片机的端口实现8个LED (DO〜D7)复杂广告灯的控制,要求显示规律为: 正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复 循环。
includevreg52.h>#define uint unsigned int#includevintrins.h>void delayms(uint ms){uint i;while(ms--){for(i=0;i<110;i++);}}void main(){uint i,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};unsigned char aa;while(1){aa=0xfe;for(i=0;i<7;i++){P0=aa;aa=_crol_(aa,1); delayms(500);}for(i=0;i<8;i++){PO=aa;aa=_cror_(aa,l);delayms(500);}for(i=0;iv3;i++)for(j=0;jv2;j++){P0=xx[j];delayms(500);}for(i=0;i<2;i++)for(j=0;jv2;j++){P0=yy[j]; delayms(500);}for(i=0;i<3;i++)for(j=0;jv2;j++){P0=zz[j];delayms(500);}}}任务五:单个LED数码管显示设计使用89c51的P0 口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9 的加1计数。
includevreg52.h>#define uint unsigned int#define uchar unsigned charuchar table[10]={ 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X F8,0X80,0X90};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(l){PO=table[ke y];}}任务六:多个LED数码管显示设计使用单片机P0和P2 口作为输出口,外接一个8位LED数码管,编写程序,使数码管显示“872AF635”#includevreg52.h>#includevintrins.h>#define uint unsigned int#define uchar unsigned chardelay(ms){while(ms--){ int i;for(i=O;i<11O;i++);}}main(){uchara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar b[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j;uint i;while(1){ j=0x01;for(i=0;i<8;i++){P2=j;P0=a[b[i]];j=_crol_(j,1);delay(3);}}}任务七:査询式按键设计将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。
includevreg52.h>#define uint unsigned int#define uchar unsigned charmain(){uchara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xal,0x86,0x8e};PO=Oxff;while(PO!=Oxff){ switch(P0){case 0xfe:P2=a[1]; break;case 0xfd:P2=a[2]; break;case 0xfb:P2=a[3]; break;case 0xf7:P2=a[4]; break;case 0xef:P2=a ⑸;break;case 0xdf:P2=a ⑹;break;case 0xbf:P2=a[7]; break;case 0x7f:P2=a[8];}}}任务八:LED数码管显示矩阵键盘按键的设计设计一个4*4的矩阵键盘,以P1.0〜P1.3作为行线,以P1.4〜P1.7作为列线要求:未按下 按键时,LED数码管显示“-”,按下按键时,在数码管上显示相应的键值。
includevreg52.h>#define uchar unsigned char#define uint unsigned intuchartable[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint num=0;void delay(uint x){uchar i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);}keyscan(){ uint temp;temp=P2; temp & OxOf;if(temp==0x0e){P2=0xf0; temp=P2; temp&=OxfO; switch(temp) {case OxeO:num=l;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;}}if(temp==0x0d){P2=0xf0;temp=P2;temp&=OxfO;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&=OxfO;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 & OxfO;switch(temp){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=table[num];}main(){uint temp;while(1){P2=0x0f;temp=P2; if(temp!=0x0f) keyscan();display(num);}}(2)#includevreg52.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P2。
