找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8341|回复: 6
收起左侧

单片机电子秒表时钟 数码管显示 可设置时间 可用于秒表暂停、清零 Proteus仿真程序

  [复制链接]
ID:474538 发表于 2020-5-22 16:29 | 显示全部楼层 |阅读模式
电子秒表时钟 数码管显示 可设置时间 可用于秒表暂停、清零蜂鸣器按键音
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
VT4KN81_DOV~XFCRO[@R}[9.png 5OPR}WRO`U@A0LLIB0H{I]J.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include"delay.h"
  3. #include"intrins.h"
  4. unsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //定义共阴极LED7段显示码

  5. unsigned char dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //定义数码管位码
  6. unsigned char hour=23,min=58,sec=52,week=1;                 //定义初始时间为23时58分52秒
  7. unsigned char tcount;                           //定义50ms计数变量
  8. unsigned char flag=0;
  9. sbit KEY1=P1^0;
  10. sbit KEY2=P1^1;
  11. sbit KEY3=P1^2;

  12. sbit key1=P1^3;
  13. sbit key2=P3^6;
  14. sbit key3=P3^7;

  15. sbit LED1=P1^7;
  16. sbit LED2=P1^6;
  17. sbit LED3=P1^5;
  18. sbit LED4=P1^4;

  19. sbit BEEP=P3^0;
  20. void display(unsigned char,unsigned char,unsigned char,unsigned char);

  21. void delay(unsigned int time)//定义延时函数
  22.         {
  23.                 unsigned int j = 0;
  24.                 for(;time>0;time--)
  25.                         for(j=0;j<125;j++);
  26.         }

  27. void Delay100us()                //@11.0592MHz
  28. {
  29.         unsigned char i, j;

  30.         _nop_();
  31.         _nop_();
  32.         i = 2;
  33.         j = 100;
  34.         do
  35.         {
  36.                 while (--j);
  37.         } while (--i);
  38. }

  39. void main(void)
  40. {
  41.          TMOD=0x01;                  //定时/计数器0设为方式1
  42.          TH0=(65536-50000)/256;      //定时50ms初值的高八位送入TH0
  43.          TL0=(65536-50000)%256;      //定时50ms初值的低八位送入TL0
  44.          EA=1;                       //开CPU中断
  45.          ET0=1;                      //开定时/计数器0的中断
  46.          TR0=1;                      //启动定时器0
  47.         while(1)
  48.         {
  49.                 if(key1==0)
  50.                 {         BEEP=0;Delay100us();BEEP=1;
  51.                          hour=0;min=0;sec=0;
  52.                 }
  53.                 if(key2==0)
  54.                 {        BEEP=0;Delay100us();BEEP=1;
  55.                         TR0=0;
  56.                 }
  57.                 if(key3==0)
  58.                 {        BEEP=0;Delay100us();BEEP=1;
  59.                         TR0=1;
  60.                 }
  61.                
  62.                 if(KEY1==0)
  63.             {        delay(180);
  64.                     if(KEY1==0)
  65.                         {
  66.                         TR0=0;
  67.                         flag++;
  68.                         if(flag>4)
  69.                         {
  70.                                 flag=0;
  71.                                 TR0=1;
  72.                                 LED1=1;LED2=1;LED3=1;LED4=1;
  73.                         }
  74.                         }

  75.                 }
  76.                 switch(flag)
  77.                 {
  78.                         case 1:        LED1=0;LED2=1;LED3=1;LED4=1;
  79.                                if(KEY2==0)
  80.                                {
  81.                                      delay(180);
  82.                                          if(KEY2==0)
  83.                                          {
  84.                                             hour++;
  85.                                          if(hour>23)
  86.                                          hour=0;
  87.                                          }
  88.                                    }
  89.                                    if(KEY3==0)
  90.                                    {
  91.                                      delay(150);
  92.                                          if(KEY3==0)
  93.                                          {
  94.                                             hour--;
  95.                                          if(hour<0)
  96.                                          hour=23;
  97.                                          }
  98.                                    }
  99.                                    display(hour,min,sec,week);
  100.                                    break;

  101.                         case 2:        LED1=1;LED2=0;LED3=1;LED4=1;
  102.                                if(KEY2==0)
  103.                                {
  104.                                      delay(180);
  105.                                          if(KEY2==0)
  106.                                          {
  107.                                             min++;
  108.                                          if(min>59)
  109.                                          min=0;
  110.                                          }
  111.                                    }
  112.                                    if(KEY3==0)
  113.                                    {
  114.                                      delay(180);
  115.                                          if(KEY3==0)
  116.                                          {
  117.                                             min--;
  118.                                          if(min<0)
  119.                                          min=59;
  120.                                          }
  121.                                    }
  122.                                    display(hour,min,sec,week);
  123.                                    break;

  124.                         case 3:        LED1=1;LED2=1;LED3=0;LED4=1;
  125.                                if(KEY2==0)
  126.                                {
  127.                                      delay(180);
  128.                                          if(KEY2==0)
  129.                                          {
  130.                                             sec++;
  131.                                          if(sec>59)
  132.                                          sec=0;
  133.                                          }
  134.                                    }
  135.                                    if(KEY3==0)
  136.                                    {
  137.                                      delay(180);
  138.                                          if(KEY3==0)
  139.                                          {
  140.                                             sec--;
  141.                                          if(sec<0)
  142.                                          sec=59;
  143.                                          }
  144.                                    }
  145.                                    display(hour,min,sec,week);
  146.                                    break;

  147.                         case 4:LED1=1;LED2=1;LED3=1;LED4=0;
  148.                               if(KEY2==0)
  149.                                {
  150.                                      delay(180);
  151.                                          if(KEY2==0)
  152.                                          {
  153.                                             week++;
  154.                                          if(week>7)
  155.                                          week=1;
  156.                                          }
  157.                                    }
  158.                                    if(KEY3==0)
  159.                                    {
  160.                                      delay(180);
  161.                                          if(KEY3==0)
  162.                                          {
  163.                                             week--;
  164.                                          if(week<1)
  165.                                          week=7;
  166.                                          }
  167.                                    }
  168.                                    display(hour,min,sec,week);
  169.                                    break;

  170.                         case 5:LED1=1;LED2=1;LED3=1;LED4=1;flag=0;TR0=1;

  171.                         default:break;
  172.                
  173.                
  174.                 }
  175.              display(hour,min,sec,week);
  176.         }
  177. }


  178. void display(unsigned char hour,unsigned char min,unsigned char sec,unsigned char week)
  179. {
  180.         
  181.         P0=LED[hour/10];            //小时的十位送数码管1位显示
  182.         P2=0xfe;
  183.         delay(1);
  184.         P2=0xff;
  185.         
  186.         P0=LED[hour%10];            //小时的个位送数码管2位显示
  187.         P2=0xfd;
  188.         delay(1);
  189.         P2=0xff;
  190.         
  191.         P0=LED[min/10];                //横杠送数码管3位显示
  192.         P2=0xfb;
  193.         delay(1);
  194.         P2=0xff;
  195.         
  196.         P0=LED[min%10];             //分的十位送数码管4位显示
  197.         P2=0xf7;
  198.         delay(1);
  199.         P2=0xff;
  200.         
  201.         P0=LED[sec/10];             //分的个位送数码管5位显示
  202.         P2=0xef;
  203.         delay(1);
  204.         P2=0xff;
  205.         
  206.         P0=LED[sec%10];                 //横杠送数码管6位显示
  207.         P2=0xdf;
  208.         delay(1);
  209.         P2=0xff;
  210.         
  211.         P0=LED[10];             //秒的十位送数码管7位显示
  212.         P2=0xbf;
  213.         delay(1);
  214.         P2=0xff;
  215.         
  216.         P0=LED[week];             //秒的个位送数码管8位显示
  217.         P2=0x7f;
  218.         delay(1);
  219.         P2=0xff;
  220. }



  221. void T0_time() interrupt 1    //定时器中断处理函数
  222. {
  223.         TH0=(65536-50000)/256;      //重新将定时50ms初值的高八位送TH0
  224.         TL0=(65536-50000)%256;      //重新将定时50ms初值的低八位送TH0
  225.         tcount++;                   //定时50ms时间到加1
  226.         if(tcount==20)              //判断是否到1s
  227.         {
  228.         tcount=0;                   //到1s,变量清0
  229.         sec++;                      //秒计数变量加1
  230.         if(sec==60)                 //判断秒是否到60
  231.         {
  232.         sec=0;                      //到60,秒变量清0
  233. ……………………

  234. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
BH0D5I49(EXUO_XU6)J(RWB.png
所有资料51hei提供下载:
电子时钟设计.zip (126.91 KB, 下载次数: 292)

评分

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

查看全部评分

回复

使用道具 举报

ID:543424 发表于 2020-10-18 23:01 来自手机 | 显示全部楼层
你好为什么仿真器可以,做PcB不能运行不知道什么原因?
回复

使用道具 举报

ID:543424 发表于 2020-10-19 18:43 来自手机 | 显示全部楼层
能给个原理图吗?谢谢
回复

使用道具 举报

ID:859847 发表于 2020-12-14 02:25 | 显示全部楼层
请问一下,去掉一个星期的数码管的是怎么做的呀
回复

使用道具 举报

ID:867309 发表于 2020-12-26 18:41 来自手机 | 显示全部楼层
#include"delay.h" #include"intrins.h"这俩头文件那去了
回复

使用道具 举报

ID:328014 发表于 2020-12-27 02:13 | 显示全部楼层
1463409593 发表于 2020-12-26 18:41
#include"delay.h" #include"intrins.h"这俩头文件那去了

delay.h延时程序楼主已经提供了,intrins.h是Keil自带的
回复

使用道具 举报

ID:841319 发表于 2020-12-30 16:05 | 显示全部楼层
会吃不饱手机内存
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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