数字时钟的显示及修改

实验目的

掌握定时器的使用、按键检测及数码管的动态显示。

实验内容

1、绘制如下proteus仿真图

2、利用定时器的定时功能,用6位数码管实现时、分、秒的显示及更新;
3、三个按键实现时间的修改。

代码

#include<reg52.h>#define u8 unsigned char
#define u16 unsigned int sbit SW1 =P3^0;
sbit SW2 =P3^1;
sbit SW3 =P3^2;sbit LED    = P3^7;u8 Data[]={ 0x3f  , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 , 0x00 } ;enum fun
{confirm=0,set_sec,set_min,set_hour
};
enum fun SetTime;
//u8 SetTime;bit SMG_SS_FLAG=0;
u8 key_hour=8;
u8 key_min =56;
u8 key_sec =0;void delay_ms(u16 ms);
void Display(u8 Hour,u8 Min,u8 Sec);
void Key(void);

main()
{LED=1;TMOD=0x01;      //定时器0 方式1TH0=0xfc;        // 设置初始值1msTL0=0x18;TR0=1;            //启动定时器ET0=1;          //允许中断EA=1;    while(1){Key();//  display();}
}void Key(void)
{if(SW1==0){delay_ms(10); if(SW1==0)      //{SetTime++;if(SetTime>set_hour){SetTime=confirm;}//  SetTime=fun_f;}while(!SW1){;};     // }else if(SW2==0){delay_ms(10);  if(SW2==0)      //{switch(SetTime){case confirm:                  break;case set_sec:  key_sec++;   break;case set_min:  key_min++;    break;case set_hour: key_hour++;   break;}}while(!SW2){;};      // }else if(SW3==0){delay_ms(10);  if(SW3==0)      //{switch(SetTime){case confirm:                  break;case set_sec:  if(key_sec!=0)key_sec--;   break;case set_min:  if(key_min!=0)key_min--;    break;case set_hour: if(key_hour!=0)key_hour--;   break;}}while(!SW3){;};      // }
} void delay_ms(u16 ms)
{u8 k;u16 i;for(i=ms*2;i>0;i--){for(k=250;k>0;k--){}}
}void Display(u8 Hour,u8 Min,u8 Sec)
{static u8 DpyScan=0;P2=0xff;switch(DpyScan){case 0:if(SMG_SS_FLAG==1||SetTime!=set_hour){P1=Data[Hour/10];}else {P1=0x00;}  break;case 1:if(SMG_SS_FLAG==1||SetTime!=set_hour){P1=Data[Hour%10];}else{P1=0x00;}    break;case 2:if(SMG_SS_FLAG||SetTime!=set_min){P1=Data[Min/10];}else {P1=0x00;}  break;case 3:if(SMG_SS_FLAG||SetTime!=set_min){P1=Data[Min%10];}else{P1=0x00;}   break;case 4:if(SMG_SS_FLAG||SetTime!=set_sec){P1=Data[Sec/10];}else {P1=0x00;}  break;case 5:if(SMG_SS_FLAG||SetTime!=set_sec){P1=Data[Sec%10];}else {P1=0x00;}  break;}P2=~(0x01<<DpyScan);if(DpyScan<6){DpyScan++ ;}else{DpyScan=0;}
}void timer0(void) interrupt 1      //定时器0中断函数
{static u16 SMG_twinkle;static u16 TIME=0;SMG_twinkle++;if(SMG_twinkle>20)     {SMG_twinkle=0;SMG_SS_FLAG=~SMG_SS_FLAG;}    TIME++ ;if(TIME>=200){TIME=0;key_sec++;}if(key_sec>59){key_sec=0;key_min++;} if(key_min>59) {key_min=0;key_hour++;}  if(key_hour>23) {key_hour=0;key_min=0;key_sec=0;}Display(key_hour,key_min,key_sec);TH0=0xec;     //1msTL0=0x77;} 

效果

主页添加 wx 备注“数字时钟的显示及修改”。有proteus和完整工程
(由于太多白嫖党以及实在毫无礼貌,以后只能有偿获取。¥6.6,不到半杯奶茶钱,给小姐姐编程道路上一点点支持吧)

51单片机控制数字时钟的显示及修改相关推荐

  1. 51单片机DS1302时钟LCD1602显示(可以按键设置时钟)

    DS1302实时时钟具有能计算2100年之前的秒.分.时.日.日期.星期.月.年的能力,还有闰年调整的能力. 图1:DS1302引脚示意图 其中: X1.X2:32.768KHz晶振接入引脚. GND ...

  2. 51单片机完成时钟形式显示

    题目要求: 用四个数码管完成时钟形式显示. 如显示1 2. 0 0 然后一个按键控制暂停并闪烁,另一个按键控制分钟加1 要求:当第一个按键不按下时,第二个按键无法完成加1动作. 仿真图,如下: 按键K ...

  3. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

  4. 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接: 51单片机七段数码管显示时钟加按键控制-③-74HC595版 51单片机七段数码管显示时钟加按键控制-②-74HC595版 文章目录 一.实验内容: 二.实验分析: 三.仿真图: 四.源代 ...

  5. 基于51单片机ds1302时钟、ds18b20、lcd12864的恒温器

    目录 项目:基于51单片机ds1302时钟.ds18b20的恒温器 功能说明: 运行流程: 效果展示: 供电方式: 用途: 提高: 附: ​                              ...

  6. 基于51单片机的时钟系统

     这一次带来的项目是课程设计级别的基于51单片机的时钟系统,本次的项目共有两种,一种是基础功能时钟,上电后自动从00-00-00开始计时,另一种加上了调时功能,上电后自动从00-00-00开始,当需要 ...

  7. 单片机 c语言百位加上小数点,51单片机水温控制LCD显示加VB上位机温度曲线绘制...

    现功能,1L水由1KW电炉加热,要求水温在一定范围内人工设定,并能随着环境温度改变自动调节,以维持设定的温度不变. 矩阵键盘输入设定温度,LCD1602显示温度值,VB上位机绘制温度曲线 /***** ...

  8. 51单片机 DHT11+LCD12864温湿度显示 + Proteus仿真

    51单片机 DHT11+LCD12864温湿度显示 + Proteus仿真 采用的接线方式是IIC接口,在Proteus里面仿真太慢了,不知道是电脑古老问题还是怎么,看图像就知道了,有多卡,感觉电脑运 ...

  9. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

最新文章

  1. Symfony学习笔记
  2. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
  3. 方法总比困难多_只是为了生活
  4. MongoDB与c#(二)简单例子 使用1.7版本驱动
  5. cesium 3dtiles 加载本地数据_cesium结合geoserver实现地图空间查询(附源码下载)
  6. LeetCode 907. 子数组的最小值之和(单调栈)
  7. 手机浏览器网址_苹果手机怎么登两个微信
  8. 光阴似箭——绿巨人NVIDIA显卡发展简史回顾
  9. 阿里巴巴2013实习招聘笔试题5月19日
  10. Android 9.0/P 开发问题及解决方案汇总
  11. PyCharm中,如何成功 import caffe?
  12. 去了一趟少林寺 竟然发现...
  13. 跟随阿里云贾扬清,走近AI开发者的奇幻漂流
  14. 摩登兄弟:参加《歌手》压力很大,在准备下一期歌曲
  15. 如何对互联网上产生的舆情传播动态进行分析的方法
  16. Windows11 输入法图标不见了
  17. 自带流量的免费微信编辑器推荐
  18. forEach()与each()方法的区别
  19. 利用Hackrf One进行GPS定位欺骗制作超级跑马机
  20. C语言:输入起始日期与截至日期,计算相距天数。

热门文章

  1. 总账:日记账导入流程
  2. 对linux中级用户有用的20个命令
  3. 计算机没考好检讨,没考好万能检讨书(精选5篇)
  4. 我要的就是简单的幸福
  5. 超市促销叫卖的语音是怎么做的?介绍简单小方法,方便又快捷
  6. WIZnet正式发布W5500
  7. 微信小程序真机调试问题
  8. 自学Unity之做一个MOBA游戏4——小兵
  9. php+备份手机通讯录,科学网—5款手机通讯录同步工具 - 赵晓锋的博文
  10. java实现爬虫爬网站图片