题目要求:基本AT89S52单片机的时钟日历显示.
要求:能正确的显示时间
能正确的显示日历
难点分析:
1.能正确的显示时间,在单片机或是计算中执行每一条指令时都会对自己本身用去机器周期.所以在设置定时器不应设置刚刚好1秒的时间,应该比1些秒少,这一秒的时间内包含定时器的时间,执行其它指令的时间.
2.能正确的显示日历.在这里看一个比较简单的要示,但是我们必需从简单里考虑润年,二月天数,还有大小月的问题.这些都是不能忽视的.
注:出错通常都是忽视看似简单的问题.一个好的程序员不否定掌握有很用的技术,但是好的技术员本身基础是相当过关的.这也是我今后要注意的问题之一.
3.本系统中只配置了四个键.也就是说我们所有的调时间,调日历必需也只能通过这四个键来完成.这里有一个菜单的实现原理.
实现方法:
基于以上难点分析我设计了以下几种应对方法.
针对难1:在这正确的显示时间里,我们只要简单的设计程序,每60秒进1分钟,秒清0,也就是在59过后加1就清0,照推.分钟,小时天按常理照推.
针对难点2:
日期显示我们也按常理照推.记得区分大小月的问题和二月问题,关于二月的什么问题呢,就是润年的问题.润年的基本算法,年数能被4整除但不能对100整除,年数能被100整除又能被400整除的.
能语言实现语句:if((year %4 ==0 && year %100 !=0)||( year % 400==0))
注:本语句据今天一朋友说,她看动画片的时候看到本算法是不完善的.在2996年以后就不是正确的,我没验证过.准备找时间验证一下,如果有朋友看到这文章有兴趣的话也验证一下.到时别忘了通知我一声.
针对难点3:
关于四键设计的方法:虽然我们看用过很多四键设计的实物,但是在实际中我们如何设计程序呢?
我采用的方法是:
(1),从键码扫描程序中读得键值.如果为功能键,功能选择计数器计数一次,如果是确定,也设计的叫退出键.则返回选择计数器值.其他的两个键值则忽略不计,如果在没有按过功能键,按了退出键的,则返回正常执行.
(2):返回了功能选择.则此时有三个键起作用了,功能选择键屏蔽.中间两个,一个加一个减,每次按键对NUM加减计数器执行加或减,当执行了确定键里,返回NUM计数器的值.
(3).些时就完了一次菜单的执行.接下就是调整时间,或是日历了.
接下来就是把数据(年,月日,小时,分钟,秒)写入显示器(我采用的12864带字库的液晶显示),