找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5110|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主


  1. #include<reg51.h>
  2. unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  3. unsigned charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  4. unsigned char j=0;
  5. unsigned char LCD_Status;
  6. bit dir=0,run=0;
  7. sbit RS=P1^6;
  8. sbit RW=P1^7;
  9. void delay(unsigned int count)   //延时函数
  10. {  unsigned char i;
  11.    while(count--)
  12.    for(i=0;i<120;i++);
  13. }
  14. unsigned char Busy_Check()    //检查忙函数
  15. {  RS=0;RW=1;  
  16.    P2=0x4f;
  17.    delay(2);
  18.    LCD_Status=P0;       //读出LCD的状态
  19.    delay(2);
  20.    P2=0x8f;         
  21.    return LCD_Status;
  22. }
  23. void  wcmd(unsigned char cmd)   //写命令函数
  24. {  while((Busy_Check() &0x80)==0x80);
  25.    RS=0;RW=0;
  26.    P2=0x4f;         
  27.    P0=cmd;              //命令由P0口送入LCD
  28.    delay(2);
  29.    P2=0x8f;         
  30. }
  31. void  wdat(unsigned char dat)   //写数据函数
  32. {  while((Busy_Check() &0x80)==0x80);  
  33.    RS=1;RW=0;
  34.    P2=0x4f;            
  35.    P0=dat;                 //数据由P0口送入LCD
  36.    delay(2);        
  37.    P2=0x8f;
  38. }
  39. void LCD_init()       //初始化函数
  40. {  wcmd(0x38);         //38H=0011 1000,使用8位,用5×7的字型,2行
  41.    delay(20);      
  42.    wcmd(0x01);         //01H=0000 0001,清屏
  43.    delay(20);      
  44.    wcmd(0x06);         //06H=0000 0110,字符不动,光标自动右移一格
  45.    delay(20);
  46.    wcmd(0x0e);          //0eH=0000 1110,开显示,有光标,字符不闪烁
  47.    delay(20);
  48. }
  49. void main(){          //主函数,流水灯运行
  50. signed char j;
  51. IT1=1;
  52. EX1=1;
  53. EA=1;
  54. PX1=0;
  55. while(1){
  56. switch(P3&0x3c){
  57. case 0x38:run=1;dir=1;break;
  58. case 0x34:run=0;dir=0;break;
  59. case 0x2c:dir=0;break;
  60. case 0x1c:dir=1;break;}
  61.     if(run==1)
  62.     if(dir==1)
  63.       for(j=0;j<=7;j++){
  64.             P2=led[j];
  65.       delay(500);
  66.       }
  67.         else
  68.           for(j=7;j>=0;j--){
  69.             P2=led[j];
  70.       delay(500);
  71.             }
  72.     else P2=0xff;
  73. }}
  74. K2() interrupt 2{          //中断函数,LCD显示,计数开始
  75. LCD_init();
  76. wcmd(0x80+00);   
  77. wdat('1');         
  78. wdat('1');         
  79. wdat('1');        
  80. wdat('2');
  81. wdat('2');
  82. wdat('2');
  83. wdat('3');
  84. wdat('3');
  85. wdat('3');
  86. wdat('4');
  87. wdat('4');
  88. wdat('4');
  89. wcmd(0x80+0x40);
  90. wdat('B');
  91. wdat('1');
  92. wdat('1');
  93. wdat('2');
  94. wdat('2');
  95. wdat('3');
  96. wdat('3');
  97. wdat('4');
  98. wdat('4');
  99. for(j=0;j<=99;j++)
  100. {P2=0x8f;
  101. P0=led_mod[j/10];
  102. P2=0x1f;
  103. P0=led_mod[j%10];
  104. delay(500);
  105. P0=0;}
  106. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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