基于温湿度监控系统毕业设计

更新时间:2024-04-03 01:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

摘 要

温湿度监控是人们对居室要求的重要指标之一,也是影响人体健康的重要因素之一。为了保证对温湿度良好的监测和控制,本文采用数字式温湿度传感器SHTll来设计居室温湿度监测系统,以达到简化软硬件系统设计,提高测量精度的目的。首先介绍了SHTll的结构特点、接口电路,以及温湿度测量系统的软硬件设计方案,最后基于AT89C51单片机和光电耦合器设计了电路简洁、大大节省I/O口资源的居室温湿度监控系统,保证了由AT89C51单片机输出的弱电来控制外围的强电电路,本设计不仅仅只是在原理上可行,而且在实际运用中也了能实现对人们居室温湿度的精确测量与控制,该电路简单且工作稳定,集成度高,操作方便、灵活,对满足人们居室环境的要求具有一定的实用价值和意义。

关键字:AT89C51单片机,SHT11,LM016L,光电耦合器

I

ABSTRACT

The temperature and humidity control to the requirements of the bedroom is people important indexes, and also one of the important factors affect human health of one. In order to guarantee to the temperature and humidity good monitoring and control, this paper using digital temperature and humidity sensors to design SHTll bedroom temperature and humidity monitoring system, in order to achieve the simplified the hardware and software system design, improve the accuracy of measurement purposes. First introduced the structure characteristics of the SHTll, interface circuit, and the temperature and humidity measurement system hardware and software design scheme, then based on AT89C51 single-chip microcomputer and photoelectric coupling control circuit design the simple circuit, save the I/O mouth of temperature and humidity control system resources bedroom, ensure the electricity output by AT89C51 single-chip microcomputer to control in the outer reaches of the high voltage circuit, this design is not just in principle on feasible, but also in the practical application of the bedroom can realize to people the precise measurement of the temperature and humidity and control, the circuit is simple and stable operation, high level of integration, convenient operation, flexible, to meet the requirements of the people bedroom environment has certain practical value and meaning.

Keywords:AT98C51,SHT11,LM016L ,Photoelectric coupled circuit

II

目 录

摘 要.......................................................................................................................... I

ABSTRACT .................................................................................................................. II

1 绪言

1.1课题背景.................................................................................................................. 3 1.2课题的研究和意义.................................................................................................. 3 1.3国内外概况.............................................................................................................. 3 1.4课题的主要研究工作.............................................................................................. 5

2 系统设计方案的研究

2.1系统设计方案.......................................................................................................... 6 2.2系统设计方案得比较.............................................................................................. 6 2.3系统实现的原理...................................................................................................... 7

3 硬件的设计

3.1 89C51芯片 .............................................................................................................. 8 3.2 SHT11传感器 ......................................................................................................... 8 3.3 LCD LM016L显示模块 ....................................................................................... 10 3.4报警模块................................................................................................................ 11

4 软件系统与实现

4.1软件子系统设计.................................................................................................... 12 4.2 PROTEUS简介 ........................................................................................................ 18 4.3 C语言介绍 ............................................................................................................ 18 4.4 KEIL 软件介绍 ...................................................................................................... 19 4.5 仿真结果 ............................................................................................................... 19 4.5.1温度超出上线和低于下限时控制电路工作..................................................... 19 4.5.2温度超出上线和低于下限时控制电路工作..................................................... 20 4.5.3温湿度不在预设范围事报警器工作................................................................. 20

5 总结与展望.......................................................................................................... 21 致 谢........................................................................................................................ 22 参考文献 ................................................................................................................... 23 附录 ............................................................................................................................ 25

1 绪言

1.1课题背景

改革开放以来,人们对生活质量要求显著提高,对自己居室的环境要求也越

来越高,这对以从事居室装修工人来说是一个机遇,同时也是一个挑战,而基于单片机的温湿度控制系统对解决这个问题有着非常重大的意义。

以前单纯地依靠空调、室内温度加热器等设备对居室温湿度进行调节,既不节能效率也不高,这就必需有一套科学的,先进的管理方法,用以对各个时期的温度及湿度等进行实时的监控。温湿度控制对于单片机的应用具有一定的实际意义,它代表了一类自动控制的方法,而且其应用十分广泛。

1.2课题的研究和意义

8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实例也很多。使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习、掌握,性价比高。

使用8051型单片机设计温湿度控制系统,可以及时、精确的反映室内的温度以及湿度的变化。完成诸如升温到特定温度、降温到特定温度等多种控制方式,在湿度控制方面也是如此。将此系统应用到人们居住的住房提供了更加适宜的环境。

1.3国内外概况

从17世纪初伽利略发明温度计,把玻璃管倒过来,把液体放在管内,把玻

