基于单片机的课程设计
图(12)程序流程图
按键的检测主要是通过查询的办法来实现,利用按键进行间调整。 K1按下则开始设置时间及日期,同时被选择的时间和日期开始闪烁,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕。 2、软件设计
软件总设计:主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。
软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。
具体程序见附件一:程序 3、软件调试
在软件调试过程中,当调节时间和日期后,秒就重新从零开始计数,后来分析了程
基于单片机的课程设计
序才发现,在设置时间和日期前先暂停时钟,设置好后需启动时钟,而启动适中的命令是write_ds1302(0x80,0x00),这条指令在启动始终的同时刚好把秒寄存器写为了零,所以秒就重新从零开始计数,通过修改程序,时间和日期就能够正确显示了。
还有一个问题,在设置月、日、星期时,会出现00的情况,通过检查程序,知道是键设定函数的影响,设置时间和日期共用同一个函数,但时间有零时、零分、零秒的情况,所以没有修改程序,因为设置好日期后再运行不会出现月、日、星期为00的情况,只要设置时稍加注意就行。
整体电路与仿真结果分析:
电子万年历硬件电路图及仿真如图(13)所示,系统由AT89C52单片机,按键扫描电路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。
仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,并且相应的调整的位会闪烁,按K2键用于加1操作,K3键用于减1操作。仿真正确显示了时间和日期,符合设计的要求。
图(13) 电子万年历硬件电路图