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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
51单片机流水灯及计数器程序
+ i5 X: Y1 ^/ Z) e" y0 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-12 09:19 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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