找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键控制时分秒动态显示(时钟)+仿真

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

  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar hour,min,sec,ok;                 
  5. uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,                                //0~9        共阴                  shuzu
  6.                                 0x77,0x7c,0x39,0x5e,0x79,0x71,0x09,0x38,0x40};                                                                //a~f  -
  7. uchar disp[8]={0,0,18,0,0,18,0,0};
  8. void display()
  9. {                 
  10.         uchar i,j,k=0x80;
  11.         for(i=0;i<8;i++)
  12.         {
  13.                 P0=dispcode[disp[i]];
  14.                 P2=k;
  15.                 k=k>>1;
  16.                 for(j=250;j>0;j--);
  17.                 P2=0;
  18.         }                          
  19. }
  20. uchar inkey()
  21. {
  22.         uchar k;
  23.         static uint cnt=0;
  24.         k=P3;
  25.         if(k!=0xff)
  26.         {
  27.                 cnt++;
  28.                 if(cnt==10){return k;}
  29.                 else if(cnt>200){cnt=180;return k;}
  30.                 else return 0xff;
  31.         }
  32.         else {cnt=0;return 0xff;}
  33. }
  34. void keyaction()//按键功能
  35. {
  36.         uchar k;
  37.         k=inkey();
  38.         switch(k)
  39.         {
  40.                 case 0xf7://加秒
  41.                         sec++;if(sec>60)sec=0;break;
  42.                 case 0xfb://加分
  43.                         min++;if(min>60)min=0;break;
  44.                 case 0xfd://加时
  45.                         hour++;if(hour>24)hour=0;break;
  46.            case 0xef://开始运行
  47.                         ok=!ok;break;
  48.                 default: break;
  49.         }
  50.                 disp[0]=sec%10;
  51.                 disp[1]=sec/10;
  52.                 disp[3]=min%10;
  53.                 disp[4]=min/10;        
  54.                 disp[6]=hour%10;
  55.                 disp[7]=hour/10;
  56. }
  57. void calc()
  58. {
  59.         sec++;
  60.                                 
  61.         if(sec>59)
  62.         {
  63.                 sec=0;
  64.                 min++;
  65.                
  66.                 if(min>59)
  67.                 {
  68.                         min=0;
  69.                         hour++;
  70.                         if(hour>23)hour=0;
  71.                 }
  72.         }        
  73.                 disp[0]=sec%10;
  74.                 disp[1]=sec/10;
  75.                 disp[3]=min%10;
  76.                 disp[4]=min/10;        
  77.                 disp[6]=hour%10;
  78.                 disp[7]=hour/10;                          
  79. }
  80. void main()
  81. {        
  82.         uchar i;
  83.         while(1)
  84.         {
  85.                 for(i=0;i<250;i++)
  86.                 {
  87.                         display();
  88.                         keyaction();
  89.                 }
  90.                         if(ok)calc();

  91.         }
  92. }
复制代码

全部资料51hei下载地址:
按键动态显示(时钟).zip (64.41 KB, 下载次数: 34)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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