带实时日历时钟的温度检测系统的设计_第1页
带实时日历时钟的温度检测系统的设计_第2页
带实时日历时钟的温度检测系统的设计_第3页
带实时日历时钟的温度检测系统的设计_第4页
带实时日历时钟的温度检测系统的设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

带实时日历时钟的温度检测系统的设计福建师范大学应用科技学院 电子信息工程专业120352010024 周友杰 指导老师 欧琳【摘要】 本文对基于STC89C52单片机的带实时日历时钟的温度检测系统的设计进行了全面的阐述。该设计采用STC公司推出的低耗高性能微控制器STC89C52作为核心控制器;温度采集由ANALOG DEVICES公司的单片集成两端感温电流源AD590完成、之后经10位模数转换器TLC1549把采集的模拟信号转换为数字信号;实时日历时钟由美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片DS1302提供;为了更加方便的读取信息,显示模块采用液晶显示屏LCD1602显示;电路各模块电源主要由三端稳压集成电路L7805提供,这是为了让系统有更为稳定的工作电压。温度和时间都是与人们日常生活密切相关的,课题带实时日历时钟的温度检测系统用液晶显示器显示温度和时间,无论什么场合都能同时满足人们对温度和时间的确知。【关键词】温度检测;STC89C52单片机;AD590;DS1302;LCD1602With real-time calendar clock temperature detection system designScience and Technology Practising College Fujian Normal UniversityElectronic Information Engineering 120352010024 Zhou youjie Tutor: Ou LinAbstract In this paper, based on STC89C52 SCM with real-time calendar clock temperature detection system design are comprehensively described.Hold this design USES the STCs low consumption of high-performance microcontroller STC89C52 as the core controller;Temperature acquisition by the ANALOG DEVICES of monolithic integrated thermal current source AD590 to finish on both ends, then by 10 AD converter TLC1549 the acquisition of ANALOG signals into digital signals;Real-time clock calendar introduced by the American DALLAS company which has the function of trickling water fine current charging low-power real-time clock chip DS1302;In order to more convenient to read the temperature, time, LCD display module USES LCD1602 display;Circuit module power supply is mainly composed of three-terminal voltage regulator L7805 provide integrated circuits, it is in order to make the system more stable working voltage.Temperature and time are closely related to Peoples Daily life, subject temperature detection system with real-time calendar clock with LCD display shows the temperature and time, no matter what the occasion can satisfy people at the same time to the environment temperature and time really know.Key Words temperature detection; STC89C52 single chip microcomputer; AD590; DS1302; LCD16020目 录1概述11.1引言11.2综述11.3设计要求11.4设计方案的确定21.4.1用STC89C52单片机及其外围电路构成带实时日历时钟的温度检测系统21.4.2带实时日历时钟的温度检测系统电路框图222系统硬件设计32.1系统电路32.1.1振荡电路32.1.2复位电路32.2测温电路32.2.1温度采集42.2.2模数转换42.2.3基准电压42.3时钟电路52.4按键输入52.5温度控制52.5.1加热控制62.5.2降温控制62.6声光报警62.6.1声报警62.6.2光报警62.7显示电路62.8电源电路73系统软件设计83.1系统主程序介绍83.1.1系统主程序流程图83.1.2系统主函数83.1.3定时器中断程序流程图103.1.4定时器中断程序103.2系统各驱动程序介绍123.2.1 LCD1602液晶显示驱动程序123.2.2 DS1302时钟芯片驱动程序143.2.3 TLC1549模数转换器驱动程序、温度控制程序、主显程序213.2.4按键输入扫描程序243.2.5按键功能实现程序254总结28参考文献28附录291概述1.1引言温度和时间都是我们日常生活中备受关注的信息。至于温度,更是对工农业生产,科学试验都相对重要的一个物理量,在测温的同时也显示着实时时间就更加方便于测温系统在各个领域的应用。本课题的目的就是设计一个带实时日历时钟的温度检测系统。该系统可以测量-55125范围内的温度,用液晶显示实时温度和时间。系统还带有温度监控功能,可以预设一个温度范围,当环境温度不在该范围内时会有声光报警,并自动控制加热或降温模块对环境温度进行控制。该系统的全部功能均通过微控制器实现。随着人们生活水平的不断提高,科技不断发达,微机测量和控制技术得到了迅速的发展和广泛的应用。微控制器具有处理能力强、使用方便、功耗低等优点,应用在温度测量和监控方面,测量范围广,控制简单方便,且单片集成温度传感器温度响应速度快,工作效率高,所需外围电路简单,与单片机组成温度检测系统,具有明显的优势。该系统就是利用这样的优势研究一种小型实用的温度检测系统,系统采用低耗高性能微控制器STC89C52作为核心控制器,单片集成感温电流源AD590采集温度,实时时钟芯片DS1302提供时钟,液晶显示屏LCD1602显示信息,温度监控范围通过外设的独立按键完成设置,超限报警、温度控制分别由蜂鸣器、发光二极管和加热器、散热器实现。1.2综述国外从20世纪70年代开始就研究温度控制技术。先是采用模拟式的组合仪表,采集现场信息并进行指示、记录和控制。发展到80年代末开始采用新一代仪表控制系统,即分布式控制系统,以微处理器为基础,采用控制功能分散、显示操作集中、兼顾分而自治和综合协调的设计原则。目前正开发和研制计算机数据采集控制系统的多因子综合控制系统。国外温度检测控制系统发展迅速,并在智能化、自适应、参数自整定等方面都有优异成果。一些技术领先的国家如美国、德国、日本等,都生产出了一批性能优异的温度控制器,并实现商品化广泛应用于各行各业。这些仪器主要具有如下特点:一是适应于复杂温度控制系统的控制如大惯性、大滞后等;二是适应于受控系统数字模型难以建立且受控系统过程复杂、参数时变的温度控制系统的控制;三是温度检测控制系统普遍采用计算机技术加上模糊控制、自适应控制、自校正控制、人工智能等先进技术;四是温度控制器普遍具有参数自整定功能,即通过计算机软件技术,赋予温度控制器对控制对象、控制参数及特性进行自动整定的功能。为了保证控制效果的最优化更有一些具有自学习功能,它能够根据历史经验及控制对象的变化情况,自动调整相关控制参数。除此之外,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展1。我国对于温度检测控制技术的研究较晚,始于20世纪80年代。与美国、德国、日本等技术领先国家相比有着较大差距。我国温度检测控制设施计算机应用,也在总体上从消化吸收、简单应用阶段向实用化、综合性应用阶段过渡和发展。工程技术人员在吸收技术领先国家的温度检测控制技术的基础上,才掌握了温度室内微机控制技术,该技术仅限于对温度的单项环境因子的控制,尚无法实现真正意义上的多参数综合控制。成熟产品主要以“点位”控制及常规的PID控制器为主。它只能适应一般温度系统控制,难以控制大惯性、大滞后、受控系统数字模型难以建立且受控系统过程复杂、参数时变的温度系统控制。而适应于较高控制场合的智能化、自适应控制器,国内技术还不是十分成熟。参数自整定功能也还没有开发出性能可靠的配套软件加以实现1。1.3设计要求设计一个带实时日历时钟的温度检测系统,具体要求如下:用液晶显示器显示日历、时钟和实时的环境温度。预设温度检测范围,当环境温度不在该范围内时有声光报警。通过预设温度对环境温度进行恒温控制。调节环境温度的加热和降温可以用功率电阻和小风扇模拟。1.4设计方案的确定1.4.1用STC89C52单片机及其外围电路构成带实时日历时钟的温度检测系统STC89C52单片机是一种低耗高性能的微控制器,所以选择它作为主控芯片。由AD590单片集成温度传感器采集温度,之后经TLC1549模数转换器进行模数转换。采用DS1302时钟芯片提供实时日历时钟。按键作为输入信号,用于手动校准日历、时钟和预设温度监控范围。分别用蜂鸣器和发光二极管做为温度超限的声光报警,功率电阻和小风扇作为加热和降温器件。用LCD1602液晶显示器显示日历、时钟和温度值。系统电源有12V和5V两种电压值负责给整个系统供电,采用12V电源经降压产生5V电压,其中TLC1549模数转换器的基准电压由TL431提供。1.4.2带实时日历时钟的温度检测系统电路框图电源电路按键输入系统电路时钟电路测温电路显示电路温度控制声光报警单片机(STC89C52)302系统硬件设计2.1系统电路系统电路如图2-22是单片机的最小系统,包括振荡电路和复位电路两个模块。图2-2 系统电路2.1.1振荡电路振荡电路由晶振和两个滤波电容构成。用来配合外部晶体实现振荡的电路,目的是为单片机提供系统时钟,如果没有振荡电路来产生时钟驱动单片机,那单片机就不能工作3。单片机的机器周期有两种6MHz和12MHz,这里我们使用12MHz的晶振,两晶振引脚分别连接XTAL1和XTAL2反向振荡器输入端和输出端。2.1.2复位电路复位电路由10F的电解电容和10K电阻串联构成3。采用上电自动复位的方式给单片机复位。上电瞬间,电容视做短路,单片机第九脚为高电平,符合单片机两个机器周期高电平的复位条件,单片机复位。2.2测温电路测温电路如图2-32,包括温度测量、模数转换和基准电压三个模块。图2-3 测温电路2.2.1温度采集温度采集用AD590串联10K电阻构成。AD590是单片集成两端感温电流源如图2-4(实际器件有三个管脚,其中三脚接外壳做屏蔽,应用时可悬空),其输出电流是以绝对温度零度(-273)为基准,每增加1,会增加1A输出电流4。因此在室温25时,其输出电流Io=(273+25)=298A,所以输出电压Vo=10K298A=2.98V。图2-4 AD5902.2.2模数转换模数转换由LTC1549完成。LTC1549是10位模数器,管脚排列如图2-5。将温度测量测得的电压值送入LTC1549的模拟信号输入端(2脚),在完成上电后(8脚电源正,4脚电源地),通过控制使能端(5脚)和时钟信号端(7脚)与参考电压(1脚为正参考电压,3脚为负参考电压,应用时3脚接地)连续逐次逼近的比较来完成模数转换,之后通过数字信号输出端(6脚)输出转换结果。 图2-5 LTC1549 图2-6 TL4312.2.3基准电压基准电压用做模数转换TLC1549的参考电压,由两个电阻配合TL431、限流电阻、滤波电容构成。TL431是一种并联稳压集成电路如图2-6。通过调节电路中R6和R7的电阻值可以改变输出的基准电压值Vout从Verf到36V范围内的任意值,计算公式为。Vref是器件内基准电压,在常温25下,Vref=2.495V。2.3时钟电路时钟电路如图2-72,由时钟芯片DS1302、晶振、备用电源构成5。晶振分别连接振荡输入端和输出端(2脚和3脚),为时钟芯片提供计时脉冲。备用电源接于备用电源端(8脚)。在完成上电后(1脚电源正,4脚电源地),通过控制使能端(5脚)和时钟信号端(7脚)就可以由数据端(6脚)对时钟芯片进行读写操作。图2-7 时钟电路2.4按键输入按键输入如图2-82,由四个按钮构成。四个按钮分别取一引脚连接单片机的一个I/O口、另一引脚接地构成四个独立按键6,用于调整日历、时钟和预设温度监控范围。其中S1为选择调整项目,S2为加调整,S3为减调整,S4为显示模式选择。单片机循环扫描这四个I/O口,读到“0”即有键按下。图2-8 按键输入2.5温度控制温度控制如图2-92,包括控制加热和控制降温两个模块。图2-9 温度控制2.5.1加热控制控制加热主要由三极管、继电器,功率电阻构成。在环境温度低于预设监控范围时,控制单片机I/O口输出“0”,即三极管饱和导通驱动继电器常开端吸合,这时12V电源与功率电阻形成回路,由功率电阻产生热量进行加热。在环境温度处于预设范围内时,控制单片机I/O口输出“1”,即三极管截止,继电器常开端断开,切断加热回路停止加热。因为继电器内部具有线圈的结构,所以在断电时会产生电压很大的反向电动势,为了保护继电器的驱动管不被反向电动势击穿电路中加了二极管(D2)。2.5.2降温控制控制降温主要由三极管、小风扇构成。在环境温度高于预设监控范围时,控制单片机I/O口输出“1”,即三极管饱和导通驱动小风扇启动,进行降温。在环境温度处于预设范围内时,控制单片机I/O口输出“0”,即三极管截止,小风扇停止降温。2.6声光报警声光报警如图2-102,包括声报警和光报警两个模块。图2-10 声光报警2.6.1声报警声报警主要由三极管和蜂鸣器构成。正常工作状态下,蜂鸣器不响。当环境温度不在预设监控范围内时,控制三极管驱动蜂鸣器,让蜂鸣器发出声音警报。2.6.2光报警光报警由发光二极管和电阻构成。正常工作状态下,发光二极管常亮。在测量得到的环境温度不在预设监控范围时,控制发光二极管闪烁发出警报。2.7显示电路显示电路如图2-112,由LCD1602液晶显示器和一个10K电位器构成。LCD1602液晶显示器为两行显示,每行显示16个字符6。采用标准的14脚(无背光)或16脚(带背光)接口,在此选用16脚带背光的液晶屏。其中1脚和2脚分别为电源地和电源正;15脚和16脚分别为背光正和背光负;7脚14脚为数据口;4脚为寄存器选择端;5脚为读写选择端;6脚为使能端;3脚为显示对比度调整端,所以连接一个10K电位器用以调整对比度。在对比度调整正常时,通过控制使能端、寄存器选择端和读写选择端就可以完成对LCD1602的读写操作,然后在液晶屏上显示。图2-11 显示电路2.8电源电路电源电路如图2-122,主要由12V电源适配器和L7805三端稳压集成电路构成。L7805三端稳压集成电路共三个管脚,分别是电压输入端(Vin)、电压输出端(Vout)和接地端(GND),在电压输入端输入735V电压时,其电压输出端均输出5V电压。电路中P1为12V电源输入;SK1为电源开关;二极管D1在电源反接时起保护作用;LED2为电源指示灯;R11为指示灯限流电阻;电容为滤波作用。图2-12 电源电路3系统软件设计3.1系统主程序介绍系统主程序包括LCD1602液晶显示驱动程序、DS1302时钟芯片驱动程序、LTC1549模数转换器驱动程序、温度控制程序、主显程序、按键输入扫描程序、按键功能实现程序、定时器中断程序。该系统程序使用C语言编写,因为C语言有使用灵活、目标程序效率高、可移植性强等优点。3.1.1 系统主程序流程图7如图3-1开始中断初始化LCD1602初始化写1302初始时间温度采集温度控制扫描按键是否按下YN处理键值显示结束图3-1 系统主程序流程图3.1.2 系统主函数/*/ 项目 :AD590测温系统/ / 功能 :完成日历、时钟、温度的显示以及温度的报警和控制/ 说明 :通过AD590采集温度/ / 创建人 :周友杰/ 创建日期 :2014年2月23日/*/#include config.h/ 本工程调用的常用定义/*/ 函数 :Delay(uint32 z) / / 参数 : 数据/ 返回 : NONE/ 说明 :延时函数/*/void Delay(uint32 z)while(-z);/*/ 函数 :main( ) / / 参数 : NONE/ 返回 : NONE/ 说明 :主函数/*/void main( )init( );/ 系统初始化lcd_init( );/ lcd1602初始化/Set_Rtc( );/ 设置初始时间while(1)AD_Voltage( );Adjust_timer( );3.1.3 定时器中断程序流程图7如图3-2开始写初值(1000us)timer+(毫秒)判断No标志位是否为1YNum+N判断是否计时0.5sY读1302时间N进制转换判断是否计时0.5sYa=!aN判断是否计时0.7sYNot=!NotNTimer=0判断Num标志位是否为5sYNo=0NNum=1结束图3-2 定时器中断程序流程图3.1.4 定时器中断程序#include config.h/ 本工程调用的常用定义bit Not,No=0,a;uint16 timer=990,Num=1;uint8 TpteMin=58;/*/ 函数 :init( ) / / 参数 : NONE/ 返回 : NONE/ 说明 :中断初始化 /*/void init( ) TL0=(65536-1000); TH0=(65536-1000)8; TMOD=0x01;/ 选择中断方式1 ET0=1;/ 启动定时器 TR0=1;/ 启动计数器计数 EA=1;/ 开启总中断/*/ 函数 :init0( ) / / 参数 : NONE/ 返回 : NONE/ 说明 :定时器计时/*/void init0( ) interrupt 1 TL0=(65536-1000);TH0=(65536-1000)8;/定时器初值1000us=1ms timer+;/毫秒计数 if(No) Num+;/判断No标志位,Num为显示模式2的显示时间 if(timer%500=0)/判断毫秒计数是否到500ms=0.5s Read_Rtc( );/ 读取RTC时间 Time_pros( );/ 数据转换处理,将16进制的数码转换成10进制 if(timer%500=0) a=!a;/进入调整时光标闪烁时间 if(timer%700=0) Not=!Not;timer=0;/光报警时灭灯的时间长度 if(Num%5000=0) No =0;Num=1;/未进入调整状态时自动跳出显示模式2返回显示模式13.2系统各驱动程序介绍3.2.1 LCD1602液晶显示驱动程序#include config.hsbit RS=P13;sbit RW=P14;sbit EN=P15;#define Del() Delay(20)#define busy (17)/*/ 函数 :WrOp(uint8 dat) / / 参数 : uint8 dat/ 返回 : NONE/ 说明 :写指令函数 /*/void WrOp(uint8 dat)RS=0;/全部清零RW=0;P0=dat;EN=1;Del();EN=0;/*/ 函数 :WrDat(uint8 dat) / / 参数 : uint8 dat/ 返回 : NONE/ 说明 :写数据函数 /*/void WrDat(uint8 dat)RS=1;/全部清零RW=0;P0=dat;EN=1;Del();EN=0;/*/ 函数 :lcd_init(void) / / 参数 : NONE/ 返回 : NONE/ 说明 :lcd初始化函数 /*/void lcd_init(void)WrOp(0x38);WrOp(0x06);/光标加1WrOp(0x0c);/开显示Delay(100);/*/ 函数 :lcd_clr(void) / / 参数 : NONE/ 返回 : NONE/ 说明 :lcd清空函数 /*/void lcd_clr(void)WrOp(0x01);Delay(300);/*/ 函数 :DisText(uint8 addr,char *p) / / 参数 : uint8 addr,char *p/ 返回 : NONE/ 说明 :显示文本函数 /*/void DisText(uint8 addr,char *p)WrOp(addr);while(*p!=0)WrDat(*(p+);3.2.2 DS1302时钟芯片驱动程序#include config.h/.DS1302的引脚定义.sbit RST=P12; / DS1302复位sbit CLK=P10; / 时钟sbit SDA=P11;/ 数据idata uint8 Time_data7=13,01,04,25,13,8,25;/ 本数组用于存放时间,此处可设置开机时间(年 周 月 日 时 分 秒)code uint8 Write_add7 =0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/ 写数据的地址,分别对应年、周、月、日、时、分、秒code uint8 Read_add7 =0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;/ 读数据的地址,分别对应年、周、月、日、时、分、秒uint8 Year,Week,Mon,Day,Hour,Min,Sec;/ 全局变量(年 周 月 日 时 分 秒)/*/ 函数 :Write_1302_byte(uint8 dat) / / 参数 : 写入数据/ 返回 : NONE/ 说明 :向1302写一个字节 /*/void Write_1302_byte(uint8 dat) uint8 i; for(i=0;i=1;/ 右移一位 CLK=1; /*/ 函数 :Write_1302(uint8 add,uint8 dat) / / 参数 : 写入地址写入数据/ 返回 : NONE/ 说明 :向1302写数据 /*/void Write_1302(uint8 add,uint8 dat) /.启动. RST=0; /_nop_(); CLK=0; /_nop_(); RST=1; /_nop_(); /.开始发送数据. Write_1302_byte(add);/ 发送地址 Write_1302_byte(dat);/ 发送数据 /.数据发送结束. RST=0; /_nop_(); SDA=1; CLK=1;/*/ 函数 :DS1302_SetProtect(bit flag) / / 参数 : flag为1写保护 为0去保护/ 返回 : NONE/ 说明 :1302写保护函数/*/void DS1302_SetProtect(bit flag) if(flag) Write_1302(0x8e,0x80); else Write_1302(0x8e,0x00);/*/ 函数 :Read_1302_byte(uint8 add) / / 参数 : 读取时间向量地址/ 返回 : NONE/ 说明 :向1302读取一个字节/*/uint8 Read_1302_byte(uint8 add) uint8 i,value; RST=0; /_nop_(); CLK=0; /_nop_(); RST=1; /_nop_(); Write_1302_byte(add); for(i=0;i1; if(SDA) value|=0x80; _nop_(); CLK=1; /.以下为DS1302复位的稳定时间. RST=0; _nop_();_nop_(); RST=0; CLK=0; _nop_();_nop_();_nop_();_nop_(); CLK=1; _nop_();_nop_(); SDA=0; _nop_();_nop_(); SDA=1; _nop_();_nop_(); return value;/*/ 函数 :Set_Rtc(void) / / 参数 : NONE/ 返回 : NONE/ 说明 :设置RTC时钟/*/void Set_Rtc(void) uint8 i,j; for(i=0;i7;i+) /BCD处理,将十六进制转换成十进制 j=Time_datai/10; Time_datai=Time_datai%10; Time_datai=Time_datai+j*16; DS1302_SetProtect(0);/ 去除写保护 for(i=0;i7;i+) Write_1302(Write_addi,Time_datai); DS1302_SetProtect(1); / 加写保护/*/ 函数 :Read_Rtc(void) / / 参数 : NONE/ 返回 : NONE/ 说明 :读取RTC时间函数/*/void Read_Rtc(void) uint8 i; for(i=0;i7;i+) Time_datai=Read_1302_byte(Read_addi);/*/ 函数 :Time_pros(void) / / 参数 : NONE/ 返回 : NONE/ 说明 :数据转换处理,将16进制的数码转换成10进制/*/void Time_pros(void) Year =Time_data0/16*10+Time_data0%16; Week =Time_data1/16*10+Time_data1%16; Mon =Time_data2/16*10+Time_data2%16; Day =Time_data3/16*10+Time_data3%16; Hour =Time_data4/16*10+Time_data4%16; Min =Time_data5/16*10+Time_data5%16; Sec =Time_data6/16*10+Time_data6%16; /*/ 函数 :change(uint8 x) / / 参数 : NONE/ 返回 : NONE/ 说明 :数据转换处理,将十进制转换成十六进制/*/uint8 change(uint8 x) uint8 temp,y; y=x; temp=y/16; y=y%16; y=y+temp*10; return y;/*/ 函数 :Set_Time(uint8 pos,uint8 add_sub) / / 参数 : pos-要调整的时间在Time_data数组里对于的位置/ 返回 : NONE/ 说明 :时间调整函数/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论