找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简单的51单片机的可调的电子时钟程序

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



单片机源程序如下:
  1. #include "reg52.h"
  2. typedef unsigned int u16;                                                       //重新定义关键字
  3. typedef unsigned char u8;
  4. u8 code segment[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};                    //定义位码0~7
  5. u8 code dofly_DuanMa[10={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   // 显示段码值0~9
  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;
  9. sbit k1=P3^0;
  10. sbit k2=P3^1;
  11. sbit k3=P3^2;
  12. sbit k4=P3^3;
  13. u8 hour, minute,second,count,TempData[8],Key_Num;
  14. void Delay_1us(u8 i)                                                          //延时函数1us
  15. {
  16.     while (i--);
  17. }
  18. void Dig_Display()                                                           //数码管显示函数
  19. {
  20.     u8 i;
  21.     for (i=0;i<8;i++){
  22.         switch (i){
  23.             case 7:
  24.             LSA=0;LSB=0;LSC=0;break;
  25.             case 6:
  26.             LSA=1;LSB=0;LSC=0;break;
  27.             case 5:
  28.             LSA=0;LSB=1;LSC=0;break;
  29.             case 4:
  30.             LSA=1;LSB=1;LSC=0;break;
  31.             case 3:
  32.             LSA=0;LSB=0;LSC=1;break;
  33.             case 2:
  34.             LSA=1;LSB=0;LSC=1;break;
  35.             case 1:
  36.             LSA=0;LSB=1;LSC=1;break;
  37.             case 0:
  38.             LSA=1;LSB=1;LSC=1;break;
  39.         }
  40.         P0=TempData[i];
  41.         Delay_1us(100);
  42.         P0=0x00;
  43.     }
  44. }
  45. void Init_Timer0(void)                                                           //中断函数初始化
  46. {
  47.     TH0=(65532-5000)/256;                                                       //赋初始值
  48.     TL0=(65532-5000)%256;
  49.     TMOD=0x01;                                                                   //定时器0以工作方式1工作
  50.     ET0=1;
  51.     TR0=1;
  52.     EA=1;
  53. }
  54. void Init_Exten0(void)
  55. {
  56.     EX0=1;
  57.     EA=1;
  58.     IT0=0;
  59. }
  60. void Timer_Interrupt0(void) interrupt 1                                          //定时器0中断
  61. {
  62.     TH0=(65532-5000)/256;                                                       //赋初始值
  63.     TL0=(65532-5000)%256;
  64.     count++;
  65.     if (count == 140){
  66.         count = 0;
  67.         second++;
  68.         if (second == 60){
  69.             second = 0;
  70.             minute++;
  71.             if (minute == 60){
  72.                 minute = 0;
  73.                 hour++;
  74.                 if (hour == 24){
  75.                     hour = 0;
  76.                 }
  77.             }
  78.         }
  79.     }
  80. }
  81. void Key_Scan()                                                                 // 键盘扫描程序
  82. {
  83.     if(k1==0){
  84.         Delay_1us(1000);
  85.         if(k1==0){
  86.             Key_Num=1;
  87.         }
  88.         while(!k1);
  89.     }
  90.     if(k2==0){
  91.         Delay_1us(1000);
  92.         if(k2==0){
  93.             Key_Num=2;
  94.         }
  95.         while(!k2);
  96.     }
  97.     if(k3==0){
  98.         Delay_1us(1000);
  99.         if(k3==0){
  100.             Key_Num=3;
  101.         }
  102.         while(!k3);
  103.     }
  104.     if(k4==0){
  105.         Delay_1us(1000);
  106.         if(k4==0){
  107.             Key_Num=4;
  108.         }
  109.         while(!k4);
  110.     }
  111. }
  112. void Key_Control()                                          //键盘的控制
  113. {
  114.     TempData[0=dofly_DuanMa[0];
  115.     TempData[1=dofly_DuanMa[0];
  116.     TempData[2=0x40;
  117.     TempData[3=dofly_DuanMa[0];
  118.     TempData[4=dofly_DuanMa[0];
  119.     TempData[5=0x40;
  120.     TempData[6=dofly_DuanMa[0];
  121.     TempData[7=dofly_DuanMa[0];
  122.    switch(Key_Num){
  123.             case 1:
  124.             hour++;if(hour==24)hour=0;Key_Num=0;             //正常时间 小时 加1
  125.             break;
  126.             case 2:
  127.             hour--;if(hour==255)hour=23;Key_Num=0;           //正常时间 小时减1
  128.             break;
  129.             case 3:
  130.             minute++;if(minute==60)minute=0;Key_Num=0;       //分钟加1
  131.             break;
  132.             case 4:
  133.             minute--;if(minute==255)minute=59;Key_Num=0;     //分钟减1
  134.             break;
  135.         }
  136. }
  137. Dig_Now_Display()                                            //数码管刷新
  138. {
  139.     TempData[0=dofly_DuanMa[hour/10];
  140.     TempData[1=dofly_DuanMa[hour%10];
  141.     TempData[2=0x40;
  142.     TempData[3=dofly_DuanMa[minute/10];
  143.     TempData[4=dofly_DuanMa[minute%10];
  144.     TempData[5=0x40;
  145.     TempData[6=dofly_DuanMa[second/10];
  146.     TempData[7=dofly_DuanMa[second%10];
  147.     Dig_Display();   
  148. }
  149. void main(){
  150.     Init_Timer0();
  151.     while(1){
  152.         Key_Scan();
  153.         Key_Control();
  154.         Dig_Now_Display();
  155.         Dig_Display();
  156.     }
  157. }
复制代码

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1018078 发表于 2022-4-19 12:11 | 只看该作者
求 仿真!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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