璃管封闭进行测量温度。在1659年法国人布利奥把玻璃泡的体积缩小,并把测温物质改为水银,这样的温度计已具备了现在温度计的雏形。以后荷兰人华伦海特在1709年利用酒精,在1714年又利用水银作为测量物质,制造了更精确的温度计。瑞典人摄尔修斯于1742年改进了华伦海特温度计的刻度,他把水的沸点定为100度,把水的冰点定为0度。而真正把温度变成电信号的传感器是1821年由德国物理学家赛贝发明的,这就是后来的热电偶传感器。五十年以后,另一位德国人西门子发明了铂电阻温度计。在半导体技术的支持下,20世纪相继开发了半导体热电偶传感器、PN结温度传感器和集成温度传感器。与之相应,根据波与物质的相互作用规律,相继开发了声学温度传感器、红外传感器和微波传

3

感器。从此电子温度计随着传感器的发展越来越成熟。

智能温度传感器(亦称数字温度传感器)在20世纪90年代中期问世。它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器能输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,温度计也越来越智能化。

而湿度计好像是里安纳度----一个在15世纪在意大利里出生的人---是第一个想出这一个仪器量度出空气中的水蒸气含量的人开始探索的。他将一干燥的棉花放在一个天砰的一侧上。然后他安置一个正是与棉花相同的重量的对象在天砰的另一侧。当干燥的棉花从空气吸收水蒸汽,它变得更重并且这个天砰的这侧开始降落。在两重量之间的不同是湿度的度量标准。现在科学家使用一台称为”psychrometer”的仪器测量相对湿度。”psychrometer”由两个绑在一起的温度计造成。一个温度计的泡被用清水浸过的材料包着。开始量度相对湿度时,要把psychrometer旅转直至被包着的温度计维持一个稳定的温度,而这温度一定比干的那个温度计低。实际的空气温度被干燥的那个温度计量度。在两温度之间的不同被叫为”wet-bulbdepression”是来自物质的水的蒸发的结果。科学家记录低干的温度计的温度和”wet-bulbdepression”,然后制成一个图表,来计算相对湿度。这个也是干湿球湿度计的工作原理。跟电子温度计一样湿度计随着湿度传感器的发展趋于成熟。现在常用的温度传感器AD590,DS18B20湿度传感器HMxx系列,HS1xx系列,随着温湿度计的发展温室监控系统也越来越成熟,更好的为人们服务。

近年来,国内外在湿度传感器研发领域取得了长足进步。湿敏传感器正从简单的湿敏元件向集成化、智能化、多参数检测的方向迅速发展,为开发新一代湿度/温度测控系统创造了有利条件,也将湿度测量技术提高到新的水平。

目前,国外生产集成湿度传感器的主要厂家及典型产品分别为Honeywell公司(HIH-3602、HIH-3605、HIH-3610型),Humirel公司(HM1500、HM1520、HF3223、HTF3223型),Sensiron公司(SHT11、SHT15型)。

但是,在湿度测试领域大部分湿敏元件性能还只能使用在通常温度环境下。在需要特殊环境下测湿的应用场合大部分国内包括许多国外湿度传感器都会”皱起眉头”!例如在上面提到纺织印染行业,食品行业,耐高温材料行业等,都需要在高温情况下测量湿度。一般情况下,印染行业在纱锭烘干中,温度能达到120摄氏度或更高温度;在食品行业中,食物的烘烤温度能达到80-200摄氏度左右;耐高温材料,如陶瓷过滤器的烘干等能达到200摄氏度以上。在这些情况下,

4

普通的湿度传感器是很难测量的。

1.4课题的主要研究工作

1.人性化的设计。界限温度值及湿度值能够由用户根据不同的各种需求设定。

2.能够实时、准确的显示采样温度值与湿度值。

3.通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(包括警报灯的提示功能以及提示音等)进行报警,并采取相应的方案。

4.能够根据在不同时间段内对温湿度的不同要求,用户可随机更改温度及湿度值,以满足用户不同的需求。

5

2 系统设计方案的研究

2.1系统设计方案

利用单片机最小系统,外接显示电路,数据采集电路以及控制电路实现对设计的要求的满足,对数据采集电路的选择没有选择热敏电阻和湿敏电阻是因为sht11传感器既简单,又有较为合适的工作范围,简化了电路又提高效率。

2.2系统设计方案得比较

方案一:采用热电阻温度传感器。热电阻是利用导体的电阻随温度变化的特性制成的测温元件[1]。现应用较多的有铂、铜、镍等热电阻。其主要的特点为精度高、测量范围大、便于远距离测量。

采用HOS-201湿敏传感器[2]。HOS-201湿敏传感器为高湿度开关传感器,它的工作电压为交流1V以下,频率为50HZ~1KHZ,测量湿度范围为0~100%RH,工作温度范围为0~50℃,阻抗在75%RH(25℃)时为1MΩ。这种传感器原是用于开关的传感器,不能在宽频带范围内检测湿度,因此,主要用于判断规定值以上或以下的湿度电平。然而,这种传感器只限于一定范围内使用时具有良好的线性,可有效地利用其线性特性。

方案二:采用SHT11温湿度传感器,SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片[2,3,4,5]。该芯片广泛应用于暖通空调、汽车、消费电子、自动控制等领域。主要特点如下:

高度集成,将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上;

提供二线数字串行接口SCK和DATA,接口简单,支持CRC传输校验,传输可靠性高;

