您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于单片机的时钟与温度检测报警系统
基于单片机的电子时钟与温度报警系统1基于单片机的数字电子钟与温度检测报警系统摘要:基于单片机的数字电子钟与温度检测报警系统是基于STC89C52单片机设计的,包含液晶显示模块,DS1302实时时钟模块,DS18B20温度采集模块,键盘扫描模块,报警模块。STC89C52作为控制核心,具有功耗低,功能强等特点。显示模块采用1602液晶动态显示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而且与单片机连线简单,占用IO口相对较少。实时时钟芯片DS1302是一种高性能、低功耗的实时时钟芯片,采用SPI三线接口与CPU进行同步通信。实时时钟可提供秒、分、时、日、星期、月和年。温度检测报警模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单并同时具有温度报警功能。关键词:STC89C52,DS1302,DS18B20,1602液晶显示,电子时钟,万年历,采集周围设备温度、温度报警1.设计要求与方案论证1.1设计要求1.1.1设计要求设计一个能够实现世纪,年,月,日,星期,时,分,秒显示附带温度检测显示的实时时钟电子万年历,同时具有时间调节和闹钟设置功能,以及时间预设报警、温度报警、报警解除等功能。1.1.2系统方案选择和论证STC89C52单片机作为核心控制体,该单片机属于双列直插式封装。最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便,能通过学校的最小系统板下载程序,相对比较简单。故采用此单片机作为核心控制芯片。虽然STC89C52单片机内部带有定时/计数功能,但是单片机通过对外部晶振的脉冲进行计数,他的单一的功能无法满足万年历的功能所以放弃单片机自带的定时计数功能,而采用DS1302进行时间的计数。DS1302附加31字节静态RAM,可用来做闹钟的寄存器。DS1302采用SPI三线接口与CPU进行同步通信,线路比DS12C887简单。DS18B20是数字式温度传感器,采用单总线通信协议。DS18B20内部含有EEPROM,其报警上、下限温度值和设定的分辨率倍数在芯片掉电的情况不丢失。并且内部带有AD转换电路,所以采用此芯片最为合适。1602液晶显示各种数字信息最为合适,通过对单片机的编程来控制DS1302和DS18B20芯片的读写操作来获取相应的信息,再通过对液晶的编程控制将获取到的信息通过一系列转换从而显示到1602液晶上。最后达到有电子万年历和温度采集报警等功能。系统论证时通过在单片机学习板上的试验操作,能够达到预期的效果!1.2最终方案确定核心控制体:STC89C52单片机基于单片机的电子时钟与温度报警系统2实时时钟芯片:DS1302数字式温度传感器:DS18B20总共设有五个按键,为节约资源考虑,每个按键都有多种功能。每个按键分别标号为S1,S2,S3,S4,S5。第一次按下S2,S3,S4都没有反应,首先按下S1键可选择指针位置,S2,S3键为加减键,S4键为闹钟设置键。S2同时又是闹钟报警消除键。两个报警模块,分为温度报警和闹钟报警两种。S5为复位键。具体器件清单详见附件三。2.电子时钟与温度采集报警硬件设计和实现2.1系统设计框图图1系统组成框图2.2系统硬件各模块作用2.2.1单片机核心控制模块核心控制器件选用STC89C52单片机。STC89C52单片机第9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路。18,19管脚接外部晶振和两个微调电容构成外部晶振电路。单片机,复位电路,晶振,5V电源构成单片机最小系统。图2单片机最小电路图2为单片机最小电路,其中晶振频率为常用的12MHZ。复位电路得电容用10UF,注意为电解电容。R5跟据实际情况,选用330。还有其P0内部无上拉电阻,所以在执行输出功能时,外部必须接上拉电阻(一般10K即可)。P0口接上液晶的DB0-DB7(数据总线)控制着向液晶发送8位并行数据。P1^7接上DS18B20的单数据线,发送并接受数据,地址的操作。P3^0到P3^3作为独立按键口。P2^4口为液晶的数据/命令选择端,1为数据,0为命令,P2^5口控制液晶读/写选择端,1为读命令,0为写操作,P2^6口控制液晶使能信号。P1^0和P1^1口分别控制着蜂鸣器的报主控模块时钟模块温度检测模块1602显示模块键盘扫描模块报警模块基于单片机的电子时钟与温度报警系统3警,当温度、时间到达限定值时会发出高低电平脉冲,以至发出报警声音。2.2.2实时时钟电路模块时钟模块选用DS1302芯片,DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,程序中要显示的数字要先转换成十进制。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。程序中要一一对应,否则很容易出错。通过软件编程将读到的信息显示到1602液晶中,显示世纪,年,月,日,星期,时,分,秒。通过设置按键可以进行时间调节,在调节时间时时钟暂时停止走,再通过功能键回到正常工作状态中,并且具有闹钟设定功能,但在设定闹钟时期内部时间仍然在走。当时,分,秒,相符时通过蜂鸣器进行报警,再设置按键S2关闭闹钟。实现随意控制闹钟的开启和关闭。2.2.3数字温度传感器模块数字温度传感器选用DS18B20,采用单总线通信协议。DS18B20有独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。本系统只用到单片机的一条口线,即P1.7,如下图所示。DS18B20的可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。本系统采用0.125℃。由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成,因此,对读写的操作时序要求严格。为了保证DS18B20的严格I/O时序。需要做较精确的延时。DS18B20采用+5V电源供电。这些在程序中有体现。图6DS18B20温度传感器2.2.4液晶显示模块字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行的字符型LCD1602带背光的液晶显示屏。注意到第3脚为VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,通过一个10K的电位器调整对比度。基于单片机的电子时钟与温度报警系统4图9液晶部分电路连接图2.2.5蜂鸣器电路模块(2个)图10温度报警图11闹钟报警蜂鸣器用Q2N2222三极管驱动,蜂鸣器用5V的无源蜂鸣器,并接一个发光二极管作为指示灯,同时在发光二极管前串接2K限流电阻,数据端口分别接P1^0,P1^1。设置两个报警时为了防止闹钟和温度报警发生重叠,影响判断!2.3系统电路图设计2.3.1系统原理框图和原理图图8系统原理框图3.软件测试与分析3.1系统软件流程图STC89C52单片机温度传感器进行温度采集,经过A/D转换(DS18B20内部完成此操作),送入单片机存储,通过定时器0进行定时读取。通过对实时时钟的读写操作,将读取到时间信息显示到1602液晶上,通过按键可对时间和闹钟进行调节,为方便调节考虑,在调节时间不读取温度值。调节完成后再读取温度值。蜂鸣器报警,在温度达到相应设定的温度值和闹钟时间到时,触发蜂鸣器发出响声,进行报警。再通过相应按键S2进行消除报警声。键盘扫描,按键进行时间调节,闹钟设定闹钟设定,关闭蜂鸣器报警声。液晶显示,开机时显示welcomehaveaniceday字样,过几秒钟后显示时间和温度值,基于单片机的电子时钟与温度报警系统53.1.1.DS1302程序流程图3.1.2.DS18B20程序流程图3.1.3.键盘扫描程序模块初始化DS18B20启动温度转换稍微延时,给硬件一点反应时间开始读取温度寄存器的值,并经过温度转换,返回温度值。当flag-di,keyxuan标志位允许时将数字温度数据送到1602液晶上显示。初始化,写地址、数据,读地址。读取秒闹钟,分闹钟,时闹钟寄存器到相应的存储变量中(read-alarm()函数),调用write-ds()函数将时分秒闹钟的地址和数据写入此函数中。读取年,月,日,星期,时,分,秒寄存器的相应地址当flag,flag1标志位允许时,通过调用时分秒,年月日显示函数将相应信息显示到液晶确定的位置上去。开始基于单片机的电子时钟与温度报警系统63.1.6主程序流程图进入键盘扫描S1键按下,延时去抖。此时设定flag=1,keyxuan=0时间停止走,温度将暂不进行动态显示(为液晶稳定性考虑)。S1每按下一次S1num++一次,指针落在不同位置上(利用switch(S1num),case语句来实现是需要调节时间,日期,还是星期)。最后一次按下S1num=8时,将各位数据送到液晶上显示,同时将flag=0,keyxuan=1,即正常显示时间,动态扫描温度,S1num=0.在S1键还没有退出时。S2,S3键根据功能键A选择指针位置switch(S1num),case,然后每按S2一次加一,按下S3减一,直到调节到准确时间为止(其中每按下一次按键都进行一次显示刷新)。闹钟时间已到?否则不进入YES按下S2键消除闹钟报警当调节好时间后,再按S1键,直至将S1num++到8为止,即退出了键盘扫描程序,此时将调节好的各个时间信息读取到相应的寄存器中,调用write-ds()函数,读取相应的时分秒等信息的地址和数据,最后发出清屏命令,将flag,flag1,keyxuan标志位改为有效位。从而正常显示时间信息和实现温度动态扫描。另外需要调节闹钟时就在按下S1后再按下S4闹钟键flag1=1,标志位无效(即暂不显示万年历信息)。延时去抖后调用在字符显示函数(SETALARM字样),再利用S2,S3键将时分秒加加或减减(每按下一次按键都会有刷新显示)。调用read-alarm()函数。将调节好的时间送入相应时分秒寄存器中。再次按下S4键时,将读取到的时分秒信息送到set-alarm()函数中,并发出清屏命令。标志位(flag,flag1,keyxuan)为有效。从而正常显示时间和动态显示温度值。基于单片机的电子时钟与温度报警系统74.系统测试4.1测试工具学校单片机试验机;PROTEUS仿真软件,KEIL仿真软件各个IO端口的设定,各个变量初始化液晶初始化,DS1302,DS18B20,定时器0初始化显示welcome!Heveaniceday!字样简单延时30S,然后发出清屏命令进入主循环体有键按下,调用键盘扫描程序闹钟时间已到?无键按下,全部标志位允许,调用读取DS1302时间函数DS18B20函数,并调用其1602显示各数据的函数,调用星期显示函数,其他字符函数开始设置标志位,从而调用蜂鸣器报警程序。键盘扫描定时器时间到(即flag-di=1用定时器0实现),温度标志位有效,通过定时器0实现读取温度值,再将此标志位设为无效,以便显示。将温度的各位显示到液晶上,并设定温度报警上下限高于上限或低于下限?按下S2键可以解除闹钟报警NOYES蜂鸣器发出报警声,并伴有发光二极管闪烁返回到主循环体基于单片机的电子时钟与温度报警系统84.2软件测试软件测试主要用KEIL软件。本系统功能强大,硬件电路设计简化的同时也无形加大了软件编写的复杂程度,为方便程序的调试和提高效率,故将软件编写分模块进行,先将实时时钟模块一步步调试,按照时序图将读写函数写好后,会显示秒部分,并准时走,但液晶屏不稳定,有一些乱码和光标乱闪。经检查发现有些发生地址重叠的冲突,写按键部分程序在最后刷新屏幕时调节好的时间没有读取到,还有闹钟不能实现闹钟报警功能,不断调节,不断烧写,然后看结果,最终发现是没有将调节好的时间读取到
本文标题:基于单片机的时钟与温度检测报警系统
链接地址:https://www.777doc.com/doc-7315353 .html