历史上的今天
今天是:2024年12月10日(星期二)
2019年12月10日 | 数码管显示时钟可设置断电记忆
2019-12-10 来源:51hei
数码管显示时钟,用矩阵键盘来设置时间,断电时的时间会存储在EEPROM中,来电时恢复断电时刻的时间
单片机源程序如下:
/*实验效果每加一秒钟显示会跳动,并在8位数码管上以时间的形式显示*/
/*使用矩阵键盘的S1、S2、S3按键分别对秒、分、时进行设置加1操作。*/
/*设备断电时EEPROM记忆断电时刻的时间,重新上电时设备显示断电时刻的时间开始走时*/
/********注意事项:往EEPROM 24c2写入数据时与下一次写数据时适当延时2ms左右*****/
/****************不然写入数据的速度跟不上程序执行时间以至于数据写不进24c02中**/
#include #include"init.h" #include"key.h" #include"i2c.h" #include"delay.h" //sbit K1=P3^0; //sbit K2=P3^1; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char disp[8]={0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f}; unsigned char hour=12,minit=0,second=0, Time=0; bit write=0,KeyState; main() { unsigned char keyvalue; hour=At24c02Read(0x02); //读出24c02地址0保存的数据赋于小时中 minit=At24c02Read(0x01); //读出24c02地址1保存的数据赋于分中 second=At24c02Read(0x00); //读出24c02地址2保存的数据赋于秒中 Timer1configuration(); Timer0configuration(); Int0Configuration(); while(1) { keyvalue=readkey(); if(TR0==0) { if(KeyState==1) //按键状态为1时代表有按键按下 { if(keyvalue==1) // 按键1按下时 { second++; //秒加1 write=1; //向24c02写数据允许 if(second==60) second=0; } else if(keyvalue==2)// 按键2按下时 { minit++; // 分加1 write=1;//向24c02写数据允许 if(minit==60) minit=0; } if(keyvalue==3) // 按键3按下时 { hour++; // 小时加1 write=1;//向24c02写数据允许 if(hour==24) hour=0; } KeyState=0; //清除按键按下状态标志 } } disp[7]=DIG_CODE[hour/10]; disp[6]=DIG_CODE[hour%10]; disp[4]=DIG_CODE[minit/10]; disp[3]=DIG_CODE[minit%10]; disp[1]=DIG_CODE[second/10]; disp[0]=DIG_CODE[second%10]; if(write==1) //当write为1时向24c02写入数据 { write=0;//清除写保护标记 At24c02Write(0x02,hour); //在24c02的地址0中写入数据"小时" Delay1ms(2);/*作适当的延时,程序运行太快以至于数据还没有写入24c02就开始执行下一条语句*/ At24c02Write(0x01,minit); //在24c02的地址1中写入数据"分" Delay1ms(2);/*作适当的延时,程序运行太快以至于数据还没有写入24c02就开始执行下一条语句*/ At24c02Write(0x00,second); //在24c02的地址2中写入数据"秒" } } }
史海拾趣
|
一、成长--从摇滚青年到设计精英 9月的一天,在一场技术研讨会上,A君一边老到地翻看着Demo板,一边询问着一些技术细节,俨然一个技术高手,可是谁能想到,3年前,他曾是一个痴迷音乐的摇滚青年。 那是2003年的时候,他经常穿着 ...… 查看全部问答> |
|
我正在做一个基于ATmega16单片机的直流调速系统 要用到PID控制 第一个问题是 怎么用ATmega16实现PID控制 第二个问题 怎么将PID的输出与PWM波的占空比联系起来… 查看全部问答> |
|
数字转模拟(D/A) 隔离转换器485/232转4-20MA 数字转模拟(D/A) 隔离转换器:ISO DAO系列 RS232/RS485信号转模拟信号 隔离D/A转换器 产品概述: ISO DAO系列产品实现主机RS-485/232接口信号隔离转换成标准模拟信号,用以控制远程设备。ISODA系列产品可应用在 RS-232/RS-4 ...… 查看全部问答> |
|
我在光纤的接收端做了一个曼彻斯特解码模块(Verilog写的),没有任何校验算法加入。误码率很高,基本上是1%左右,哪位做过这东西,帮忙解释解释。谢谢… 查看全部问答> |
|
写哪样的驱动,可以区分处理笔记本的USB Mouse和触摸板的数据? 应该是Filter Driver吧? 可WDK中只看到PS/2的Sample,像笔记本上的USB HID Mouse是否就不支援了呢? 有人指点下不? 3KS… 查看全部问答> |
|
我使用evc开发一个应用程序,使用了timer,当timer里面没有任何人为添加的代码的时候,查看程序内存中正在使用的内存,没有变化。当我添加这样两行代码: CWnd* pWnd = GetDlgItem(IDC_COORD); ...… 查看全部问答> |
|
wince上能否实现对文件属性控制? 如c#中的 FileInfo fi = new FileInfo(textBox1.Text); fi.IsReadOnly == false… 查看全部问答> |
|
求解答,工具是ccs2.2,读写flash空间和Clist问题 1.目前要把VC的程序刻录到板子上,请问原程序中用的是CList, c里面有替代的或差不多的吗?如果有,头文件是什么?刚接触这个,挺迷糊,刚 从一个辞职的同事上接手个半成品程序。 2. 请问怎么往板子里的flash空间写数据? typedef struct & ...… 查看全部问答> |