测量精度可编程调节,内置A/D转换器(分辨率为8~12位,可以通过对芯片内部寄存器编程选择);

测量精确度高,由于同时集成温湿度传感器,可以提供温度补偿的湿度测量值和高质量的露点计算功能;

封装尺寸超小(7.62 mm×5.08mm×2.5 mm),测量和通信结束后,自动转入低功耗模式;

高可靠性,采用CMOSens工艺,测量时可将感测头完全浸于水中。 综合这两种方案,从性能的比较,测量精度,市场的使用情况,以及该设计的可操作性方案二中的SHT11温湿度传感器都表现出它的优势因此本设计采用方案二。

6

2.3系统实现的原理

利用AT89C51单片机在P3.4、P3.5口接温、湿度控制电路,P2.6,P2.7口接温湿度传感器SHT11,P0口接LCD LM016L的D0~D7,当温湿度不在范围,P3.4、P3.5输出低电平,光耦控制电路导通对其进行控制并在LCD显示。结构框图如2.1所示。

晶振电路传感器AT89c51报警电路控制模块显示模块复位电路

2.1 结构框图

由单片机最小系统,外加数据采集模块,控制模块,显示模块极其报警部分构成温湿度检测和控制系统。

7

3 硬件的设计

3.1 89C51芯片

89C51是Intel公司于80年代初推出的8位嵌入式微控制器(内部数据总线为8位,外部数据总线为8位),它与MCS-96系统中的其它芯片相比,具有性能高、功能全、售价低廉、使用方便(48PINDIP)等优点。89C51在工业应用方面有许多明显的特点,它具有灵活方便的8位总线外围支持器扩展功能,而在数据处理方面又有8位微机的快速功能。由于大的高度集成化已把许多常驻用的输入检测输出控制通道都制作在同一块硅片上,大大地灵活了外部连线,增强了系统的稳定性并且速度快(时钟12MHz),非常适合于工业环境下安装使用。因此本系统CPU选用89C51芯片。

89C51单片机引脚采用40双列直插式封装结构。89C51系统CPU中的主要组件有:高速寄存器阵列、特殊功能寄存器(SFR)、寄存器控制器和算术逻辑单元(RALU)。它与外部通讯是通过特殊功能寄存器SFR或存储器,控制器进行的。8051系统的CPU的主要特色是体积小,重量轻,抗干扰能力强,售价低,使用方便。此外,通过SFR还可以直接控制I/O、A/D、PWM、串行口等部件的有效运行。

CPU内部的一个控制单元和两条总线寄存器阵列和EALU连接起来。这两条总线是:16位地址总线(A-BUS)和8位数据总线(D-BUS)。数据总线仅在RALU与寄存器阵列或SFR之间传送数据,地址总线用作上述数据传送的地址总线或用作与寄存器控制器连接的多路复用地址/数据总线。CPU对片内RAM访问是直接访问和通过寄存器R0,R1间接访问的。

89C51工作时所需的时钟可通过其XTALL输入引脚由外部输入,也可采用芯片内部的振荡器。其工作频率为6~12MHz。在本系统中采用11.0592MHz频率。

3.2 SHT11传感器

1. SHT11重要部分

SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片。该芯片广泛应用于暖通空调、汽车、消费电子、自动控制等领域[6,7]。共主要特点如下:

高度集成,将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上;

提供二线数字串行接口SCK和DATA,接口简单,支持CRC传输校验,传输可靠性高;

测量精度可编程调节,内置A/D转换器(分辨率为8~12位,可以通过对

8

芯片内部寄存器编程选择);

测量精确度高,由于同时集成温湿度传感器,可以提供温度补偿的湿度测量值和高质量的露点计算功能;

封装尺寸超小(7.62 mm×5.08mm×2.5 mm),测量和通信结束后,自动转入低功耗模式;

高可靠性,采用CMOSens工艺,测量时可将感测头完全浸于水中。 2 .SHT11的引脚功能

SHT11温湿度传感器采用SMD(LCC)表面贴片封装形式,接口非常简单,如图3.1所示。

U2R11k 32SCKDATA>44.011.0癈 %RHSHT11

图3.1 SHT11引脚

各引脚的功能如下:

◇脚1和4--信号地和电源,其工作电压范围是2.4~5.5 V;

◇脚2和脚3--二线串行数字接口,其中DA-TA为数据线,SCK为时钟线; ◇脚5~8--未连接。

3 SHT11的内部结构和工作原理图

温湿度传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其内部结构如图3.2所示。该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大;然后进入一个14位的A/D转换器;最后经过二线串行数字接口输出数字信号。SHT11在出厂前,都会在恒湿或恒温环境巾进行校准,校准系数存储在校准寄存器中;在测量过程中,校准系数会自动校准来自传感器的信号。此外,SHT11内部还集成了一个加热元件,加热元件接通后可以将SHT11的温度升高5℃左右,同时功耗也会有所增加。此功能主要为了比较加热前后的温度和湿度值,可

9

