找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机实现电子表程序与Proteus仿真原理图

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #include"key.c"
  3. unsigned char i,j,k;
  4. unsigned char seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  5. unsigned char flash;
  6. sbit LED=P1^0;
  7. void timer0_isr(void)interrupt 1
  8. {
  9.         TH0=0xF8;
  10.         TL0=0x2F;
  11.         i++;
  12.         if(i>=250)
  13.         {
  14.                 flash=~flash;
  15.                 i=0;
  16.                 j++;
  17.         }
  18.         if(j>=2)
  19.         {
  20.                 sec++;
  21.                 j=0;
  22.         }
  23.         if(sec>=60)
  24.         {
  25.                 min++;
  26.                 sec=0;
  27.         }
  28.         if(min>=60)
  29.         {
  30.                 hour++;
  31.                 min=0;
  32.         }
  33.         if(hour>=24)
  34.         {
  35.                 hour=0;
  36.         }
  37.         P0=0xff;
  38.         if(key1_flag==0)
  39.         {
  40.                 switch(k)
  41.                 {
  42.                         case 0:P0=seven_seg[sec%10];P2=~0x01;break;
  43.                         case 1:P0=seven_seg[sec/10];P2=~0x02;break;
  44.                         case 2:P0=seven_seg[min%10] &(0x7F | flash);P2=~0x04;break;
  45.                         case 3:P0=seven_seg[min/10];P2=~0x08;break;
  46.                         case 4:P0=seven_seg[hour%10] & (0x7F | flash);P2=~0x10;break;
  47.                         case 5:P0=seven_seg[hour/10];P2=~0x20;break;
  48.                 }
  49.         }
  50.         if(key1_flag==1)
  51.         {
  52.                 j=0;
  53.                 switch(k)
  54.                 {
  55.                         case 0:P0=seven_seg[sec_t%10];P2=~0x01;break;
  56.                         case 1:P0=seven_seg[sec_t/10];P2=~0x02;break;
  57.                         case 2:P0=seven_seg[min_t%10];P2=~0x04;break;
  58.                         case 3:P0=seven_seg[min_t/10];P2=~0x08;break;
  59.                         case 4:P0=seven_seg[hour_t%10] | flash;P2=~0x10;break;
  60.                         case 5:P0=seven_seg[hour_t/10] | flash;P2=~0x20;break;
  61.                 }
  62.         }
  63.         if(key1_flag==2)
  64.         {
  65.                 j=0;
  66.                 switch(k)
  67.                 {
  68.                         case 0:P0=seven_seg[sec_t%10];P2=~0x01;break;
  69.                         case 1:P0=seven_seg[sec_t/10];P2=~0x02;break;
  70.                         case 2:P0=seven_seg[min_t%10] | flash;P2=~0x04;break;
  71.                         case 3:P0=seven_seg[min_t/10] | flash;P2=~0x08;break;
  72.                         case 4:P0=seven_seg[hour_t%10];P2=~0x10;break;
  73.                         case 5:P0=seven_seg[hour_t/10];P2=~0x20;break;
  74.                 }
  75.         }
  76.         if(key1_flag==3)
  77.         {
  78.                 j=0;
  79.                 switch(k)
  80.                 {
  81.                         case 0:P0=seven_seg[sec_t%10] | flash;P2=~0x01;break;
  82.                         case 1:P0=seven_seg[sec_t/10] | flash;P2=~0x02;break;
  83.                         case 2:P0=seven_seg[min_t%10];P2=~0x04;break;
  84.                         case 3:P0=seven_seg[min_t/10];P2=~0x08;break;
  85.                         case 4:P0=seven_seg[hour_t%10];P2=~0x10;break;
  86.                         case 5:P0=seven_seg[hour_t/10];P2=~0x20;break;
  87.                 }
  88.         }
  89.         if(key1_flag==4)
  90.         {
  91.                 j=0;
  92.                 switch(k)
  93.                 {
  94.                         case 0:P0=seven_seg[min_r%10];P2=~0x01;break;
  95.                         case 1:P0=seven_seg[min_r/10];P2=~0x02;break;
  96.                         case 2:P0=seven_seg[hour_r%10] | flash;P2=~0x04;break;
  97.                         case 3:P0=seven_seg[hour_r/10] | flash;P2=~0x08;break;
  98.                         case 4:P0=0xff;P2=~0x10;break;
  99.                         case 5:P0=0x0c;P2=~0x20;break;
  100.                 }
  101.         }
  102.         if(key1_flag==5)
  103.         {
  104.                 j=0;
  105.                 switch(k)
  106.                 {
  107.                         case 0:P0=seven_seg[min_r%10] | flash;P2=~0x01;break;
  108.                         case 1:P0=seven_seg[min_r/10] | flash;P2=~0x02;break;
  109.                         case 2:P0=seven_seg[hour_r%10];P2=~0x04;break;
  110.                         case 3:P0=seven_seg[hour_r/10];P2=~0x08;break;
  111.                         case 4:P0=0xff;P2=~0x10;break;
  112.                         case 5:P0=0x0c;P2=~0x20;break;
  113.                 }
  114.         }
  115.         k++;
  116.         if(k>=6)k=0;
  117. }

  118. void timer0_init(void)
  119. {
  120.         TMOD=0x01;
  121.         TH0=0xF8;
  122.         TL0=0x2F;
  123.         EA=1;
  124.         ET0=1;
  125.         TR0=1;
  126. }

  127. void main()
  128. {
  129.         timer0_init();
  130.         while(1)
  131.         {
  132.                 key();
  133.                 if(min==min_r && hour==hour_r)
  134.                 LED=1;
  135.                 else
  136.                 LED=0;
  137.         }
  138.        
  139. }
复制代码

所有资料51hei附件下载:
电子表.7z (33.09 KB, 下载次数: 7)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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