找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管显示时钟可设置断电记忆(定时器中断+矩阵键盘+数码管扫描+24c02)

[复制链接]
跳转到指定楼层
楼主
ID:405183 发表于 2018-11-13 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数码管显示时钟,用矩阵键盘来设置时间,断电时的时间会存储在EEPROM中,来电时恢复断电时刻的时间

单片机源程序如下:
  1. /*实验效果每加一秒钟显示会跳动,并在8位数码管上以时间的形式显示*/
  2. /*使用矩阵键盘的S1、S2、S3按键分别对秒、分、时进行设置加1操作。*/
  3. /*设备断电时EEPROM记忆断电时刻的时间,重新上电时设备显示断电时刻的时间开始走时*/
  4. /********注意事项:往EEPROM 24c2写入数据时与下一次写数据时适当延时2ms左右*****/
  5. /****************不然写入数据的速度跟不上程序执行时间以至于数据写不进24c02中**/
  6. #include<reg51.h>
  7. #include"init.h"
  8. #include"key.h"
  9. #include"i2c.h"
  10. #include"delay.h"
  11. //sbit K1=P3^0;
  12. //sbit K2=P3^1;
  13. unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14. unsigned char disp[8]={0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};
  15. unsigned char hour=12,minit=0,second=0, Time=0;
  16. bit write=0,KeyState;
  17. main()
  18. {
  19.         unsigned char keyvalue;

  20.         hour=At24c02Read(0x02);                //读出24c02地址0保存的数据赋于小时中
  21.         minit=At24c02Read(0x01);        //读出24c02地址1保存的数据赋于分中
  22.         second=At24c02Read(0x00);        //读出24c02地址2保存的数据赋于秒中
  23.         Timer1configuration();
  24.     Timer0configuration();
  25.        
  26.     Int0Configuration();
  27.                   
  28.     while(1)
  29.     {       
  30.                 keyvalue=readkey();

  31.                 if(TR0==0)
  32.             {

  33.                         if(KeyState==1)  //按键状态为1时代表有按键按下
  34.                         {
  35.                                  if(keyvalue==1)        // 按键1按下时
  36.                                 {
  37.                                        
  38.                                         second++;  //秒加1
  39.                                         write=1;   //向24c02写数据允许
  40.                                         if(second==60)
  41.                                         second=0;
  42.                                 }
  43.                                 else if(keyvalue==2)// 按键2按下时
  44.                                    {
  45.                                         minit++; // 分加1
  46.                                         write=1;//向24c02写数据允许
  47.                                         if(minit==60)
  48.                                         minit=0;
  49.                                 }
  50.        
  51.                                 if(keyvalue==3)          // 按键3按下时
  52.                                 {
  53.                                         hour++;         // 小时加1
  54.                                         write=1;//向24c02写数据允许
  55.                                         if(hour==24)
  56.                                         hour=0;

  57.                                 }
  58.                                 KeyState=0;               //清除按键按下状态标志
  59.                     }       
  60.                
  61.             }         
  62.         disp[7]=DIG_CODE[hour/10];
  63.             disp[6]=DIG_CODE[hour%10];
  64.             disp[4]=DIG_CODE[minit/10];
  65.             disp[3]=DIG_CODE[minit%10];
  66.             disp[1]=DIG_CODE[second/10];
  67.             disp[0]=DIG_CODE[second%10];
  68.                 if(write==1)  //当write为1时向24c02写入数据
  69.                 {
  70.                         write=0;//清除写保护标记
  71.                         At24c02Write(0x02,hour);         //在24c02的地址0中写入数据"小时"
  72.                         Delay1ms(2);/*作适当的延时,程序运行太快以至于数据还没有写入24c02就开始执行下一条语句*/       
  73.                         At24c02Write(0x01,minit);    //在24c02的地址1中写入数据"分"
  74.                         Delay1ms(2);/*作适当的延时,程序运行太快以至于数据还没有写入24c02就开始执行下一条语句*/       
  75.                         At24c02Write(0x00,second);   //在24c02的地址2中写入数据"秒"       
  76.                        
  77.                 }
  78.               
  79.     }          
  80. }
复制代码

所有资料51hei提供下载:
时钟断电记忆 矩阵键盘设置时间.zip (57.47 KB, 下载次数: 72)


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

使用道具 举报

沙发
ID:1 发表于 2018-11-14 04:05 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:73182 发表于 2018-11-14 09:04 | 只看该作者
感谢分享
回复

使用道具 举报

地板
ID:650142 发表于 2019-11-26 19:07 | 只看该作者
可是这个代码少了两个库函数的编辑,没有库是用不了的
回复

使用道具 举报

5#
ID:660143 发表于 2019-12-9 23:09 | 只看该作者
这个代码有原理图么?
回复

使用道具 举报

6#
ID:660143 发表于 2019-12-9 23:09 | 只看该作者
JUNJUNlin 发表于 2019-11-26 19:07
可是这个代码少了两个库函数的编辑,没有库是用不了的

大佬,要用哪两个函数库?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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