以综合验证两个传感器元件的性能。在高湿(>95%RH)环境中,加热传感器可预防传感器结露,同时缩短响应时间,提高精度。加热后SHT11温度升高、相对湿度降低,较加热前,测量值会略有差异。然而在改变温度的同时湿度也会略微变化,因为湿度测量测的是相对湿度,相对湿度跟温度相关,温度变则相对湿度变,其自身带有温度补偿功能。

校准寄存器二线串行数字端口和CRC校验SCK温度传感器运算放大器DATAA/D转换器VCCGND湿度传感器

图3.2 SHT11内部结构

微处理器是通过二线串行数字接口与SHT11进行通信的。通信协议与通用的I2C总线协议是不兼容的,因此需要用通用微处理器I/O口模拟该通信时序。微处理器对SHT11的控制是通过5个5位命令代码来实现的,命令代码的含义如表3.3所列。

表3.3 SHT11控制命令代码

命令代

码 00011 00101 00111 00110 11110 其他

含义

测量温度 测量湿度

读内部状态寄存器 写内部状态寄存器

复位命令,是内部寄存器恢复默认值 保留

3.3 LCD LM016L显示模块

LM016l 与LCD1602原理是一样的,只不过PROTEUS中016没显示调亮度的那两个端口,但并不影响[8]。

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看

10

到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,引脚如图3.4所示[9]。

LCD1LM016LVSSVDDVEERSRWE456123 3.4 LCD LM016L引脚 7891011121314D0D1D2D3D4D5D6D7 在单片机系统中应用晶液显示器作为输出器件有以下几个优点: A 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。 B 数字式接口

液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

C 体积小、重量轻

液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

3.4报警模块

报警模块具备报警功能,只要温湿度不在预设区间内报警器会发出声响提醒工作人员,其中蜂鸣器一端接单片机的单片机17脚RD,其输出具有复合功能,此处用到了单片机RD引脚的IO端口功能,单片机通过内部定时器的操作实现交替变换的波形输出驱动扬声器发声[10]。

11

______

______

4 软件系统与实现

4.1软件子系统设计

温湿度判断控制模块也是系统的核心模块之一,所谓判断控制模块,就是对

用户输入的温度和湿度与当前温室内的实际温湿度进行比较,先进行判断,然后再进行控制,控制模块是决定系统将要进行什么工作的。如温度高于上限时需要降温,低于下限时需要升温,同时还要启动警报等等。温度判断控制部分的程序流程如下4.1所示。

读入时值调用控制部分升降温湿度声光警报是否在预设时间返回

4.1 程序流程图

上面已经讨论了采取中间值作为控制参数,采取中间值一定区间作为控制区间的原理,按照上图原理,系统流程图如4.2所示:

12

读取测量数据是温湿度值吗?温度转换处理湿度转换处理温度<11℃?湿度<40%RH?N温度>32℃?N湿度>60%RH?YN关报警关控制开警报开控制发送数据YN关报警关控制开警报开控制显示延时返回下次监控

4.2 系统流程图

本流程分为温度和适度监控,我们以温度的监控为例阐述该流程:首先系统初始化由SHT11传感器读取环境温度并自身将其转换成数字信号,然后送入51单片机,如果该数据低于预设最低值或高于预设最高值,则报警电路和控制电路将被接通,起到提醒和控制的作用,并将数据送入51单片机,在LCD上显示。如果温度正常,即处于预设范围,则报警电路和控制电路不会动作,并将数据送入单片机,在LCD上显示,之后进入下次的监控流程。湿度的监控流程和温度基本一致,不再赘述。 系统总图如4.3。

13

LM016LVSSVDDVEERSRWE456123C2U110PF191P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161723456789XTAL17891011121314D0D1D2D3D4D5D6D7RP1C3C110u10PFX1CRYSTAL18XTAL29RSTR41K293031PSENALEEARESPACK-8U232Q1R31k2N5401R11kSCKDATA>40.011.0癈%RHSHT1112345678Q32N2222A65P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51U41U3:A174HC072R515024R61kD2R2LS1OPTOCOUPLER-NPN 控制电路1kLED-YELLOWSPEAKERQ2U6165242N2222AU5:A174HC072R9150D1R7LED-GREENL1B82412A1103K0001kOPTOCOUPLER-NPN 控制电路

4.3 系统总图

(1)AT89C51单片机

AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机[11]。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本[12]。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图4.4所示 。

14

4.4 AT89C51引脚

引脚介绍:

VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写”1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址”1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。 P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入”1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口

15

也可作为AT89C51的一些特殊功能口,口管脚 备选功能

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 (2)晶振电路

单片机必须在时钟的驱动下才能工作,电容大小没有固定值,一般二三十pF。晶振是给单片机提供工作信号脉冲的[13,14,15]。单片机必须在时钟的驱动下才能这个脉冲就是单片机的工作速度,比如 12M晶振。单片机工作速度就是每秒 12M,和电脑的 CPU概念一样.当然.单片机的工作频率是有范围的,不能太大,一般 24M就不上往了,不然不稳定。在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机

16

的工作速度。晶振电路如图4.5所示。

C2U110PF19XTAL1C310PFX1CRYSTAL18XTAL2 4.5 晶振电路

(3)复位电路 为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作[19,20,21]。复位电路如图4.6所示。

