找回密码
 注册
关于网站域名变更的通知
查看: 337|回复: 1
打印 上一主题 下一主题

51单片机流水灯及计数器程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-29 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机流水灯及计数器程序 $ ~# ~0 O! f; s7 ^( O

$ k' V6 e: w+ G8 r5 W4 E
2 g- i) N8 B% w, p

. [3 i0 D' O) i# O0 z- c6 T* J
$ W( N, P% l) I# w; u7 q. M
& k3 I2 w9 X- Z* X$ h+ D7 o3 G" c1 H# S
  • #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;}
  • }
    # h. }1 E4 R$ N
9 C1 i4 O0 X% y4 D6 K  L5 b. Y, }
4 y3 Q: O# s2 s
& ~& u8 b3 L* b2 p6 o% S- q* R
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-19 00:18 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表