摘要:以AT89S52单片机为控制核心,通过实时时钟芯片DS1307和数字温度传感器DS18B20构成了一个多功能的数字时钟系统。详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。系统采用液晶LCD1602作为显示器,具有实时时间与日历显示、环境温度显示、按键调时、闹铃定时等功能。软件程序采用均采用C语言编写,便于移植与升级。
关键词:实时时钟日历 单片机 DS1307 DS18B20 LCD1602
引言
目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。为此,笔者开发了一款多功的数字式电子钟,它可以显示年、月、日、小时、分钟等时间信息,同时可以显示环境的温度信息。还具有按键调时、设定闹铃等功能。时钟采用LCD作为显示器,界面友好,功耗低。
1 系统的硬件构成
系统以AT89S52单片机作为核心控制器件,外围主要有实时时钟芯片DS1307、温度传感器DS18B20等,均为串行通信器件,使得系统线路简单可靠性高。系统结构框图1所示。
图1 系统结构框图
1.1 单片机主控模块
系统采用AT89S52单片机作为控制核心。AT89S52单片机与MCS_51系列单片机产品兼容,采用了Flash存储器结构,可以在线下载程序,易于日后的升级。它主要负责各个模块的初始化工作;设置定时器、寄存器的初值;读取并处理时间、温度等信息;处理按键响应;控制液晶实时显示等。
硬件电路连接如图2所示。系统采用12M晶振;P0_Up为P0口上拉电阻,P0口为单片机与液晶显示器通信的数据端口;C_reset和R_reset组成系统上电复位电路;P1.0~P1.2为液晶显示器的控制信号端口;P1.3和P1.4为单片机与时钟芯片DS1307通信的端口; P1.5为闹铃的控制端口;P1.6为单片机与温度传感器DS18B20的通信端口;P2.4~P2.7为按键模块的接口。
图2 单片机主控电路
1.2 实时时钟日历模块
系统采用DS1307实时时钟芯片。它是一款 总线接口的时钟日历芯片,片内含有8个特殊功能寄存器和56bit的SRAM,是一种低功耗的实时时钟芯片。
它的主要技术性能指标:具有秒、分、时、日、星期、月、年的计数功能,并且具有12小时制和24小时制的计数模式,可自动调整每月的天数,具有闰年调整的功能,具有自动掉电保护和上电复位的功能。同时它独立于CPU工作,不受CPU主晶振及其电容的影响,而且计时准确,月累计误差小于10秒。
电路连接如图3。CRY2为32.768kHz的晶振,为时钟芯片提供计时脉冲;Vbat为DS1307的备用电源,以便在没有主电源的情况下能够保存时间信息和一些重要的数据;两个电阻为 总线的上拉电阻。
图3 实时时钟日历电路
1.3 温度传感器模块
系统采用DS18B20作为温度传感器。它是美国DSLLAS公司推出的单总线数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易匹配处理器等优点。处理器与DS18B20通信只需要一根数据线即可,同时该数据线还可以向挂接的DS18B20供电。它可以直接将温度转化成串行数字信号处理,与模拟温度传感器相比,DS18B20省去了信号调理、A/D转换等前向通道处理电路,从而使得系统线路简单,成本低廉。
它的主要技术性能指标:
(1) 电压范围:+3.0~+5.5V(可用数据线供电)
(2) 测温范围:-55℃~+125℃
(3) 通过编程可实现9~12位的数字读数方式,测温分辨率可达0.0625℃
(4) 可自设定非易失性的报警上下限值。
电路连接如图4所示。其中DQ为数据输入/输出端口,R_Up 为数据线的上拉电阻,确保数据传输的可靠性。
图4 温度传感器电路
1.4 闹铃模块
系统采用蜂鸣器作为闹铃输出。
电路连接如图5所示。电路中采用PNP管9012来控制蜂鸣器的开关,由图可以看出当Bell引脚为高电平时,PNP管截止,蜂鸣器不工作;当Bell引脚为低电平时,PNP管导通,蜂鸣器工作。其中R_Bell为限流电阻。
图5 闹铃电路
1.5 键盘模块
键盘模块设置了四个按键:Menu_A、Menu_B、Up、Reset。其中用Menu_A来控制菜单的主模式;用Menu_B来控制菜单的副模式;Up键用来修改时间信息;Reset键返回。
电路连接如图6所示。四个上拉电阻可以保证在没有按键输入时,进入单片机四个I/O口的按键状态均为高电平,防止干扰产生;当有按键按下时,相应的口线被拉低。软件上采用查询的方式,用定时器定时对按键状态进行扫描,确保系统的实时性。
图6 键盘电路
1.6 液晶显示模块
系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个字符,具有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光设置。
管脚功能简介:
VL:LCD对比度调节端,电压调节范围为0-5V。接正电源时对比度最弱,接地电源时对比度最高,可以用一个5K的电位器来调整对比度;
RS:数据或者指令选择端。处理器写入指令时,RS为低电平,写入数据时,RS为高电平
R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据
E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块
D0-D7:8位数据总线,三态双向
BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VCC
BLK: LED背光负极
电路连接如图7。
图7 液晶显示电路
2 系统的软件设计
系统的软件设计可以分为几个部分,首先是各个模块的底层驱动程序编写,而后是系统联机调试,编写上层系统程序。建议在编写和调试一个大的项目软件程序时,先编写各个子模块的驱动程序,保证每个模块都可以正常工作,做好备份工作,之后再来编写整机程序。本系统软件程序主要包括:液晶LCD1602的底层驱动模块、时钟芯片DS1307的底层驱动模块、传感器DS18B20的底层驱动模块、定时器0定时检查系统变量模块、定时器1按键扫描模块等。鉴于篇幅,这里不作一一介绍了。系统的软件流程图如图8。
图8 系统软件流程图
几点说明:
1 DS1307 是基于 总线接口的时钟芯片,软件上完全与 总线完全兼容。
2 DS18B20 是One-wire总线接口的芯片,软件上对时序的要求特别高。
3 键盘处理模块,可以设定成边沿触发或者电平触发方式。
整个系统的软件设计均采用C语言开发,因此这些器件的底层程序均可以移植到其它系统中,这就是采用C语言开发的最大的优点。
3 总结
系统经组装、调试后,可以稳定运行,目前正在笔者寝室作为时钟日历。采用串行器件具有线路简单、体积小、价格低等优点。同时该系统稍加改造,就可以作为工业实时采集中的一个模块。系统软件设计均采用C语言编写,具有模块化的思想,可以方便的移植到其它的系统中。采用AT89S52单片机,方便系统升级。