温湿度报警器_第1页
温湿度报警器_第2页
温湿度报警器_第3页
温湿度报警器_第4页
温湿度报警器_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第一部分单片机目 录1.引言11.1课题研究背景和意义21.2课题研究内容42.系统方案设计72.1总体方案设计82.2系统方案选择与论证8 2.2.1单片机芯片的选择8 2.2.2显示模块选择方案和论证8 2.2.3温度传感器模块选择与论证8 2.2.3湿度传感器模块选择与论证83.硬件电路设计83.1 ST89C52单片机设计83.2 数字温度传感器DS18B2083.3 矩阵键盘接口设计83.4 12864液晶显示电路设计83.5 电动机的设计94.软件程序设计44.1软件设计总体思路及主程序设计流程图74.2软件程序详解65.作品调试8结语104参考文献106致谢1111. 引言1.1课题研究背景和意义在现代工业现场,随着科技的进步和自动化水平的提高,电缆的用量越来越大,电缆的安全保护已成为不可忽视的问题。从国内外有关电缆火灾的统计资料看,许多电缆火灾是由电缆头击穿绝缘引起的。因此为电缆配置在线温度监测系统,对于电缆接头多,电缆密集的场所,就显得尤为重要。粮食是人类生存的必需品,温度与湿度是保存好粮食的先决条件,我国的公粮现均集中存放在国家或地方的仓库中,最大粮库方圆几公里,仓库库房数为数十个,测点可达数千个。按照国家粮食保护法则,必须定期抽样检查各点的粮食温度与湿度,以确保粮食的存储质量。档案馆中的档案资料同样会受到外界空气温湿度变化的影响,纸张纤维热胀冷缩,使强度降低,湿度过大会使霉菌和害虫滋长,以致造成资料质变。由此可见,温度、湿度监测在人们现实生活生产中应用已日渐广泛,在发电厂、纺织、食品、医药、仓库、农业大棚等众多的应用场所,对温度、湿度参量的要求都非常严格,因此能否有效对这些领域的温、湿度数据进行实时监测和控制是一个必须解决的重要前提。1.2课题研究内容本设计研究的主要内容如下:(1) 在广泛查阅温度检测控制理论和方法、测温技术和温度控制技术等资料的基础上,根据不同的控制要求及应用领域完成对系统方案的总体设计。(2)研究比较各相关元器件的功能与特点,选择合适的元器件。(3)系统硬件设计。系统硬件设计主要包括:温度检测、湿度检测、单片机数据采集处理、12864液晶显示、键盘设定、电动机电路等部分。(4)系统软件设计。本课题采用C语言,利用Keil编译器进行编程及调试。主要研究DS18B20和DHT11与单片机的通信协议、时序及一些C51通用程序等。本设计的难点分为硬件和软件两个方面。其中硬件开发的难点在于各种元器件的选择和使用,如各种电阻、电容等的选择。软件开发的难点在于DS18B20、DHT11和液晶12864的时序,如果时序不正确,将无法读出正确的温度值和显示的温度值,对系统产生很大的影响。2. 系统方案设计2.1系统总体方案设计(1)实现对室内温湿度参数的实时采集,并进行定时刷新。(2)根据测量空间和设备的实际需要,由温度、湿度传感器进行关键温、湿度敏感点进行测量,由单片机对数据进行循环检测、数据处理、存储。实现温湿度的智能测量。(3)根据处理的数据利用电机实现对温湿度的有效控制。2.2系统方案选择与论证 2.2.1单片机芯片的选择本设计采用AT89C52芯片作为硬件核心,该芯片内有4K字节的在线编程Flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用1。2.2.2显示模块选择方案和论证方案一:LED数码管显示由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往会有很多障碍,所以不采用LED数码管作为显示。方案二:LCD12864液晶显示此液晶具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势和可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。所以最终选择LCD12864。2.2.3温度传感器模块选择与论证方案一采用模拟温度传感器AD590,转换结果需要经过运算放大器和AD转换器传送给处理器。它控制虽然简单,成本低,但是后续电路复杂,且需要进行温度标定,集成温度传感器AD590输出为电流信号,且输出信号较弱,所以需要后续放大及A/D转换电路,如采用普通运放则精度难以保证,而测量放大器价格较高,这样会使成本升高。方案二采用了数字温度传感器DS18B20,它能在现场采集温度数据,直接将温度物理量变换为数字信号并以总线方式传送到单片机进行数据处理,并且可根据实际要求通过简单的编程实现9-12位的数字式读数方式,因此,该方案完全具有可行性,同时体现了技术的先进性,经济上也有很大的优势。2.2.3湿度传感器模块选择与论证方案一采用HS1100/HS1101湿度传感器。HS1100/HS1101电容传感器,在电路构成中等效于一个电容器件,其电容量随着所测空气湿度的增大而增大。不需校准的完全互换性,高可靠性和长期稳定性,快速响应时间,专利设计的固态聚合物结构,由顶端接触(HS1100)和侧面接触(HS1101)两种封装产品,适用于线性电压输出和频率输出两种电路,适宜于制造流水线上的自动插件和自动装配过程等。相对湿度在1%100%RH范围内;电容量由16pF变到200pF,其误差不大于2%RH;响应时间小于5s;温度系数为0.04pF/。方案二温湿度传感器DHT90将两者的功能集成在一起,并且输出的是数字信号,不需要再进行A/D转换,其温度测量的范围为-40123.8,分辨率为0.01;测湿范围为0100%RH,分辨率为0.03%RH。综合设计的技术要求和传感器的特性,考虑到设计简约化,选择使用传感器DHT90,输出的是数字信号,不需要进行A/D转换,简化了系统设计。综上所述,本课题采用AT89C52芯片,DS18B20温度传感器,DHT11温湿度传感器,LCD12864液晶显示对系统进行设计。3硬件电路设计3.1 ST89C52单片机介绍3.2.1 STC89C52单片机51系列单片机的引脚配置如图1所示。主要包括P0、P1、P2、P3口以及读写功能输出,时钟输入端等。 (1)AT89C51的特点1.AT89C51具有以下几个特点:2.AT89C51与MCS-51系列的单片机在指令系统和引脚上完全兼容;l3.片内有4k字节在线可重复编程快擦写程序存储器;l4.全静态工作,工作范围:0Hz24MHz;l5.三级程序存储器加密;l6.1288位内部RAM;l7.32位双向输入输出线;ll(2)AT89C52:的功能描述 AT89C52是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于4K,四个I/O口全部提供给用户。图2: STC89C52单片机引脚图 (3)最小系统设计最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。电源、时钟等电路是使单片机能运行的必备条件,可以将最小系统作为应用系统的核心部分,通过对其进行存储器扩展、A/D扩展等,使单片机完成较复杂的功能。时钟电路复位电路51系列单片机I/O接口图3: 单片机最小系统原理框图(4) 时钟电路STC89C52单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图4所示。在STC89C52单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图4: STC89C52内部时钟电路(5)复位电路当在STC89C52单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。复位电路通常采用上电自动复位和按钮复位两种方式。最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充放电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST(9)端与电源Vcc接通而实现的。按键手动复位电路见图4。时钟频率用11.0592MHZ时C取10uF,R取10k。图5: STC89C52 复位电路3.2 数字温度传感器DS18B20介绍DS18B20温度传感器的实物如图6所示:图6:温度传感器的封装图1、DS18B20的主要特性 1.1、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电 1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 1.5、温范围55+125,在-10+85时精度为0.5 1.6、可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 1.7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 1.8、测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。 2、DS18B20的外形和内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 DS18B20的外形及管脚排列如下图7: DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图7: DS18B20内部结构图 DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理如图8所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图8中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图8:DS18B20测温原理框图 DS18B20有4个主要的数据部件: (1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位 (28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 (2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以 0.0625/LSB形式表达,其中S为符号位。 图9: DS18B20温度值格式表 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。3.3 矩阵键盘接口设计在单片机应用系统中,键盘是人机对话不可缺少的组件之一。在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。如下图所示,我们把按键接成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。矩阵键盘仿真图如图10所示。图10:矩阵键盘仿真图我们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是 否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出 0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的 键码。就可以知道是哪个键按下了。3.4 12864液晶显示电路设计一、 概述 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。二、 基本特性:(1)低电源电压(VDD:+3.0-+5.5V);(2)显示分辨率:12864点; (3)内置汉字字库,提供8192个1616点阵汉字(简繁体可选);(4)内置 128个168点阵字;(5)2MHZ时钟频率;(6) 显示方式:STN、半透、正显; (7) 驱动方式:1/32DUTY,1/5BIAS;(8) 视角方向:6点(9) 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10;(10) 通讯方式:串行、并口可选; 三 、应用举例:1、使用前的准备:先给模块加上工作电压,再按照下图的连接方法调节LCD的对比度,使其显示出黑色的底影。此过程亦可以初步检测LCD有无缺段现象。2、字符显示:带中文字库的128X64-0402B每屏可显示4行8列共32个1616点阵的汉字,每个显示RAM可显示1个中文字符或2个168点阵全高ASCII码字符。带中文字库的128X64-0402B内部提供1282字节的字符显示RAM缓冲区(DDRAM)。三种不同字符/字型的选择编码范围为:00000006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H7FH显示半宽ASCII码字符,A1A0HF7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系。其对应关系如下表一所示:80H81H82H83H84H85H86H87H90H91H92H93H94H95H96H97H88H89H8AH8BH8CH8DH8EH8FH98H99H9AH9BH9CH9DH9EH9FHLCD12964地址表3.5 电机的设计本次设计中采用的电机模块式利用L9110驱动的,设计中将电机看作控制温湿度的媒介,只要电机转动就可以控制温湿度下降,直至达到设定值之下。下图是电机模块图11。图11:单片机与直流电机接口接线图图12:电机与舵机实物模块图3.6 温湿度传感器DHT11电路的设计一、DHT11产品概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在 OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。 图12:DHT11温湿度传感器实物图二、接口说明建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。三、电源引脚DHT11的供电电压为 35.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。 四、串行接口DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下: 一次完整的数据传输为40bit,高位先出。 数据格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据+8bit校验和 数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。4.软件程序设计4.1软件设计总体思路及主程序设计流程图开始系统初始化设定报警范围读取温湿度参数键盘扫描处理温湿度数据采集显示实际温湿度温湿度是否超出设定值电机转动是发送温湿度数据否4.2软件程序详解#include #include #define uchar unsigned char#define uint unsigned intsbit beet=P10;sbit dula=P36; /位选sbit wela=P37; /段选sbit led =P35; /ledsbit CS =P00; /lcd 12864 片选sbit PSB=P01; / 串行sbit CLK=P02; / 时钟信号sbit SID=P03; / 输入sbit DQ=P13; /18b20 输入输出端口sbit PWMA=P10;sbit PWMB=P11; sbit LED1=P14; sbit dht11=P14;/* 功能:定义数据初始值 */int hour=8,minute=59,second=50,count=0,num,num10=0,num9,sum,sum1,sum2,sum3;uint years=2013;int month=2,day=22;uint temp;uchar a10=0,1,2,3,4,5,6,7,8,9;uchar code tab5=.;uchar tempL=0,tempH=0,flag=0,k=0,succeed_flag=1,flag1=0;uint temperature,temp;uint temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9;uchar num2,num3,num4,num5,num15,num16,num17;#define SIZE 5 uchar value_arraySIZE;uint temp_value, humi_value;#define OK 1 #define ERROR 0 #define NUMBER 20 /防止在与硬件通信时发生死循环设置的计数范围static uchar status; uchar ge, bai, shi; void delay_ms(unsigned int ms)/延迟毫秒uint i,j;for(i=0;ims;i+)for(j=0;j110;j+);void Delay_10us(void) /延时10us unsigned char i; i-; i-; i-; i-; i-; i-; void delay_us(uint x) /延迟微秒 uint i=0; while(i480us) DQ=1; /拉高数据线 delay_us(14); /等待(1560us) uchar ReadOneChar() /向DS18B20读一字节数据unsigned char i=0; unsigned char dat=0; for(i=0;i=1;DQ=1;if(DQ) dat|=0x80;delay_us(4); return(dat);void WriteOneChar(unsigned char dat) / 向DS18B20写一字节数据 unsigned char i=0; for(i=8;i0;i-) DQ=0; DQ=dat&0x01;delay_us(5);DQ=1;dat=1;delay_us(4);void ReadTemperature()/向DS18B20读温度值 Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0x44); /启动温度转换delay_us(125); /转换需要一点时间,延时Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度的高位MSB temperature=(tempH*256)+tempL)*10*0.0625; /温度转换,把高低位做相应的运算转化为实际温度temp1=temperature/100;temp2=temperature%100/10;temp3=temperature%10; delay_us(200); /温湿度传感器static uchar ReadValue(void) /读一个字节的数据 uchar count, value = 0, i; status = OK; /设置标志位为正常状态for(i = 8; i 0; i-) value = 1; /高位在先,将得到的数据依次左移,最后得到1字节的数据count = 0; /每一位数据前都有50us的低电平等待时间.等待50us时间结束 while(dht11 = 0 & count+ = NUMBER) status = ERROR;/设定错误标志 return 0;/函数执行过程发生错误就退出函数 /26-28us的高电平表示该位为0, 70us的高电平表示该位为1Delay_10us(); Delay_10us(); Delay_10us(); /延时30us后检测数据线是否为高电平if(dht11 != 0) /进入这里表明该位为1value+;while(dht11 != 0 & count+ = NUMBER) status = ERROR;/设定错误标志return 0; return (value); uchar ReadTempAndHumi(void)/读一次数据,共5个字节 uchar i = 0, check_value = 0,count = 0; EA = 0; dht11 = 0; /先拉低数据线至少18ms,发送开始信号 delay_ms(20); /延时大于18msdht11 = 1; /释放数据线,用于检测低电平响应信号Delay_10us();/等待20-40us,检测响应信号,响应信号为从机拉低数据线80us Delay_10us(); Delay_10us(); Delay_10us(); if(dht11 != 0) /检测响应信号是否存在,响应信号为低电平 /响应信号不存在 EA = 1; return ERROR; else /有响应信号while(dht11 = 0 & count+ = NUMBER) /检测计数器是否超出了设定范围dht11 = 1; EA = 1; return ERROR;/读数据出错,退出函数 count = 0;dht11 = 1;/释放数据线while(dht11 != 0 & count+ = NUMBER) dht11 = 1; EA = 1; return ERROR;/计数器超出检测范围,退出函数 for(i = 0; i SIZE; i+)/读出温湿度值 value_arrayi = ReadValue();/调用ReadValue()读数据 if(status = ERROR)/若读数据出错,则退出函数dht11 = 1; EA = 1; return ERROR; if(i != SIZE -1)/若读到的数据是校验值,则不需要加上去 check_value += value_arrayi;/若读到的数据中前4字节数据的和等于第5字节字节,则表示成功 /end forif(check_value = value_arraySIZE - 1) /检验读到的数据是否正确 /将温湿度值扩大十倍,以方便读出其中的每一位humi_value = (value_array0+value_array1) * 10; /前2bit数据为湿度值temp_value = (value_array2+value_array3) * 10;/后2bit为温度值 dht11 = 1; EA = 1; return OK;/正确地读出dht11输出的数据 else /校验数据出错EA = 1; return ERROR; / DS12864 液晶void write_com(uchar command) /lcd 写指令uchar i,a,a_cmd;a_cmd=0xf8;CS=1;CLK=0;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_cmd=1;a_cmd=command&0xf0;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_cmd=1;a_cmd=command;a_cmd=4;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_cmd=1;CS=0;delay_ms(1);void write_date(uchar date)/lcd 写数据uchar i,a,a_date;a_date=0xfa;CS=1;CLK=0;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_date=1;a_date=date&0xf0;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_date=1;a_date=date;a_date=4;for(i=0;i=7;SID=a;CLK=0;CLK=1;a_date=1;CS=0;delay_ms(1);void lcd_pos(uchar x,uchar y)/位置函数uchar pos,row;switch(x)case 0:row=0x80;break;case 1:row=0x90;break;case 2:row=0x88;break;case 3:row=0x98;break;pos=row+y;write_com(pos);void display_wendu() lcd_pos(1,3); write_date(temp1+0x30); /显示实际温度 write_date(temp2+0x30); write_date(tab50); write_date(temp3+0x30);void display_wendu1() lcd_pos(1,3); write_date(temp4+0x30); /显示设定温度 write_date(temp5+0x30); write_date(tab50); write_date(temp6+0x30);void display_jiemian() uchar i=0;uchar code tab2=温度:;uchar code tab3=;uchar code tab4=湿度:;uchar code tab5=%;lcd_pos(1,0); /显示“温度 ”i=0; while(tab2i!=0) write_date(tab2i);i+; lcd_pos(1,5); i=0; while(tab3i!=0) /显示“ C “ write_date(tab3i);i+; lcd_pos(0,0); /显示“湿度 ”i=0; while(tab4i!=0) write_date(tab4i);i+; lcd_pos(0,5); i=0; while(tab5i!=0) /显示“ % “ write_date(tab5i);i+; /LCD显示函数void SMG_Display(uint value) lcd_pos(0,3);ge = value%10; /必须加上0x30,否则显示乱码shi = value%100/10; bai = value/100; write_date(bai+0x30);write_date(shi+0x30);write_date(.);write_date(ge+0x30); void shidu2() lcd_pos(0,3); write_date(temp7+0x30); /显示设定温度 write_date(temp8+0x30); write_date(tab50); write_date(temp9+0x30);void display2()/显示时间uint shi1,shi2,fen1,fen2,miao1,miao2,years1,years2,years3,years4,month1,month2,day1,day2; shi1=hour/10;shi2=hour%10;fen1=minute/10; fen2=minute%10; miao1=second/10;miao2=second%10;years1=years/1000; years2=years%1000/100;years3=years%1000%100/10; years4=years%10; month1=month/10;month2=month%10;day1=day/10;day2=day%10;lcd_pos(3,2);write_date(shi1+0x30);write_date(shi2+0x30);lcd_pos(3,4);write_date(fen1+0x30);write_date(fen2+0x30);lcd_pos(3,6);write_date(miao1+0x30);write_date(miao2+0x30);lcd_pos(2,0);write_date(years1+0x30);write_date(years2+0x30);write_date(years3+0x30); write_date(years4+0x30);lcd_pos(2,3);write_date(month1+0x30);write_date(month2+0x30);lcd_pos(2,5);write_date(day1+0x30); write_date(day2+0x30);void init_time() /初始化定时器TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;TR0=1;void init_12864()/初始化lcd PSB=0; /串行 write_com(0x01); /清屏 delay_ms(1); write_com(0x30); / 功能设定 delay_ms(1); write_com(0x02); /地址归位 delay_ms(1); write_com(0x06); /进入点设定 设定游标移动方向和指定显示的移位 delay_ms(1); write_com(0x0c); /游标或

温馨提示

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

评论

0/150

提交评论