|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机流水灯及计数器程序 ) Q/ V4 x8 G i$ _1 f/ D
![]()
; x* n! ~( O R$ j2 O! m# _% E5 w6 b
# p |' ^* z1 K+ }8 l! `. ~: X, E/ b
2 }& [ m5 E% ^
# \: M4 K, n7 E8 J! y, n
+ `: k( N/ Q5 G+ W8 y/ t- #include<reg51.h>
- unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char j=0;
- unsigned char LCD_Status;
- bit dir=0,run=0;
- sbit RS=P1^6;
- sbit RW=P1^7;
- void delay(unsigned int count) //延时函数
- { unsigned char i;
- while(count--)
- for(i=0;i<120;i++);
- }
- unsigned char Busy_Check() //检查忙函数
- { RS=0;RW=1;
- P2=0x4f;
- delay(2);
- LCD_Status=P0; //读出LCD的状态
- delay(2);
- P2=0x8f;
- return LCD_Status;
- }
- void wcmd(unsigned char cmd) //写命令函数
- { while((Busy_Check() &0x80)==0x80);
- RS=0;RW=0;
- P2=0x4f;
- P0=cmd; //命令由P0口送入LCD
- delay(2);
- P2=0x8f;
- }
- void wdat(unsigned char dat) //写数据函数
- { while((Busy_Check() &0x80)==0x80);
- RS=1;RW=0;
- P2=0x4f;
- P0=dat; //数据由P0口送入LCD
- delay(2);
- P2=0x8f;
- }
- void LCD_init() //初始化函数
- { wcmd(0x38); //38H=0011 1000,使用8位,用5×7的字型,2行
- delay(20);
- wcmd(0x01); //01H=0000 0001,清屏
- delay(20);
- wcmd(0x06); //06H=0000 0110,字符不动,光标自动右移一格
- delay(20);
- wcmd(0x0e); //0eH=0000 1110,开显示,有光标,字符不闪烁
- delay(20);
- }
- void main(){ //主函数,流水灯运行
- signed char j;
- IT1=1;
- EX1=1;
- EA=1;
- PX1=0;
- while(1){
- switch(P3&0x3c){
- case 0x38:run=1;dir=1;break;
- case 0x34:run=0;dir=0;break;
- case 0x2c:dir=0;break;
- case 0x1c:dir=1;break;}
- if(run==1)
- if(dir==1)
- for(j=0;j<=7;j++){
- P2=led[j];
- delay(500);
- }
- else
- for(j=7;j>=0;j--){
- P2=led[j];
- delay(500);
- }
- else P2=0xff;
- }}
- K2() interrupt 2{ //中断函数,LCD显示,计数开始
- LCD_init();
- wcmd(0x80+00);
- wdat('1');
- wdat('1');
- wdat('1');
- wdat('2');
- wdat('2');
- wdat('2');
- wdat('3');
- wdat('3');
- wdat('3');
- wdat('4');
- wdat('4');
- wdat('4');
- wcmd(0x80+0x40);
- wdat('B');
- wdat('1');
- wdat('1');
- wdat('2');
- wdat('2');
- wdat('3');
- wdat('3');
- wdat('4');
- wdat('4');
- for(j=0;j<=99;j++)
- {P2=0x8f;
- P0=led_mod[j/10];
- P2=0x1f;
- P0=led_mod[j%10];
- delay(500);
- P0=0;}
- }
- F" f0 l* }0 R% E& i% t/ U9 \2 h" R / W+ z- @2 Q5 ^) Q% ^% L9 Q
! E3 y& j4 i1 R/ [
! c3 D7 }( d+ o; v |
|