6.系统软件设计
整个程序是在Keil 4环境下编写运行的,程序包含了main,ds1302,lcd12864,key,ringlock,menu,DS18B20等模块组成。整个程序能实现对多功能电子钟的各种操作。下面分别对各个模块进行简要介绍。
6.1 main模块
该模块是对所有模块的汇总,是整个程序的核心部分。在该模块中包含了主函数,时钟显示函数,中断函数,设置时间函数,延时函数,设置闹钟函数。
主函数void main():在该函数开始调用了LCD12864_Init(),Ds1302Init1(),ClockInit(),四个函数对LCD12864,DS1302进行了初始化设置;renum=menu()是菜单返回值控制进入哪个设置;接着对中断作了相应的设置,如打开中断之类的;然后是一个while(1)的无限循环。在该部分中用了两个if语句来判断是进入时间的设定,还是进入闹钟的设定,在设定时间和闹钟的同时,时钟不会停止,仍旧在运行中。
时钟显示函数:在void LcdDisplay()、void LcdDisplay1()两个函数中通过LCD12864_SetWindow()函数的调用来确定LCD12864显示的哪一行,通过LCD12864_WriteData()函数的调用来显示时间——年、月、日、时、分、秒、星期;
中断函数void Int0() interrupt 0:判断有没有按按键K17(单片机上的按键标号,
下同),按一下进入设置时间部分,设置好时间后,再按一下,时钟开始从设置
的时间运行。
6.2 ds1302模块
在该模块中包含了向DS1302写入地址和数据的函数void Ds1302Write(uchar addr, uchar dat),从DS1302读取一个地址的数据的函数uchar Ds1302Read(uchar addr),对DS1302进行初始化的函数void Ds1302Init(),读取时钟信息的函数void Ds1302ReadTime(),对DS1302时钟进行设置的函数void Ds1302Set()以及恢复掉
11
电前数据的函数void Ds1302Init1()。
该模块能实现对DS1302时钟的控制,其需输入addr,dat两个数据。
6.3 lcd12864模块
该模块中包含了位接收函数uchar BitReverse32(uchar number),延时函数void LCD12864_Delay1ms(uint c),写命令函数void LCD12864_WriteCmd(uchar cmd),检测LCD12864是否正忙函数uchar LCD12864_Busy(void),写数据函数void LCD12864_WriteData(uchar dat),对LCD12864进行初始化的函数void LCD12864_Init(),读取数据函数uchar LCD12864_ReadData(void)以及在基本指令模式下设置显示坐标的函数void LCD12864_SetWindow(uchar x, uchar y)(其中,
x是设置行,y是设置列)。
该模块中对LCD12864进行了相关的操作。
6.4 key模块
该模块中只包含了两个函数——延时函数void delay7(uint z)和键盘控制函数uchar KeyData(void),以实现键盘控制功能。在本设计中一共用到了六个按键(四个独立按键、两个矩阵键盘中的按键),其功能如下表所示:
按键及其功能表 按键标号(同单片机上标示) K15 K16 K17 K18 K19 K20 按键功能 运行时钟 进入闹钟的设置 进入中断,设置时钟 控制设置时间或闹钟的选位 设置时间或闹钟时的加一键 设置时间或闹钟时的减一键 12
6.5 ringlock模块
该模块是铃声响铃模块,该模块能使喇叭发出有节奏的音乐,还能实现红外遥控对闹钟的控制。该模块中对闹钟部分进行了初始化void ClockInit(void),采用定时器中断0来控制音乐节拍void int1() interrupt 1,用了一个延时函数来控制频率延时void delay1 (unsigned char m),还存在一个毫秒延时子程序void delayms1(unsigned char a),接着是这个模块的核心响铃函数void ring() ,最后是红外控制闹钟的一个中断子函数void ReadIr() interrupt 2。
6.6 menu模块和DS18B20模块
这两个模块的内容是自己添加的,也属于一个创新点。menu模块用以进入时钟前显示一个菜单,在菜单中可以选择是运行时钟,还是设置闹钟,这个菜单的设置让使用者能方便的使用这个电子钟,因此具有较强的实用性。DS18B20模块是在显示时间的同时采集当时的温度并且显示出来,由于现在用品追求多样化,多功能化,给系统加上温度测量显示模块,能够方便人们的生活,使该设计具有人性化的特点。
7.测试与结果分析
1)系统上电后,首先显示“多功能电子时钟”的字样,接着进入主菜单,LCD12864显示“功能选择:1 运行时钟 2 设置闹钟”。按各功能键执行相应的功能(时钟操作方法详见附录一)。
2)设定闹铃时间,当闹铃时间到时响铃。 可用红外遥控来停止闹钟。 3)显示时间时通过与秒表对比,测试的系统时钟走时准确,误差很小。 4)上电后记录下时间,然后使单片机断电,隔一段时间再次通电,测得系统时钟仍旧走时准确。
13
8.总结
本次设计的多功能电子钟采用LCD12864液晶屏幕显示系统,以STC89C51单片机为核心,通过DS1302芯片能准确计时,以数字形式显示年月、日、时、分、秒,而且能自动进行平年、闰年的转换,在DS1302中还能编程以实现掉电后存储数据的功能,以使电子钟重新上电时的时间不受掉电的影响。在该时钟中小时以24小时计时形式,分秒计时为60进位。该电子钟可通过矩阵按键和4个独立按键来对电子表进行控制,可进行闹钟设定、控制及时间日期的设定。当闹钟时间一到,新加的喇叭能发出有节奏的音乐,并且LED灯发光节奏随音乐变化,而且可以通过红外遥控来停止闹钟,这在现实生活中显得十分方便。为了更加方便使用者,本设计中还特地加上了温度显示以及主菜单的设计。
总而言之,此多功能电子钟的设计完成了设计任务的基本要求和多数发挥部分的内容,还有一定的创新部分,而且在设计过程中考虑到了现实要求,设计得颇为人性化和智能化,是一个较为完美的设计。
参考文献
[1] 张毅刚,等. 单片机原理及接口技术(第2版).人民邮电出版社,2015. [2] 张毅刚. 单片机原理及接口技术(C51编程).人民邮电出版社,2015. [3] 张义和,等. 例说51单片机(C语言版)(第3版).人民邮电出版社,2013.
14
附录一
多功能电子时钟的操作方法
1)将LCD12864接入单片机,并且把相应的接口用线连接好(接线图如下所示),准备就绪后给单片机上电;
2)单片机上电后,LCD12864上会先显示“多功能电子时钟”的字样,接着会自动跳转至功能选择的主菜单;
3)闹钟设定:按下K16可开始设置闹钟,LCD上会先显示“设置闹钟开始”,然后自动跳转至闹钟设置界面,按K18可选择是设置年月日星期,还是设置时分秒,通过K19、K20来加减位,设置完成后,按下K17可进入时钟,LCD上显示“闹钟设定成功 进入时钟”,当设置的闹钟时间一到,喇叭会发出有节奏的音乐,LED灯闪烁,按下红外遥控开关可停止闹钟。
4)在没设置闹钟时,可以按K17来进行时钟时间的设定,按K15运行时钟。
15
接并行口 接地 接VCC