基于51单片机的电子万年历毕业论文设计 下载本文

开始复位关闭变量初始化关闭DS1302写保护写入DS1302地址复位关闭延时DS1302地址写入读地址的数据读出延时地址增加向该地址写入数据地址增加数据读完否?NYN数据写完否?Y显示数据

图4-7 DS1302读写程序模块流程图

4.3 温度的读取

DS1802是这样测温的:用一个高温度数的振荡器确定一个门周期,内部计数器在这个周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。 DS18B20的复位脉冲 主机通过拉低单总线至少480us以产生复位脉冲 然后主机释放单总线并进入接收模式 此时单总线电平被拉高

DS18B20检测到上升沿后 延时15~60us,拉低总线60~240us产生应答脉冲

5

下面是温度读取的子程序: void Init_DS18B20(void) {

unsigned char x=0;

DQ = 1; //DQ复位 delay_18B20(8); //稍做延时

DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);

4.4 键盘模块

键盘模块的软件程序相对于温度模块和时钟模块比较简单。键盘模块的设计,关键是

消陡。通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。按键的消抖,可用硬件或软件两种方法。因为硬件消抖需要添加额外的硬件,故这里我们采用软件消抖。

软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖

动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

4.5 蜂鸣器模块

蜂鸣器模块的设计,主要是让单片机产生一定频率的电流信号,在我们的设计中,使

用单片机通过程序输出方波信号,来产生蜂鸣器需要的信号,当闹钟定时结束时,就可以调用蜂鸣器程序,让蜂鸣器发出声音。当然,我们的万年历再开机时会提醒用户是否开启按键时,蜂鸣器是否声音提醒,实现的方法是:我们在蜂鸣器中设置了flag标志位,当开机时,用户的选择会赋给flag标志位,从而由单片机判断是否让蜂鸣器工作,为了记

6

录用户的选择,我们将flag标志位放在了DS1302的空闲寄存器中,以保证用户的选择不会因为系统的掉电而消失,当系统重新上电时,系统还可以恢复用户的选择。

7

结束语

在硬件电路焊接和软件程序设计分别完成的基础之上,进行软硬件的结合与调试。通过下载将在电脑上已完成的程序下载到单片机芯片中。在调试中发现软件中存在的问题,及时解决问题,确保系统能正常工作并达到设计要求。通过反复的调试与实验,可以证明该系统能够较好地完成设计所需的基本要求。即能够正确的显示万年历。

在完成软件系统时,刚开始我是用的是12M的晶振,所有器件正常,后来我换了11.0592M的晶振,结果温度就不正常了,经过认真排查才发现是由于DS18B20在数据读取时,对时间要求很精确,由于晶振的不同造成了读数据的错误,经过这次调试,让我更清晰的认识到了时序对元器件的重要性。在设计中,因为考虑到闹钟定时功能,我们希望我们设置的闹钟时刻不会因为系统的掉电而丢失,考虑到DS1302是有锂电池作为电源的,不会因为主系统掉电丢失内部数据,所以我们将闹钟的定时时刻放到了DS1302内的空余寄存器里面,像这些灵活的技巧就需要我们认真的阅读元件的数据手册,从中索取对自己有用的信息。

经过万年历的设计,让我学到了很多,让我认识到了学习基础知识的重要性,当设计完整的系统时,要考虑到硬件和软件两者的结合,有时硬件的不足,我们可以用软件程序来弥补,从而节约硬件成本,在设计软件程序时要模块化,可以提高程序的可读性。

1