C110uR41K

4.6复位电路

(4)温湿度控制电路

本电路主要是直观的看到温湿度控制的体现,本人在元件列表中难以找到能

17

很好控制温湿度的元器件就以电热丝或电阻与发光二极管的来带替,然而只有二者远远不够,虽然在原理上,该电路可以达到预期效果,在实际应用一般选择空调或喷雾器等来改变环境的温湿度,这就要考虑到电路的工作电流、电压所以本控制电路接入一个光电耦合器以求达到弱电控制强电的目的,当然光电耦合电路如图4.7并不是唯一的选择,还有晶闸管,继电器等都可以考虑。[22,23,24,25]

Q2U6165242N2222AU5:A174HC072R9150D1R71kLED-GREENL1B82412A1103K000OPTOCOUPLER-NPN 控制电路

4.7 温湿度控制电路

4.2 Proteus简介

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件[26,27]。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软合并在一起,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。

4.3 C语言介绍

C语言是一种计算机程序设计语言[28]。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应

18

用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。 C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。

常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,TurboC等等......

4.4 Keil 软件介绍

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。[29,30]

4.5 仿真结果

4.5.1温度超出上线和低于下限时控制电路工作 如图4.8 Q2U6165242N2222AU5:A174HC072R9150D1R7LED-GREENL1B82412A1103K0001kOPTOCOUPLER-NPN 控制电路

4.8 结果一

当温度低于预设温度的下限或高于预设温度的上限时51单片机P3.4端口输出低电平进而使光电耦合器的发光二极管发光,光电耦合器开始工作,并通过三极管放大(其放大作用是为了对那些功率稍大的用电器在实际中的能够更好地被利用),并能看到放光二极管D1发光动作。

19

4.5.2温度超出上线和低于下限时控制电路工作 如图4.9: U232SCKDATA>R11k35.014.0癈%RHSHT11Q32N2222A65U41U3:A174HC072R515024R6D2R21kOPTOCOUPLER-NPN 控制电路1kLED-YELLOW

4.9结果二

当湿度低于预设湿度的下限或高于预设湿度的上限时51单片机P3.5端口输出低电平进而使光电耦合器的发光二极管发光,光电耦合器开始工作,并通过三极管放大(其放大作用是为了对那些功率稍大的用电器在实际中的能够更好地利用),并能看到放光二极管D2发光动作。

注:上图中电感L1和电阻R2等效的看作多功能空调(能增减温湿度),并将及其设置为自动模式,即将设置好温湿度范围和程序设置的统一,一旦温湿度失常,空调(自动模式)被接通,按照设置好的温湿度要求进行控制调节。

4.5.3温湿度不在预设范围事报警器工作 如图4.10:

Q1R31k2N5401LS1SPEAKER

4.10 报警器工作

当温湿度不在预设范围单片机的

P1.0端口出现高低电平交替,使得报警装置

动作发生。

20

5 总结与展望

我选的题目基于51单片机的温湿度监控系统,本设计研究的重点是利用单片机最小系统结合光电耦合器对温湿度的控制。本系统的设计,经历了课题分析、方案研究、硬件设计、软件设计以及仿真测试的过程。包含了对单片机应用,各种器件的功能的应用以及电路连接仿真调试等。从原理上达到了预期目的,并且初见理论知识与实际相结合的端倪。

通过本次毕业设计,我感到自己应用基础知识及专业知识解决问题的能力有了很大的提高,但是我的个人能力有限,本设计还有许多不足之处有待改进。我对自己充满信心。

21

致 谢

毕业论文的写作锻炼了我收集和整合信息以及创新和对以前学习知识运用的能力,凝聚着无数人对我的关怀和帮助,没有他们的支持和鼓励,我是不会这么顺利完成的。

首先要特别感谢我的指导老师孙玲姣老师,在教学繁忙、事务缠身的情况下,孙老师多次抽出时间,对我进行悉心的指导,从论文的选题到论文的总体框架,再到论文撰写过程中的语言组织,她都进行过细致的批阅,使得我的论文越来越规整,更加符合标准。

然后要感谢我的同学们,四年来对我学习和精神上的帮助,每当我遇到困难,请教他们,他们都热心的帮助我,让我知道什么是集体。

最后要感谢我的父母,没有他们我就不会在大学这个温馨的大家庭里让我四年的学习生活充实而有意义。

22

参考文献

[1] 刘振全,王汉芝.金属热电阻温度传感器在多路温度监控系统中的应用[J].传感器世

界,2006,12(12):25-27,36.

[2] 吕东,彭钧.湿度控制技术的智能化[J].武汉化工学院学报,2000,22(2):64-67.

[3] 冯显英,葛荣雨.基于数字温湿度传感器SHT11的温湿度测控系统[J].自动化仪

表,2006,27(1):59-61.

[4] 冯达,余轩,黄景峰等.单片数字式温湿度传感器SHT11的应用[J].电子产品世

界,2011,18(12):44-46.DOI:10.3969/j.issn.1005-5517.2011.11.012.

