基于stc12c5410ad单片机的温湿度检_测仪_毕业设计(编辑修改稿)内容摘要:
232F电平。 其工作温度范围为 0℃至 70℃,适用于各种 EIA232C 和 的通信接口。 MAX232 芯片内部有一个电压变换器,可以把输入的 +5V 电源电压变换成为 RS232 所需的电压。 所以,采用此芯片的串行通信系统只需单一的 +5V 电源就可以了。 河南科技大学本科毕业设计(论文) 13 图 28 MAX232 的引脚图 通信模块电路如图 29 所示: 图 29 通信模块电路 14 第 3章 温湿度检测仪的软件设计 167。 主程序模块的设计 主程序是系统控制 和管理的核心,主要完成在系统上电后进行定时和中断处理操作的初始化。 它的内容包括主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等。 单片机通过 I178。 C 总线读写程序将温湿度数据从 SHT11 中读出来,然后,根据温湿度补偿(主要指非线性补偿)公式计算出当前温湿度值并送到 12864 显示; 主程序设计流程如图 31 所示。 开 始有 键 按 下 吗。 温 湿 度 检 测吗。 Y E SY E S温 湿 度 检 测温 湿 度 显 示Y E S结 束N ON O 图 31 主程序流程图 主程序初始化的具体内容包括时间中断的初始化、外部中断源的初始化、单片机 I/O 口初 始化以及 LCD 初始化等。 然后对温度和湿度进行检测并将结果显示在 LCD 上。 15 167。 温湿度检测模块的程序设计 167。 温湿度采集子程序 ( 1) 设计思路 单片机首先向温湿度传感器 SHT11 发出启动传输命令,然后通过写总线子程序将温度测量指令(地址位 000+命令位 00011)或者湿度测量指令( 000+命令位 00101)写入 SHT11。 传感器正确接收到温度测量指令后,就会进行数据采集,单片机要等到测量完成,随后 SHT11 向单片机传送两字节测量数据( MSB 和 LSB)与 1 字节 CRC 校验码,单片机则通过读总线子程序将温 湿度数据读取出来。 读子程序流程图: 开始启动传输读第二个数据字节 L S B读首个数据字节 M S B写控制指令 测量结束。 读取校验码 结束 等待YN 16 图 52 获取温湿度子程序 ( 2) SHT11 时序问题 从 SHT11 中读取数据以及往 SHT11 中写指令都涉及到了时序问题,下面简要介绍一下 SHT11 相关时序: 启动传输时序:当时钟线 SCK 为高时将数据线 DATA 翻转为低电平,紧接着 SCK 变为低电平,然后在下一个时钟线 SCK 位高电平时 DATA 翻转为高电平。 测量时序:当单片机发出了启动传输命令,且 SHT11 正确接收到温(湿)度测量命令后,单片机就要等到测量完成。 为表明测量完成, SHT11 会使数据线为低,此时单片机必须重 新启动 SCK。 然后 SHT11 向单片机传送两字节测量数据( MSB、 LSB)与 1 字节 CRC 校验码。 在传输过程中控制器必须通过使 DATA 为低来确认每一字节,所有的测量值从右算 MSB 列于第一位。 通讯在确认 CRC 数据位后停止。 如果没有用 CRC8 校验码,则单片机需要在测量数据 LSB 后,保持 ACK 为高来停止通讯。 为了测量准确,保证在测量时 SHT11自身温升低于 ℃ ,因此 SHT11 的激活时间不要超过 10%,例如对于 12bit的测量,每秒最多测量 2 次。 通信复位时序:如果在工作中发生微处理器与 SHT11 的通信失败,可采 用下图所示的时序复位串口。 当 DATA 线处于高电平时,触发 SCK9 次以上(含 9次),则进入重启 SHT11 的状态,注意这种时序只复位串口, SHT11 的状态寄存器内容仍然被保留。 167。 SHT11 的工作原理 . 1) 温度 SHT11 的温度测量具有良好的线性,可直接采用如下公式得到的 17 温度值( T): T=d1 +d2SOT 在上式中, SOT 为 SHT11 输出的温度数据, d1 和 d2 为常数,下表列出了它们的具体数值。 温度转换系数 2) 相对湿度 而 SHT11 的湿度值( RH)可采用下式得到: RH=c1+c2SORH+c3SORH2 在上式中, SORH 为 SHT11 输出的湿度数据, c c2 和 c3 为常数,可通过下表查询到该数值。 湿度转换系数 3) 温度传感器相对湿度 做 温度补偿 若实际测量温度与 25℃ 相差较大时,需要考虑湿度传感器的温度修正系数,如下公式所示: RHTRUE=(T℃ 25).(t1+)+RH 在上式中, T℃ 为 SHT11 所测到的温度数据,单位为摄氏度, SORH 为SHT11 输出的湿度数据, RH 为已转换好的湿度值, t1 和 t2 为常数 ,其值可通过下表查询得到。 温度补偿系数 18 167。 键盘扫描和 LCD 显示模块的程序设计 167。 键盘扫描 开始有键闭合否。 延时定时器时间减少1延时时间到否。 逐行逐列的扫描键盘,判断闭合键的键号保存并给出对应键号的键值返回置延时定时器位初值Y E SY E SNO置延时定时器位初值No 图 37 键盘扫描子程序流程图 该检测仪采用 2 8 矩阵式键盘,关于它的具体硬件组成电路这里就不多做介绍,在检测有无键按下方面主要用的是定时扫描方式,该方式是利用单 19 片机内部定时器产生定时中断,即在初始化程序中对定时器 /计数器进行编程,键盘扫描子程序流程图如图 37 所示。 该子程序在时间中断服程序中被调用,定时扫描键盘,该程序首先判断有无键盘闭合,没有键盘闭合时置延时定时器位初值然后返回,有键盘闭合时延时定时器时间减少 1,如果延时时间没到时返回,如果到了就逐行逐列的扫描键盘判断闭合键的键号,然后保存并给出对应键号的键值,之后置延时定时器位初值。 延时定时器的延迟时间等于初值乘上时间判断间隔时间,通过确定延时定时器的延迟时间达到去除键盘抖动的对正常的影响,一般延时时间在30ms~ 50ms 之间 ,在实验中确定具体的延迟时间。 167。 LCD显示部分的程序设计 1. LCD 显 示器应用程序设计总体方案 (1).汉字点阵数据提取 LCD 显示器应用程序设计的基本目标是实现中文显示界面。 我们选用HS128641 型图形点阵液晶显示模块:该 LCD 模块为不自带字库的 128 64点阵液晶显示器。 可通过已由的常用子程序来添加汉字、字符的点阵数据表,供 LCD 在中文界面下显示汉字或字符。 (2).LCD 底层应用程序设计。 添加点阵数据表之后,就可以开始设计 LCD 应用程序。 在 LCD 显示器应用程序设计中,需要解决的一个重要问题就是消除显示屏的闪烁感。 HS128641 型 LCD 显示模块只提供了一块显 示数据寄存器 DDRAM,并且与显示屏点阵是一一对应的。 如果直接在 DDRAM 处理显示数据的,会因为同时进行处理和显示,而导致显示屏闪烁。 通过 LCD 模块提供的显示开关指令DISPLAY ON/OFF 在数据处理之前关掉显示 ,待数据处理完后开显示,可以使显示屏闪烁得到一定控制。 但是如果数据处理时间过长,超过人眼可辨别的最短时间 20ms,显示屏就会因为反复开关显示而产生闪烁感。 因此我们在片外数据存储器中开辟一个或多个与 DDRAM 大小一样的缓冲区,用于存放正在处理的显示数据,待数据处理完后 ,再将数据传送至 LCD 显 示数据 RAM。 通过以上分析,我们采用如下的 LCD 显示器应用程序设计总体方案:首先,添加汉字、字符点阵数据表。 然后,编写 LCD 显示驱动程序。 将指定 Buf 20 区中处理好的显示数据送 LCD 指定区显示。 根据具体要求编写相应显示数据处理子程序。 整个显示过程为:先将显示数据在片外数据存储器开辟的缓冲区中进行处理,待处理完后调用 LCD 驱动显示。 最后,在 LCD 底层程序完成的基础上,设计人机交互界面,实现用户在菜单方式下进行交互。 2. LCD 适用字模信息提取程序的设计 经研究,我们采用在单片机产品中经常用到的 16 16 点阵 的汉字库作为提取字模的母字库。 LCD 在文本显示状态下,一屏最多显示 4 行 8 个汉字。 在 16 16 点阵汉字字库中,采用的是以行为主的存放结构,即一行上连续的8 个点阵信息放在一个字节内,且左边的点对应字节的高位。 每个汉字的字模信息占 32个字节。 汉字母库编码采用:计算机汉字字符代码中最常用一个是汉字编码字符集的基本集 GB2312。 GB2312 包括了汉字字符基本集,共收录汉字、图形符号等共 7445 个,依据其位置,分为 94 个区,每区共 94 位。 其中第 16 区~55 区安排 3755 个常用汉字,依汉语拼音顺序排列。 通过汉 字的内码我们可以计算出与其点阵信息在字库中的偏移量。 在生成点阵数据表的相应汉字中,采用自定义的编码。 因为温湿度记录仪中只用到了少量汉字,所以我们决定采用 ASCII 代码中的 80H~ OFFH 特殊字符代码区,用做生成点阵表的汉字编码,共可表示 128 个汉字。 前 20H~7FH 为常用字符的 ASCII 代码。 由图形显示数据寄存器 DDRAM 地址和显示位置的对应关系可知:直接将提取的点阵数据送显,汉字不能正确显示。 因此我们必须将提取的字模数据进行相应的转换,才能在 LCD 上正确显示。 转换后的点阵信息格式如表 32所示。 表 32 16 点阵字模转换后排列格式 d0 ┇ d7 第 0 字 节 1 2 3 4 … 14 15 d0 ┇ d7 16 17 18 19 20 … 30 31 21 将转换后的点阵数据,按汇编语言中,定义存储单元伪指令“ DB”的格式写入创建的文本文件中,就得到我们所需要生成的汉字点阵信息表。 3. LCD 显示驱动程序的设计 在液晶上显示整屏字符或图像有两种方法 :一种是将所要显示的字模数据一次性发送到显示数据RAM中;另外一种是在屏幕上指定位置 进行单独显示。 两种方法都要在控制器空闲的条件下进行操作 ,在操作之前都要先读取忙标志 ,判断控制器是否处于忙状态 ,在一般情况下 ,可以用延时等待的方法代替。 所谓 LCD 驱动,即是通过连续的写显示数据 (WRITE DISPLAY DATE)命令操作,将片外显示数据处理缓冲区内的数据,顺序写入相应的 DDRAM 单元。 HS128641 液晶 的 驱动和控制系统是由 1 片 HD61102 作为 64 路行驱动器,同时 HD61102 配备了一套显示存储器的管理电路和与 MCU 接口电路,可以直接与 MCU 的总线连接。 22 开始设置页地址= L C D P a g e X设置Y 地址= 0设置写屏次数R 3 = 6 4R 2 1 = = 0No YesR 3 = = 0Yes初始化写屏标志R 2 = 2从B u f A d d r 所指单元取显示数据将显示数据写入左半屏 将显示数据写入右半屏R 3 ;B u f A d d r + +NoR 2 R 2 = = 0YesNoL C D P a g e X + + ;R 1 R 1 = L C D P a g e N u mR 1 = = 0YesNo结束 图 38 LCD 显示驱动源程序及流程图 HS128641 型 LCD 显示模块,在硬件上通过左右半屏的片选信号引脚CS1/CS2,将 LCD 的显示数据 DDRAM 分为了左右两个半屏。 在显示数据的处理和送显上,需要不断设置引脚 CS1/CS2 的信号,达到对指定 DDRAM 单元的控制和处理。 这样对 LCD 模块控制极为不便。 23 我们欲通过软件处理,使得 LCD 写显示数据操作结构化,整体化。 将 LCD显存 DDRAM 化分为 8 页,每页 8 行 128 列, 128 个数据存储单元。 由软件驱动 LCD 显示屏上 0~ 7 页 的任意页显示:顺序读出指定 Buf 区内图形或汉字的点阵数据,依次将显示数据写入指定页的 128 个数据存储单元。 温湿度记录仪使用 STC12C5410AD 单片机作为 CPU,对其底层编写程序,我们选用了汇编语言作为编程语言,选用 8051 仿真器作为编程环境,以便程序的跟踪调试。 软件将 LCD 显存 DDRAM 化分为 8 页,每页 128 个数据存储单元。 通过 R2控制写入左半屏或右半屏。 先写显示数据到左半屏的 64 个单元;后通过 R2 自减 1,控制写显示数据到右。基于stc12c5410ad单片机的温湿度检_测仪_毕业设计(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。