当前位置:文档之家› 单片机程序源代码

单片机程序源代码

第二章任务一:闪烁广告灯的设计利用89C51单片机的端口控制两个LED ( DO和D1 ),编写程序,实现两个LED互闪。

#include<reg52.h>#define uint unsigned int#define uChar unsigned Charsbit LED仁POP;sbit LED2=P0A1;void delayms(uint ms){uint i;while(ms--){for(i=O;i<12O;i++);}}void main(){while(1){LED1=O;LED2=1;delayms(5OO);LED1=1;LED2=O;delayms(5OO);}}任务二:流水广告灯的设计利用89c51单片机的端口控制8个LED( D0~D7 )循环点亮,刚开始时DO点亮,延时片刻后,接着D1 点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->DO ,重复循环。

#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuint i;uchar temp;uint a[8]={Oxfe,Oxfd,Oxfb,Oxf7,Oxef,Oxdf,Oxbf,Ox7f};void delayms(uint ms){while(ms--){ uint j;for(j=0;j<120;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_(temp,1);}}}任务三:拉幕式与闭幕式广告灯的设计利用89C51单片机的P0端口实现8个LED D0~D7的拉幕式与闭幕式广告灯设计。

拉幕式:开始D0~D7 全灭,延时片刻后首先D3 和D4 亮,其次是D2 和D5 亮,再是D1 和D6 亮,最后是D0 和D7 亮。

闭幕式:开始D0~D7 全亮,延时片刻后首先D0 和D7 灭,其次是D1 和D6 灭,再是D2 和D5 灭,最后是D3 和D4 灭。

#inClude<reg52.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){P1=0xff;delay(500);for(i=0;i<4;i++){P1=table[i];delay(500);}for(i=3;i>0;i--){P1=table[i-1]; delay(500);}}}任务四:复杂广告灯的设计利用89c51 单片机的端口实现8 个LED(D0~D7 )复杂广告灯的控制,要求显示规律为:正向流水-> 反向流水-> 隔灯闪烁3 次-> 高四盏、低四盏闪烁2次-> 隔两盏闪烁3次,再重复循环。

#include<reg52.h>#define uint unsigned int#include<intrins.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++){P0=aa; aa=_cror_(aa,1); delayms(500);}for(i=0;i<3;i++) for(j=0;j<2;j++) {P0=xx[j]; delayms(500);} for(i=0;i<2;i++) for(j=0;j<2;j++) { P0=yy[j] ; delayms(500);} for(i=0;i<3;i++) for(j=0;j<2;j++) {P0=zz[j] ; delayms(500);}}} 任务五:单个LED 数码管显示设计使用89c51 的P0 口作为输出口,外接LED 数码管,编写程序,使数码管循环显示从的加 1 计数。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar table[10]={ 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8, 0X80,0X90};uint key=0;void int_int()EA=1;IT0=1;EX0=1;0~9}void count_num() interrupt 0{if(key==9)key=0;else key++;}void main(){int_int();while(1){P0=table[key];}}任务六:多个LED 数码管显示设计使用单片机P0 和P2 口作为输出口,外接一个8 位LED 数码管,编写程序,使数码管显示“872AF635 ”。

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned chardelay(ms){while(ms--){ int i;for(i=0;i<110;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 数码管上显示相应的键值。

#include<reg52.h>#define uint unsigned int#define uchar unsigned charmain(){uchara[16]={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=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[5]; break;case 0xdf:P2=a[6]; break;case 0xbf:P2=a[7]; break;case 0x7f:P2=a[8];}}}任务八:LED 数码管显示矩阵键盘按键的设计设计一个4*4 的矩阵键盘,以P1.0~P1.3 作为行线,以P1.4~P1.7 作为列线。

要求:未按下按键时,LED数码管显示-”,按下按键时,在数码管上显示相应的键值。

#include<reg52.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 ,0 x8e};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&=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;temp=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(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)#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit LED仁P2P;sbit LED2=P2A1;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;i>0;i--)for(j=120;j>0;j--);}// 延时函数void display(uchar num){P0=LED_code[num];}// 数码管显示函数void keyscan()// 键盘扫描函数{uchar temp;P1=0xfe;//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;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 第三行按下temp=P1;temp&=0xf0;if(temp!=0xf0){delay(10);// 消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xeb: num=9; break;case 0xdb: num=10; break;case 0xbb: num=11; break;case 0x7b: num=12; break;}}while(temp!=0xf0)// 等待按键释放{temp=P1; temp&=0xf0;}}P1=0xf7;//key13-key16 第四行按下temp=P1; temp&=0xf0;if(temp!=0xf0){delay(10);// 消除抖动temp=P1;temp&=0xf0;if(temp!=0xf0)temp=P1; switch(temp){{case 0xe7: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数码管显示的内容向左移动1位。

相关主题