[5] 张艳丽,杨仁弟.数字温湿度传感器SHT11及其应用[J].工矿自动化,2007,(3):113-114. [6] 谢敏,徐会冬.智能传感器SHT11在单片机嵌入式系统中的应用[J].现代电子技

术,2005,28(14):89-91,94.

[7] 王汉芝,刘振全.基于CMOSens(R)技术的数字湿度/温度传感器SHT11及其应用[J].传感器

世界,2004,10(9):35-37.

[8] 朱清慧,张凤蕊.基于DS1302和LM016L的实时时钟设计与仿真[J].南阳理工学院学

报,2010,02(6):9-13.

[9] 王志奎,朱清慧.基于Proteus ISIS 7.4的虚拟液晶显示屏设计[J].液晶与显

示,2009,24(4):586-591.

[10]徐玮,彭敏芳,魏巍等.轻松学PIC之蜂鸣器和继电器[J].电子制作,2010,(5):70-71,69. [11]黄保瑞,贾之豪,邵婷婷等.基于AT89C51单片机的温度测控系统设计[J].现代电子技

术,2011,34(6):142-143,147.

[12]梁伟,吴传利.闪烁存储器(FLASH)Am29LV400B及其在DSP系统中的应用[J].情报指挥控

制系统与仿真技术,2002,(2):15-22.

[13]程雯,戎蒙恬,李萍等.用于实时时钟的32.768kHz晶振电路分析与设计[J].信息技

术,2009,33(1):15-17,86.

[14] Rahman, K.M.,Choudhury, M.A..Dead-Time Compensated Pulsewidth Modulator

for a 3-Phase VSI Implemented with an AT89C52 Microcontroller[C].Electrical and Computer Engineering,2006 International Conference on;Dhaka,Bangladesh,2006:467. [15]唐伟.基于数字温度补偿晶振的实时时钟电路的设计[J].硅谷,2012,(2):50-51.

[16]HAN Xing,ZHANG Xu,LIU Jin-tao等.Development of Temperature-Humidity Independent

23

Control Air-Conditioning Unit for Residential Buildings[J].湖南大学学报(自然科学版),2009,36(z1):83-87.

[17]钟应善,杨家强,邓劲莲等.温室温度和湿度的多变量模糊控制技术[J].农业机械学

报,2001,32(3):75-78.

[18]Temperature monitoring system based on AT89C51 microcontroller[C].2009 IEEE

International Symposium on IT in Medicine &Education(ITME 2009).[v.1],2009:316-317

[19]黎晖,魏光辉,汤小慷等.单片机复位电路的可靠性与抗干扰分析[J].兵工自动

化,2007,26(2):81-82.

[20]一种片上系统设计中的复位电路设计方法[Z]中国科学院微电子研究所.2008.

[21]尉广军,郝永生,姚义等.单片机系统中复位电路的可靠性分析与设计[J].仪器仪表学

报,2002,23(z2):577-578

[22]李廷军,徐永汉,徐进等.线性光电耦合放大电路的实现[J].海军航空工程学院学

报,2003,18(5):589.

[23]赖家胜.三极管放大电路基极偏置电阻的估算[J].柳州师专学报,2002,17(2):95-96. [24]方张兴.晶体三极管放大作用的实验演示[J].物理教学探讨,2008,26(15):59-60.

[25]林景东.浅谈放大电路的分析方法[J].中国科技信息,2011,(15):106.DOI:

10.3969/j.issn.1001-8972.2011.15.063

[26]李生明,杨红.PROTUES软件在学习单片机中的应用[J].清远职业技术学院学

报,2010,03(6):40-42.

[27]李栓明,李栓明,张卫东等.Protues在单片机教学当中的应用研究[J].科技信

息,2010,(35):203,222.

[28]黄定华,孙炳达.嵌入式系统中的软件设计技术--C语言程序设计[J].工业控制计算

机,2001,14(5):3-6.

[29]伍冯洁,谢陈跃,谢斌等.Proteus与Keil在单片机开放性实验中的应用[J].电子测量技

术,2008,31(6):100-103,107.

[30]宁成军,张江霞.基于Proteus和Keil接口的单片机外围硬件电路仿真[J].现代电子技

术,2006,29(18):142-143,146.

24

附录

main.c

#include #include

#include //Keil library #include //Keil library #include \#include \

sbit jb=P1^0; sbit wendujb=P3^4; sbit shidujb=P3^5;

