张治海
(山西省广播电视局228 台,山西 太原 030001)
在现代社会快节奏的生活状态下,人们对时间观念更加注重。目前,许多人都在使用电子时钟,但大多数电子时钟只显示时间,功能比较单一,无法满足广大消费者的需求,功能多样的电子万年历应运而生。
多功能电子万年历除能够清晰准确地显示信息,还应当根据需求随时对日期、时间、星期、温度、闹钟进行设置。应当具有数据直观显示、功能多样、成本低廉等特点。
按照预期想要实现的功能,硬件系统以AT89C52 芯片作为主控核心,它的大部分功能与AT89C51 相同,不同的部分是,它内部存储空间为8 KB ROM。
电源模块:使用电压值为6 V 的干电池,为了得到稳定电压,所以需要将电源系统稳压器LDO 将电源稳压成5 V的电源,这种方案设计简单,设备轻便,方便携带。
按键控制模块:采用独立按键,程序处理简单,可大大节省CPU 资源。
时钟模块:采用时钟芯片DS1302,它的性能相对较高,可自动实现年、月、日、星期、时、分、秒的计数,精度及准确度都较高。
温度采集模块:采用温度传感器DS18B20,被测的温度可以直接读出,显示直观清晰。编程简单,使用电压范围比较大,可操作性强,分辨率和精确度也都比较高[1]。
显示模块:采用LCD1602 显示,功率损耗低,价格便宜,显示内容丰富。可直接与单片机接口,硬件操作简单。
硬件设计主要在Proteus 仿真,设计采用Proteus 的ISIS,进入仿真主界面,找到要仿真的元件,将各模块的元件按电路连接后,设置参数,编写程序。
AT89C52 单片机的最小系统分为复位电路和晶振电路两部分。
1)复位电路
考虑到设计要求,复位电路集上电自动复位和手动复位于一体。
时钟电路进入工作状态,当高电平的时间大约超出2 us的时候,就需要是单片机复位,该操作是系统自动实现的[2]。手动复位则要通过一个按键就可以实现,在程序运行时,若出现问题,如程序计数器PC 没有按照预计的功能运行,即程序“跑飞”、死机或死循环等现象,手动复位就可以恢复正常了。其电路设计如图1 所示。
图1 复位电路
2)时钟振荡电路
考虑系统运行速度,可用12 MHz 的石英晶振,并使用两个小电容作为微调电容,可以大大提高电路的运行速度[3]。
DS1302 最主要的功能是实时显示时间,具有高性能、低功耗的优点。在工作时需要先进行初始化,否则不能正常运行。它是3 线的串行接口,占用的引脚相对较少,在内部集成可以编程的时钟日历,操作者可以根据自己对功能的需求,在单片机上进行设置。可以使用外部电源和备份电源双电源供电,当外部电源能源耗尽时,可以使用备份电源使时钟芯片继续运作。
当单电源与电池供电时,VCC1 提供低电源。当双电源供电时,VCC2 是主电源,VCC1 是备份电源。DS1302 在工作前必须进行初始化,要将SCLK 端置“0”,RST 端置“1”,这样SCLK 才能得到脉冲信号。控制字的位1 至位5 是操作单元的地址。DS1302 进行读写数据时,位7 必须置1。至于位6,对时间进行读写时,CK=0,对程序进行读写时RAM=1。进行读操作时,位0 置1;进行写操作时,位0 置0。
温度采集采用温度传感器DS18B20,它的测量精度较高,便于数据采集,更加符合设计要求。DS18B20 温度传感器由美国DALLAS 半导体公司生产,相比较于传统的热敏电阻等其他这类元件,它可以直接显示被测温度,还可以根据实际情况的要求,编写简单的程序来实现读数方式为9-12位的数字值[4]。温度传感器接口电路如图2 所示。
图2 温度传感器DS18B20 接口电路
通过三极管来控制蜂鸣器,三极管导通蜂鸣器响,三极管截止蜂鸣器不响,闹钟模块电路图如图3 所示。
图3 蜂鸣器电路
管脚3 用于调节LCD1602 的灰度。4、5、6 是控制管脚,控制LCD1602 写入或读出指令。7 至14 是数据口与P0 连接,将数据传送到LCD1602 中。LCD1602 与单片机的接口电路如图4 所示。
图4 LCD1602 与单片机接口电路
按键电路由四个轻触开关组成,用按键来对时间进行调整,还可以实现设置闹钟的功能。电路右端接地,另一端接单片机的端口。把按键按下时,与它对应的端口就会转变成低电平。通过检测低电平,可以找到对应按下的按键,就可以及时作出对应的操作。
整个软件系统采用C51 编程,主要实现:时间数据的采集、温度的采集、闹铃的设置、按键的识别处理、LCD 的驱动等。
编程软件采用Keil uVision4,是51 系列单片机C 语言软件开发系统。Keil C51 软件能够提供大量的库函数,把高级语言翻译成单片机能识别的语言,生成目标代码的效率较高,语句紧凑,容易理解[5]。
软件总体设计流程图如图5 所示。
当接通电源开始工作后,程序从main()函数开始运行,随后对温度模块、时间模块和显示模块进行初始化。DS18B20 必须先与单片机芯片达成通信协议,完成初始化并取得通信后,启动温度测量程序,测量过程完成后,发出温度转换指令,从而便可将温度转化成数字模式进行显示读取;同时DS1302 将读取时分秒星期以及年月日寄存器然后通过液晶显示实时时间、星期及日期;键盘电路中按键可对实时日历时钟进行调整;进行显示时要对标志位赋初值,随后进入循环中运行按键扫描程序和液晶显示程序。
图5 总设计流程图
采用时间芯片DS1302 对时间进行采集时,必须对系统初始化。设置时间后,看是否对时间进行调整,若时间需要调整,则调整时间后才能显示,读取时间;若不需要调整,则可以直接显示并读取时间。
DS18B20 单线通信的功能要求,需要分时完成,确保一定的时延控制。否则,不能进行读写控制。系统对温度采集,开始必须进行初始化,对温度进行写操作,要对温度采样,然后复位。再进行初始化,存储温度数据,对温度进行读操作就完成了。
LCD1602 在工作时,要进行初始化操作。LCD1602 有以下几个基本时序:
1)读状态:RS=L,RW=H,E=H
2)写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲
3)读数据:RS=H,RW=H,E=H
4)写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲
将要设置的闹钟时间写入存储器,当前时间与设置的时间一致时,闹铃就会响;当前时间与设置的时间不一致时,闹铃不响。
设计中识别按键采用查询法,程序简单。系统中含有命名为SET、UP、DOWN、OUT/STOP 四个调整按键。SET、OUT/STOP 两个按键是否按下在主函数里面查询,由SET 键来激活UP、DOWN 键的功能。这样设计,CPU 的工作量大大减少。OUT/STOP 是多功能键,当OUT/STOP 是响铃停止功能时,SET 键未被按下,当OUT/STOP 是退出调整模式的功能时,SET 按下。
编程器Genius G540 在联机时将Keil uVision4 编写的程序烧写到AT89C52 主控芯片中。步骤如下[6]:
1)启动Keil 编程软件,新建工程,选择与单片机型号相匹配的CPU(该设计使用的是AT89C52),再新建文件,扩展名为“.c”。
2)在建好的文件中用C 语言编写程序。
3)对编写好的C 程序进行编译,确定无误后,生成HEX文件。
4)把单片机固定在G540 编程精灵上,用数据线将编程器和计算机相连。
5)启动G540 编程软件,选择使用的CPU 型号,首先对单片机进行擦除,然后加载HEX 文件,再通过查空、编程、比较、加密等步骤,完成程序的烧写。
论文分别从硬件方面和软件方面,对基于单片机的多功能万年历设计作了详细论述。
在设计的整个过程中,硬件方面主要设计了AT89C52单片机的最小系统;设计了DS1302 接口电路实现时钟设置,设置了具体时间;设计了DS18B20 接口电路显示温度;整个设计成果在LCD 液晶显示。软件主要设计了闹铃程序、温度采集程序、以及LCD 显示程序;系统的调试主要是通过一块AT89C52 开发板,再借助于Keil4、单片机仿真软件Proteus 7 Professional 来实现。
[1]张萌.单片机应用系统开发综合实例[M].北京:清华大学出版社,2007.
[2]楼然苗.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.
[3]林志琦,郎建军.基于Proteus 的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006.
[4]马忠梅.单片机C 语言应用程序设计[M].北京:北京航天航空大学出版社,2007.
[5]肖炎根,舒望.基于实时钟芯片的电子万年历的设计[J].电子技术,2007(3) :91-94.
[6]王越明.电子万年历的设计[J].黑龙江科技信息,2004(8) :18-22.
[7]陈明荧.8051 单片机课程设计实训教程[M].北京:清华大学出版社,2003.
[8]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003.
[9]鲁刚强.基于液晶显示器的单片机系统设计[J].科技资讯,2008(35) :22-23.