|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机流水灯及计数器程序
+ i5 X: Y1 ^/ Z) e" y 0 X$ j& q( H6 t, n
, a' U, b( A1 j" z" m( A. e# R- C3 j+ k% g2 N3 T
4 c/ a" e& r+ v% P
3 q9 | h& b8 }
) a: u. p6 A4 I% U, @1 M. f- #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;}
- }5 J1 u8 d/ e4 {( M
( h3 f3 @' `, \$ K' h
% @" C8 ^: d0 i% v8 U' a
! u7 i5 q2 n2 f6 ?/ K |
|