找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数字电子钟 共阳数码管显示,带开启关闭键,调时调分调秒键

[复制链接]
跳转到指定楼层
楼主
数字电子钟,很基础的,用得共阳数码管显示,四个按键,分别是开启关闭键,调时调分调秒键。和大家一起学习。

完整的代码下载:
Practice1--要求1.zip (73.99 KB, 下载次数: 34)

  1. /*******************************************************************
  2. 程 序 名:数字电子时钟模块化程序(缓冲数组)

  3. 编 写 者:龙皓明

  4. 指导老师:王韧

  5. 时   间 :2016.8.12

  6. 功   能 :显示时分秒,设有四个功能键:启动/停止,调时,调分,调秒
  7.                                                                                   
  8. 使用说明:将单片机的P2口用排线连于J31即73ls573位选(P20对I11),P0口
  9.                       连于J32即数码管段选(P00对O11),P1口连接J16(P10--P7...S1--S7)
  10.                                                                                                           
  11. ********************************************************************/

  12. #include <reg52.h>
  13. #include "delay.h"                       //延时头文件
  14. #include "display.h"                           //显示函数头文件
  15. #include "set_find_code.h"  //设置缓冲数组文件
  16. #include "key.h"                                //键扫描函数文件
  17. uchar find_code[8];
  18. bit sign=0;
  19. uchar i,hour,minute,second,keyzhi,c=0;

  20. /*****************主函数****************/
  21. void main()
  22. {                hour=8;                                                                //设置小时初始值
  23.                 minute=30;                                                        //设置分钟初始值
  24.                 second=0;                                                        //设置秒钟初始值
  25.     TMOD=0x01;              //设置定时器0为工作方式1
  26.     TH0=(65536-50000)/256;  //定时50ms高8位求模       
  27.     TL0=(65536-50000)%256;  //定时50ms低8位求模
  28.     EA=1;                   //开总中断
  29.     ET0=1;                  //开定时器0中断
  30.     //TR0=1;
  31.                 set_find_code(12,12,12,12,12,12,12,10);//显示系统提示符“P.”
  32.                 while(1)
  33.                 {               
  34.                         display(find_code);
  35.                         keyzhi=key_scan();                                        //键扫函数,提取返回值(即键值)
  36.                         if(keyzhi==0x01)
  37.                         {
  38.                                 sign=~sign;                                                        //取反,判定开启/暂停
  39.                                 if(sign==1)                                                  //判定开启电子钟
  40.                                 {
  41.                                         TR0=1;                                                  //开启定时器0,电子钟运行                                                       
  42.                                         display(find_code); //电子钟显示
  43.                                 }                               
  44.                 if(sign==0)             //判定暂停电子钟,进入调节模式
  45.                                 {
  46.                     TR0=0;                                                        //关闭定时器0,电子钟停止运行
  47.                                         keyzhi=key_scan();       
  48.                                         while(keyzhi!=0x01) //如果开启/暂停键没有按下
  49.                                         {
  50.                                                 keyzhi=key_scan();//读取键值
  51.                                                 switch(keyzhi)                //进入调时/分/秒模式
  52.                                                 {
  53.                                                         case 0x02: hour++;if(hour==24)                 //调时键按下并释放后时钟+1
  54.                                                                 {
  55.                                                                         hour=0;                        //调到24时时清零
  56.                                                                 }
  57.                                                                 set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);
  58.                                                                 break;
  59.                                                         case 0x04: minute++;if(minute==60)//调分键按下并释放后分钟+1
  60.                                                                 {
  61.                                                                         minute=0;                //调到60分时清零
  62.                                                                 }
  63.                                                                 set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);                               
  64.                                                                 break;
  65.                                                         case 0x08: second++;if(second==60)//调秒键按下并释放后秒钟+1
  66.                                                                 {
  67.                                                                         second=0;                //秒调到60时清零
  68.                                                                 }
  69.                                                                 set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);                               
  70.                                                                 break;
  71.                                                                 default : display(find_code);break;                //稳定显示所有数据                                                                                  
  72.                                                 }
  73.                                         }
  74.                                 }
  75.                         }                                       
  76.                 }
  77. }               
  78. void timer0() interrupt 1   //定时器0中断入口

  79. {
  80.    TH0=(65536-50000)/256;   //定时器重赋初值
  81.    TL0=(65536-50000)%256;
  82.    c++;                             //中断次数
  83.          if(c==20)
  84.          {
  85.                                 c=0;
  86.                                 second++;
  87.                                 if(second==60)                          //计时一分钟后清零
  88.                                 {
  89.                                                 second=0;
  90.                                                 minute++;                                        //秒钟每计时一分钟,分钟自+1
  91.                                                 if(minute==60)          //计时一小时后清零
  92.                                                 {
  93.                                                                 minute=0;
  94.                                                                 hour++;        //分钟每计时一小时,时钟自+1
  95.                                                                 if(hour==24)         //24小时倒计时到
  96.                                                                 {
  97.                                                                                         hour=0;         //清零
  98.                                                                 }               
  99.                                                 }
  100.                                 }
  101.                 }
  102.                 set_find_code(hour/10,hour%10,11,minute/10,minute%10,11,second/10,second%10);                                                                         
  103. }                //送显示数据

复制代码

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

使用道具 举报

沙发
ID:161231 发表于 2017-2-10 09:02 来自手机 | 只看该作者
没有钱下载不下来
回复

使用道具 举报

板凳
ID:108263 发表于 2017-8-8 11:09 | 只看该作者
songsiyuan 发表于 2017-2-10 09:02
没有钱下载不下来

你要的话我可以发给你
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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