void main(void) { unsigned char i;

value humi_val,temp_val; unsigned char error,checksum; unsigned int wendu,shidu; s_connectionreset(); LcdReset();

for(i=0;i<=31;i++) Show_Buf[i]=0x20; FIRST_SHOW(); DisplayAll(Show_Buf);

while(1) { error=0;

error+=s_measure((unsigned //measure humidity

error+=s_measure((unsigned

char*) &humi_val.i,&checksum,HUMI); char*) &temp_val.i,&checksum,TEMP); 25

//measure temperature

if(error!=0) s_connectionreset(); //in case of an error: connection reset else

{ humi_val.f=(float)humi_val.i; //converts integer to float

temp_val.f=(float)temp_val.i; //converts integer to float

calc_dht90(&humi_val.f,&temp_val.f); humidity, temperature

wendu=10*temp_val.f; Show_Buf[0]=wendu/1000+0x30; Show_Buf[1]=(wendu00)/100+'0'; Show_Buf[2]=(wendu0)/10+'0'; Show_Buf[4]=(wendu)+'0';

Show_Buf[3]='.';

shidu=10*humi_val.f; Show_Buf[16]=shidu/1000+0x30; Show_Buf[17]=(shidu00)/100+'0'; Show_Buf[18]=(shidu0)/10+'0'; Show_Buf[20]=(shidu)+'0';

Show_Buf[19]='.';

}

DisplayAll(Show_Buf); if(wendu<110||wendu>320) { wendujb=0;jb=~jb;

} else { wendujb=1;

}

//calculate 26

if(shidu<400||shidu>600) { shidujb=0;jb=~jb;

} else { shidujb=1; }

}

}

Sht11相关程序

/**************定义接口******************** P2.6------SCK P2.7------DATA *****************************************/

/******定义函数****************/ #define uchar unsigned char #define uint unsigned int

//*********************

START**************************************** sbit SCK = P2^6; //定义通讯时钟端口 sbit DATA = P2^7; //定义通讯数据端口

SHT11

置27

typedef union

{ unsigned int i; //定义了两个共用体 float f; } value;

enum {TEMP,HUMI}; //TEMP=0,HUMI=1

#define noACK 0 //用于判断是否结束通讯 #define ACK 1 //结束数据传输 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0

/****************定义函数****************/ void s_transstart(void); //启动传输函数 void s_connectionreset(void); //连接复位函数 char s_write_byte(unsigned char value);//sht11写函数 char s_read_byte(unsigned char ack); //sht11读函数

char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);//测量温湿度函数

void calc_dht90(float *p_humidity ,float *p_temperature);//温湿度补偿

/*-------------------------------------- ;模块名称:s_transstart(); ;功 能:启动传输函数 ;占用资源:-- ;参数说明:--

;版 本:FV1.0(函数版本Function Version) ;修改日期:--

28

;修改说明:--

;-------------------------------------*/ void s_transstart(void)

// generates a transmission start // _____ ________ // DATA: |_______| // ___ ___ // SCK : ___| |___| |______ {

DATA=1; SCK=0; //Initial state _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0;

_nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; }

/*-------------------------------------- ;模块名称:s_connectionreset(); ;功 能:连接复位函数 ;占用资源:-- ;参数说明:--

;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:--

;-------------------------------------*/ void s_connectionreset(void)

// communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart

29

// _____________________________________________________ ________

// DATA: |_______| // _ _ _ _ _ _ _ _ _ ___ ___

// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______ {

unsigned char i;

DATA=1; SCK=0; //Initial state for(i=0;i<9;i++) //9 SCK cycles { SCK=1; SCK=0; }

s_transstart(); //transmission start }

/*-------------------------------------- ;模块名称:s_write_byte(); ;功 能:sht11写函数 ;占用资源:-- ;参数说明:--

;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:--

;-------------------------------------*/ char s_write_byte(unsigned char value)

//---------------------------------------------------------------------------------- // writes a byte on the Sensibus and checks the acknowledge {

unsigned char i,error=0;

for (i=0x80;i>0;i/=2) //shift bit for masking {

if (i & value) DATA=1; //masking value with i , write to SENSI-BUS

30

else DATA=0;

SCK=1; //clk for SENSI-BUS _nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=0; }

DATA=1; //release DATA-line SCK=1; //clk #9 for ack

error=DATA; //check ack (DATA will be pulled down by DHT90),DATA在第9个上升沿将被DHT90自动下拉为低电平。 _nop_();_nop_();_nop_(); SCK=0;

DATA=1; //release DATA-line

return error; //error=1 in case of no acknowledge //返回:0成功,1失败 }

/*-------------------------------------- ;模块名称:s_read_byte(); ;功 能sht11读函数 ;占用资源:-- ;参数说明:--

;创建日期:2008.08.15

;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:--

;-------------------------------------*/ char s_read_byte(unsigned char ack)

// reads a byte form the Sensibus and gives an acknowledge in case of \ {

unsigned char i,val=0;

DATA=1; //release DATA-line for (i=0x80;i>0;i/=2) //shift bit for masking { SCK=1; //clk for SENSI-BUS if (DATA) val=(val | i); //read bit

31

_nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=0; }

if(ack==1)DATA=0; //in case of \pull down DATA-Line

else DATA=1; //如果是校验(ack==0),读取完后结束通讯

_nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=1; //clk #9 for ack _nop_();_nop_();_nop_(); //pulswith approx. 3 us SCK=0;

_nop_();_nop_();_nop_(); //pulswith approx. 3 us DATA=1; //release DATA-line return val; }

/*-------------------------------------- ;模块名称:s_measure(); ;功 能:测量温湿度函数 ;占用资源:-- ;参数说明:--

;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:--

;-------------------------------------*/

char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)

// makes a measurement (humidity/temperature) with checksum {

unsigned error=0; unsigned int i;

