找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易单片机电子时钟仿真设计

[复制链接]
跳转到指定楼层
楼主
基于89c52单片机的电子时钟设计。仅供参考。

单片机源程序如下:

  1. #include<reg52.h>
  2. #define uc unsigned char
  3. #define ui unsigned int
  4. sbit LED=P3^2;
  5. sbit key0=P3^3;
  6. sbit key1=P3^4;
  7. sbit key2=P3^5;
  8. sbit key3=P3^6;
  9. sbit wan=P3^7;
  10. uc min,hour,sec,num;
  11. bit bdata zhi;
  12. uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*/

  13. void delay(ui x)
  14. {
  15.         ui i,j;
  16.         for(i=0;i<x;i++)
  17.         for(j=0;j<121;j++);
  18. }
  19. void display()
  20. {
  21.         P0=tab[hour/10];
  22.         P2=0xdf;
  23.         delay(1);
  24.         P2=0xff;

  25.         P0=(tab[hour%10])|0x80;
  26.         P2=0xef;
  27.         delay(1);
  28.         P2=0xff;

  29.         P0=tab[min/10];
  30.         P2=0xf7;
  31.         delay(1);
  32.         P2=0xff;

  33.         P0=(tab[min%10])|0x80;
  34.         P2=0xfb;
  35.         delay(1);
  36.         P2=0xff;

  37.         P0=tab[sec/10];
  38.         P2=0xfd;
  39.         delay(1);
  40.         P2=0xff;

  41.         P0=tab[sec%10];
  42.         P2=0xfe;
  43.         delay(1);
  44.         P2=0xff;
  45. }

  46. void keyscan()
  47. {
  48.         if(key0==0)
  49.         {
  50.                 delay(5);
  51.                 if(key0==0)
  52.                 {
  53.                         LED=~LED;
  54.                         zhi=~zhi;
  55.                         if((hour>=12)&&(zhi==0))
  56.                         {       
  57.                                 hour=hour-12;
  58.                         }
  59.                         if((zhi==1)&&(wan==1))
  60.                         {
  61.                                 hour=hour+12;
  62.                         }                                          
  63.                 }
  64.                 while(!key0) display();
  65.         }
  66.         if(key1==0)
  67.         {
  68.                 delay(5);
  69.                 if((key1==0)&&(zhi==0))
  70.                 {
  71.                         hour++;
  72.                         if(hour==12)
  73.                         {
  74.                                 hour=0;
  75.                                 wan=~wan;
  76.                         }
  77.                 }
  78.                 if((key1==0)&&(zhi==1))
  79.                 {
  80.                         hour++;
  81.                         if(hour==24)
  82.                         hour=0;
  83.                 }
  84.                 while(!key1) display();
  85.         }
  86.         if(key2==0)
  87.         {
  88.                 delay(5);
  89.                 if(key2==0)
  90.                 {
  91.                         min++;
  92.                         if(min==60)
  93.                         min=0;
  94.                 }
  95.                 while(!key2) display();
  96.         }
  97.         if(key3==0)
  98.         {
  99.                 delay(5);
  100.                 if(key3==0)
  101.                 {sec=0;}
  102.                 while(!key3) display();
  103.         }
  104. }

  105. void init()
  106. {
  107.         sec=0;
  108.         min=30;
  109.         hour=12;
  110.         LED=1;
  111.         zhi=1;
  112.         wan=1;
  113.         TMOD=0x01;
  114.         TH0=(65536-50000)/256;
  115.         TL0=(65536-50000)%256;
  116.         EA=1;
  117.         ET0=1;
  118.         TR0=1;
  119. }

  120. void shizhi()
  121. {
  122.         if(hour>=12)
  123.         wan=1;
  124.         if((hour<12)&&(zhi==1))
  125.         wan=0;
  126. }

  127. void main()
  128. {
  129.         init();
  130.         while(1)
  131.         {
  132.                 display();
  133.                 keyscan();
  134.                 shizhi();
  135.         }
  136. }
  137. void time0() interrupt 1
  138. {
  139.         TH0=(65536-50000)/256;
  140.         TL0=(65536-50000)%256;
  141.         num++;
  142.         if(num==20)
  143.         {
  144.                 num=0;
  145.                 sec++;
  146.                 if(sec==60)
  147. ……………………

  148. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
简易电子钟.rar (60.9 KB, 下载次数: 34)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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