s_transstart(); //transmission start

switch(mode){ //send command to sensor case TEMP : error+=s_write_byte(MEASURE_TEMP); break; case HUMI : error+=s_write_byte(MEASURE_HUMI); break;

32

default : break; }

for (i=0;i<65535;i++) if(DATA==0) break; //wait until sensor has finished the measurement

if(DATA) error+=1; // or timeout (~2 sec.) is reached *(p_value) =s_read_byte(ACK); //read the first byte (MSB) *(p_value+1)=s_read_byte(ACK); //read the second byte (LSB) *p_checksum =s_read_byte(noACK); //read checksum return error; }

/*-------------------------------------- ;模块名称:calc_sht11(); ;功 能:温湿度补偿函数 ;占用资源:-- ;参数说明:--

;创建日期:2008.08.15

;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:--

;-------------------------------------*/

void calc_dht90(float *p_humidity ,float *p_temperature) // calculates temperature [C] and humidity [%RH] // input : humi [Ticks] (12 bit) // temp [Ticks] (14 bit) // output: humi [%RH] // temp [C]

{ const float C1=-4.0; // for 12 Bit const float C2=+0.0405; // for 12 Bit const float C3=-0.0000028; // for 12 Bit const float T1=+0.01; // for 14 Bit @ 5V const float T2=+0.00008; // for 14 Bit @ 5V

float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit float t=*p_temperature; // t: Temperature [Ticks] 14 Bit float rh_lin; // rh_lin: Humidity linear

33

float rh_true; // rh_true: Temperature compensated humidity

float t_C; // t_C : Temperature [C]

t_C=t*0.01 - 40; //calc. temperature from ticks to [C] rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH] rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH]

if(rh_true>100)rh_true=100; //cut if the value is outside of if(rh_true<0.1)rh_true=0.1; //the physical possible range

*p_temperature=t_C; //return temperature [C] *p_humidity=rh_true; //return humidity[%RH] }

LM016L相关程序

//-------------------------------------------------------------------- //液晶库函数 sbit RS = P2^0; //4脚 sbit RW = P2^1; //5脚 sbit Elcm = P2^2; //6脚 sbit Busy = P0^7;

#define DATA_ADDRE P0 unsigned char Show_Buf[32];

//-------------------------------------------------------------------- void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i

}

34

}

}

//------------------------------------------------------------ void WaitForEnable( void ) { }

//------------------------------------------------------------- /*

unsigned char swdata_char(unsigned char x) //将1个字节的数值反向。 {

uchar b=0; uchar a; for(a=0;a<8;a++) {

b=(x&0x01)?((b<<1)+1):(b<<1); x=x>>1; } return(b); }*/

//-------------------------------------------------------------

void LcdWriteCommand( unsigned char CMD,unsigned char AttribC ) {

if (AttribC) {WaitForEnable();}

DATA_ADDRE = 0xff; RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();

Delay1ms(1);//while(Busy); Elcm = 0;

35

RS = 0; RW = 0; _nop_();

DATA_ADDRE =CMD; _nop_(); Elcm = 1; _nop_(); _nop_(); Elcm = 0;

}

//--------------------------------------------------------------- void LcdWriteData( char dataW ) { WaitForEnable(); RS = 1; RW = 0; _nop_();

DATA_ADDRE =dataW; _nop_(); Elcm = 1; _nop_(); _nop_(); Elcm = 0;

}

//--------------------------------------------------------------- void LcdReset( void ) { LcdWriteCommand( 0x38, 0); Delay1ms(5);

LcdWriteCommand( 0x38, 0); Delay1ms(5);

LcdWriteCommand( 0x38, 0); Delay1ms(5);

LcdWriteCommand( 0x38, 1); // 显示模式设置

LcdWriteCommand( 0x08, 1); // 显示关闭 36

LcdWriteCommand( 0x01, 1); // 显示清屏 LcdWriteCommand( 0x06, 1); // 显示光标移动设置 LcdWriteCommand( 0x0c, 1); // 显示开及光标设置

}

//---------------------------------------------------------------- void Disp_XY( unsigned char posx,unsigned char posy) { unsigned char temp; temp = posx & 0xf; posy &= 0x1;

if ( posy ) temp |= 0x40; temp |= 0x80;

LcdWriteCommand(temp,0);

}

//----------------------------------------------------------------

void DispOneChar(unsigned char x,unsigned char y,unsigned char Wdata) { Disp_XY( x, y ); LcdWriteData( Wdata ); }

//--------------------------------------------------------------- void FIRST_SHOW(void) { unsigned char i; for(i=0;i<16;i++) DispOneChar(i,0,0x20); for(i=0;i<16;i++) DispOneChar(i,1,0x20); }

//--------------------------------------------------------------- void DisplayAll(unsigned char *DispNum) {

unsigned char i; for(i=0;i<16;i++)

DispOneChar(i,0,DispNum[i]); 37

}

for(i=0;i<16;i++)

DispOneChar(i,1,DispNum[i+16]);

//---------------------------------------------------------------

38

本文来源:https://www.bwwdw.com/article/czfr.html

Top