基于单片机的温度控制系统11

合集下载

(完整版)温度控制系统设计

(完整版)温度控制系统设计

温度控制系统设计目录第一章系统方案论证 (3)1.1总体方案设计 (3)1.2温度传感系统 (3)1.3温度控制系统及系统电源 (4)1.4单片机处理系统(包括数字部分)及温控箱设计 (4)1.5PID 算法原理 (5)第二章重要电路设计 (7)2.1温度采集 (7)2.2温度控制 (7)第三章软件流程 (8)3.1基本控制 (8)3.2PID 控制 (9)3.3时间最优的 PID 控制流程图 (10)第四章系统功能及使用方法 (11)4.1温度控制系统的功能 (11)4.2温度控制系统的使用方法 (11)第五章系统测试及结果分析 (11)5.1 硬件测试 (11)5.2软件调试 (12)第六章进一步讨论 (12)参考文献 (13)致谢........................................... 错误 !未定义书签。

摘要:本文介绍了以单片机为核心的温度控制器的设计,文章结合课题《温度控制系统》,从硬件和软件设计两方面做了较为详尽的阐述。

关键词:温度控制系统PID 控制单片机Abstract: This paper introduces a temperature control system that is based on the single-chip microcomputer.The hard ware compositionand software design are descried indetail combined with the projectComtrol System of Temperature.PID control Keywords: Control system of temperatureSingle-chip Microcomputer引言:温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。

基于51单片机的温湿度DHT11采集(word文档良心出品)

基于51单片机的温湿度DHT11采集(word文档良心出品)

一.设计目的温湿度控制系统早己经成为当今社会研究的热门领域之一,同时温湿度也是现今工农业生产生活中必须要首先考虑的崑要因素之一。

因此现今社会生产生活中就迫切需要一种价格便宜、容易操作而且精确度高的温湿度控制系统。

本系统设计就是利用AT89C52单片机对温湿度参最进行•检测进而实现对温湿度参量的控制。

本系统设计通过使用AT89C52单片机、DHT11传感器模块、LCD 1602 液晶显示屏模块以及LED闪烁和蜂鸣器报警模块。

简单的系统设计就可以基本上满足本系统设计的系统设计耍求。

DHTU数字温湿度传感器负责把采集到的温湿度信号传送给AT89C52单片机。

温湿度经过AT89C52单•片机处理,然后AT89C52准确地把温湿度信号发送到LCD1602液晶显示屏模块, 温湿度数据就可以准确地显示到LCD1602液晶屏上面,同时我们可以分别对温度和湿度设置上下限,越限LED闪烁和蜂鸣器报警模块。

二.设计要求和方案选择・LCD1602能够实时、准确的显示AT89C52采样温度值和湿度值,显示设定报警的温度和风扇的状态。

・DHT11采集温度及湿度值,AT89C52能够将DHT11输送过來的采集信息,准确的判断标准值与设定值之间的差异,及吋的启动报警装置(LED闪烁和蜂鸣器)进行报警。

•根据采集温湿度的数据进行判断,控制继电器进行风扇的开闭传感器选择方案•方案一:利用两个传感器分别检测温度和湿度值,温度检测模块选用DS18B20温度传恋器(+-0.5°C)o湿度检测模块选用HS1101电容式湿度传感器(+-5%RH) o这两款传感器都是我们大学实践电子设计中非常常见和常用的传感器。

•方案二:检测温湿度数值选用DHT11传感器作为系统设计的温湿度检测模块。

DHT11传感器能够同时对温度和湿度数值进行检测,而且其精确度能过完全满足本课程设计的精度要求。

湿度、温度测量误差:+-5%> +-2度•经过上述分析,方案一虽然精度更精确。

基于单片机的温湿度监测系统设计

基于单片机的温湿度监测系统设计

基于单片机的温湿度监测系统设计一、引言在现代生活和工业生产中,对环境温湿度的准确监测具有重要意义。

温湿度的变化可能会影响到产品质量、设备运行以及人们的生活舒适度。

因此,设计一个高效、准确且可靠的温湿度监测系统至关重要。

本设计基于单片机,旨在实现对环境温湿度的实时监测和数据处理。

二、系统总体设计方案(一)系统功能需求本系统需要实现以下功能:1、实时采集环境温湿度数据。

2、对采集到的数据进行处理和分析。

3、将温湿度数据显示在液晶显示屏上。

4、具备数据存储功能,以便后续查询和分析。

5、当温湿度超出设定范围时,能够发出报警信号。

(二)系统总体架构本系统主要由传感器模块、单片机控制模块、显示模块、存储模块和报警模块组成。

传感器模块负责采集温湿度数据,并将其转换为电信号传输给单片机。

单片机对接收的数据进行处理和分析,然后将结果发送给显示模块进行显示,同时将数据存储到存储模块中。

当温湿度超出设定范围时,单片机控制报警模块发出报警信号。

三、硬件设计(一)传感器选择选用 DHT11 数字温湿度传感器,它是一款含有已校准数字信号输出的温湿度复合传感器。

具有体积小、功耗低、响应速度快、性价比高等优点,能够满足本系统的设计要求。

(二)单片机控制模块选择 STC89C52 单片机作为控制核心。

它具有丰富的 I/O 口资源、较高的处理速度和稳定性,能够有效地处理和控制整个系统的运行。

(三)显示模块采用液晶显示屏 1602,它能够清晰地显示温湿度数据和相关信息。

(四)存储模块选用 EEPROM 芯片 AT24C02 作为存储模块,用于存储温湿度数据,方便后续查询和分析。

(五)报警模块使用蜂鸣器作为报警装置,当温湿度超出设定范围时,单片机控制蜂鸣器发出报警声音。

四、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机内部资源的初始化、传感器的初始化、显示模块的初始化等。

然后,系统进入循环,不断读取传感器采集到的温湿度数据,并进行处理和分析。

单片机温度控制原理

单片机温度控制原理

单片机温度控制原理
单片机温度控制原理主要是通过传感器检测环境温度,然后将温度信息传输给单片机。

单片机根据事先设定的温度范围,判断当前温度是否超过设定的阈值。

如果超过阈值,单片机会通过控制器来调节温度,如开启或关闭冷却设备或加热设备。

具体的工作过程如下:
1. 传感器监测环境温度:单片机系统中的温度传感器负责检测环境温度。

常见的温度传感器有热敏电阻、温度敏感型电容等。

2. 温度传感器输出信号:温度传感器将检测到的温度转换为电信号,输出给单片机。

3. 单片机获取温度数据:单片机通过模拟输入通道或数字输入通道接收温度传感器输出的信号,将其转化为数字信号。

4. 判断温度是否超过阈值:单片机通过读取温度数据,并与预设的设定温度阈值进行比较,判断当前温度是否超过设定的阈值。

5. 控制温度设备:如果当前温度超过设定阈值,单片机将根据需要控制冷却或加热设备的工作状态。

通过控制输出通道给设备发送控制信号,实现温度的调节。

例如,可以通过开关控制电风扇的启停或者控制继电器来开启或关闭加热元件。

6. 监测温度变化:单片机继续周期性地监测温度变化,如果温度还未达到设定值,将继续控制温度设备的工作状态,直到温
度达到设定阈值。

通过以上的步骤,单片机可以实现对环境温度的监测和调控,从而实现温度控制的要求。

基于单片机的室内温湿度检测系统的设计

基于单片机的室内温湿度检测系统的设计

基于单片机的室内温湿度检测系统的设计
一、系统简介
本系统基于单片机,能够实时检测室内的温度和湿度,显示在
液晶屏幕上,并可通过串口输出到PC端进行进一步数据处理和存储。

该系统适用于家庭、办公室和实验室等场所的温湿度检测。

二、硬件设计
系统采用了DHT11数字温湿度传感器来实时检测室内温度和湿度,采用STC89C52单片机作为控制器,通过LCD1602液晶屏幕显示
温湿度信息,并通过串口与PC进行数据通信。

三、软件设计
1、采集数据
系统通过DHT11数字温湿度传感器采集室内的温度和湿度数据,通过单片机IO口与DHT11传感器进行通信。

采集到的数据通过计算
得到实际温湿度值,并通过串口发送给PC端进行进一步处理。

2、显示数据
系统将采集到的室内温湿度数据通过LCD1602液晶屏幕进行显示,可以实时观察室内温湿度值。

3、通信数据
系统可以通过串口与PC进行数据通信,将数据发送到PC端进
行存储和进一步数据处理。

四、系统优化
为了提高系统的稳定性和精度,需要进行优化,包括以下几点:
1、添加温湿度校准功能,校准传感器的测量误差。

2、添加系统自检功能,确保系统正常工作。

3、系统可以添加温湿度报警功能,当温湿度超过设定阈值时,系统会自动发送报警信息给PC端。

以上是基于单片机的室内温湿度检测系统的设计。

智能温度控制器DWS—11DX—3W说明书

智能温度控制器DWS—11DX—3W说明书

智能温度控制器DWS—11DX—3W说明书简介:DWS是由美国的一家公司开发的一种温度控制器,采用了德国 NVH材料,精度高,温度精度高。

可实现对工业中温度的精确控制。

具有体积小、价格便宜、操作简单等优点产品特点:DWS智能控制器在国外已有很多年的历史,但是我国在 DWS行业中还没有形成一个完整的体系。

它是由单片机+控制器组成,可以实现温度控制的一体化控制模式,同时可以结合 PID调节技术对温度进行精确调节和实时监控,是一款多功能、智能化、多功能的控温控制器,并且通过自适应微处理器计算出工作速度非常快。

其具有智能显示、定时工作等特点和独特的温控策略技术能够使测量精度保持在较高水平。

支持多台机器设备之间互联互通以及用户之间相互控制功能。

1、支持多种温控策略,温度设置采用自适应程序对温度进行精确调节。

在一个周期内(含非工作周期),每一组被测温度值为一个单位。

每个周期结束时,被测温度值必须小于设定值。

如果此时温度值高于设定数值,则系统自动启动循环升温程序当温度升到设定区间内时,则开始循环升温到设定位置的时间间隔。

"定时"设定时间后,立即开始循环升温程序。

循环持续时间以“分钟”为单位。

以“秒”为单位,直至达到设定温度为止。

定时定时的结束后,根据该周期内的数据分析总结出在某一特定时间段内被测曲线是否符合期望的温度条件。

2、提供有记忆功能,通过设置参数来调节温度可以通过添加外部的设置来设定温度,并且在初始化时可以删除初始化设置。

该设置过程包含:·初始化:参数被设定完毕后,将参数直接发送给控制器,并将其保存到一个名为MBDFA2100的文件中;·设置:显示参数;·选择:可在初始化阶段就选择出需要的参数;·读数:支持1个1档和5个2档;·显示频率:可以设定500次/秒;·读数:支持3种读数方式:最长读数;5种最短读数;如果不设置参数会直接被停止;如果设置参数会提示当前输入参数是“1”还是“0”;如果设置参数会提示当前输入参数是“0”还是“1”;并且该提示还会根据实际情况显示在屏幕内;如果需要设置参数时,需要先按下按钮,然后再按一下按钮才能进行;如果不需要设置参数时也可以不直接进行更改,而是把这些参数存储卡中;如果需要选择参数时要先点击一下按钮,然后再按照设置参数进行数值处理;如果选择“1”和“0”则需要保存到相应文件中;选择“1”和“0”则可以修改显示频率和读数精度等;对于修改后可以再重新插入到这个文件中;如果需要修改参数可以按提示选择是否重新插到文件中;如果需要添加参数建议使用 USB线来连接主机;如果需要修改参数建议使用计算机管理软件进行修改。

基于51单片机的温度检测系统_单片机C语言课题设计报告

基于51单片机的温度检测系统_单片机C语言课题设计报告

单片机C语言课题设计报告设计题目:温度检测电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来1摘要本课题以51单片机为核心实现智能化温度测量。

利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,利用单总线和单片机交换数据,最终单片机将信号转换成LCD 可以识别的信息显示输出。

基于STC90C516RD+STC90C516RD+的单片机的智能温度检测系统,的单片机的智能温度检测系统,设计采用18B20温度传感器,其分辨率可编程设计。

本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。

设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,位半,而温度测量范围为而温度测量范围为而温度测量范围为-55-55-55℃~℃~℃~+125+125+125℃,℃,则其分辨力为0.06250.0625℃。

℃。

设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息,和过温警告信息,传感器异常信息设。

传感器异常信息设。

传感器异常信息设。

计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,当温度超过当温度超过设定值时播放《卡农》,当传感器异常时播放嘟嘟音。

单片机C 语言课题设计报告语言课题设计报告电动世界,气定乾坤2目录一、设计功能一、设计功能................................. ................................. 3 二、系统设计二、系统设计................................. .................................3 三、器件选择三、器件选择................................. .................................3 3.1温度信号采集模块 (3)3.1.1 DS18B20 3.1.1 DS18B20 数字式温度传感器数字式温度传感器..................... 4 3.1.2 DS18B20特性 .................................. 4 3.1.3 DS18B20结构 .................................. 5 3.1.4 DS18B20测温原理 .............................. 6 3.1.5 DS18B20的读写功能 ............................ 6 3.2 3.2 液晶显示器液晶显示器1602LCD................................. 9 3.2.1引脚功能说明 ................................. 10 3.2.2 1602LCD 的指令说明及时序 ..................... 10 3.2.3 1602LCD 的一般初始化过程 (10)四、软件设计四、软件设计................................ ................................11 4.1 1602LCD 程序设计流程图 ........................... 11 4.2 DS18B20程序设计流程图 ............................ 12 4.3 4.3 主程序设计流程图主程序设计流程图................................. 13 五、设计总结五、设计总结................................. ................................. 2 六、参考文献六、参考文献................................. ................................. 2 七、硬件原理图及仿真七、硬件原理图及仿真......................... .........................3 7.1系统硬件原理图 ..................................... 3 7.2开机滚动显示界面 ................................... 4 7.3临界温度设置界面 ................................... 4 7.4传感器异常警告界面 (4)电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来3温度温度DS18B20 LCD 显示显示过温函数功能模块能模块传感器异常函数功能模块数功能模块D0D1D2D3D4D5D6D7XT XTAL2AL218XT XTAL1AL119ALE 30EA31PSEN29RST 9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C51X1CRYST CRYSTAL ALC122pFC222pFGNDR110kC31uFVCCGND234567891RP1RESPACK-8VCC0.0DQ 2VCC 3GND 1U2DS18B20R24.7K LCD1LM016LLS2SOUNDERMUC八、程序清单八、程序清单................................. .................................5 一、设计功能·由单片机、温度传感器以及液晶显示器等构成高精度温度监测系统。

单片机原理与应用实验报告——温度测量显示及设定

单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。

1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。

通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。

开发板上的指示灯D11由RB2,低电平亮,高电平灭。

单片机控制DHT11传感器的课程设计报告

单片机控制DHT11传感器的课程设计报告

大连海事大学自动化课程设计基于单片机的温湿度检测控制系统2009 届自动化学号 **********学生姓名指导教师目录第1章总体设计概述 (1)1.1课题的背景和意义 (1)1.2系统实现的主要功能 (1)1.3系统的工作原理简介 (1)1.4总体设计简介 (2)1.4.1总体设计框图 (2)1.4.2 总体设计及工作进程 (2)第2章系统硬件设计 (3)2.1主控模块设计 (3)2.2DHT11传感器模块设计 (3)2.2.1 DHT11传感器简介 (3)2.2.2 DHT11传感器模块电路设计 (6)2.31602液晶显示模块设计 (6)2.3.1 1602液晶显示屏简介 (6)2.3.2 1602液晶显示模块 (7)2.4阈值设置模块 (8)2.5报警模块 (8)第3章系统软件设计 (9)3.11602液晶显示模块程序设计 (9)3.2传感器模块程序设计 (10)第4章系统分析与调试 (12)4.1程序下载软件说明 (12)4.2所遇问题及解决办法 (12)4.2.1硬件问题及解决方法 (12)4.2.2软件所遇问题及解决方法 (13)第5章结论与展望 (14)附录 (15)附录A硬件原理图 (15)附录B最终实物图及简介 (15)附录C程序清单 (16)第1章总体设计概述1.1 课题的背景和意义温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。

并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。

而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了。

8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实力也很多。

使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握,性价比高。

基于51单片机温度报警器的设计

基于51单片机温度报警器的设计

目录摘要 (2)第一章绪论 (4)1.1 系统背景 (4)1.2 温度控制系统设计的意义 (5)1.3 温度控制系统完成的功能 (5)第二章系统方案设计 (6)2.1 方案一 (6)2.2 方案二 (6)2.3 方案论证 (7)第三章硬件电路设计 (8)3.1系统总体设计 (8)3.2 各部分硬件电路设计 (9)3.2.1时钟电路设计 (9)3.2.2系统复位电路 (10)3.2.3报警与控制电路设计 (11)3.2.4 LED显示电路设计 (12)3.2.4温度检测电路设计 (14)3.2.5按键电路设计 (16)第四章软件设计 (17)4.1 主程序方案 (17)4.2 各个模块子程序设计 (20)4.2.1温度采集程序 (20)4.2.2数码管显示模块 (23)4.2.3温度处理程序 (24)第五章系统调试 (25)5.1测试环境及工具 (25)5.2测试方法 (25)5.3测试结果分析 (26)结论 (26)致谢 (26)参考文献 (27)附录一:系统原理图 (29)附录二:程序代码 (30)摘要随着现代信息技术的飞速发展,在生产中温度的准确测量是一个比较困难的事情从最初的酒精、水银温度计到现在的数字化、集成化的温度检测系统。

可见传感器的发展是飞快的。

它快速的发展必将带来新一轮的工业化的革命和社会发展的飞跃。

本文从硬软件两个方面介绍了基于AT89S52单片机温度自动检测系统的设计。

系统硬件由控制电路、温度采集电路、键盘和LED显示电路组成。

软件设计从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。

最终通过DS18B20采集温度并显示出来,由此对周围环境的温度进行有效检测与报警。

基本上满足了温度检测与报警的要求,具有超调量小,采样值与设定值基本一致,操作简单等优点。

本设计创新点在于采用数字式温度传感器DS18B20 作为感温元件, 占用单片机引脚少, 因而可以利用空余引脚通过软件模拟和温度显示。

毕业论文-基于51单片机的温湿度检测控制系统

毕业论文-基于51单片机的温湿度检测控制系统

毕业论文-基于51单片机的温湿度检测控制系统摘要本次设计是采用MSC-51系列单片机中的AT89S51和DHT11构成的低成本的温湿度的检测控制系统。

单片机AT89S51是一款低消耗、高性能的CMOS8位单片机,由于它强大的功能和低价位,因此在很多领域都是用它。

DHT11温湿度传感器是一款含有已校准数字输出的温湿度复合传感器,传感器包括一个电阻式感湿原件和一个NTC测温元件,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

设计主要包括硬件电路的设计和系统软件的设计。

硬件电路主要包括单片机、温湿度传感器、显示模块、报警器以及控制设备等5部分。

其中由DHT11温湿度传感器及1602字符型液晶模块构成系统显示模块;测温湿度控制电路由温湿度传感器和预设温度值比较报警电路组成;用户根据需要预先输入预设值,当实际测量的温湿度不符合预设的温湿度标准时,发出报警信号(蜂鸣器蜂鸣),启动相应控制。

软件部分包括了主程序、显示子程序、测温湿度子程序。

关键词:AT89S51;DHT11;温湿度传感器AbstractMicrocontroller AT89S51 is a low consumption, high performance CMOS8 bit microcontroller.Because of its powerful features and low price, so it is used in many areas.DHT11 temperature and humidity sensor is a temperature and humidity combined sensor contains a calibrated digital output, the sensor consists of a resistor in the original sense of wet and a NTC temperature measurement devices.The product has many advantage,such as excellent quality, fast response, strong anti-jamming capability . This design is fromed by the AT89S51 in MSC-51 Series and DHT11 constitute which is a low-cost temperature and humidity measurement and control system. The design includes the design of hardware circuit design and system software.The hardware has Five modules.They are a microcontroller, temperature and humidity sensors, display module, alarm and control equipment. The 1602-character LCD module constitute the system display module.The temperature and humidity control circuit by the temperature and humidity sensors and preset temperature alarm circuit.According to the need of pre-enter the default value, when the actual measurement of the temperature humidity does not conform the preset temperature and humidity standards, send the alarm signal (buzzer will beep), and start the corresponding control.The software part includes the main program, the display routines, temperature and humidity subroutine.Key words:Temperature and humidity measurement;Temperature and humidity control;AT89S51 ;DHT11前言1.1本文研究的背景及意义粮库已经被广泛的运用,是存储粮食的一个重要方式。

单片机 温控

单片机 温控
5. 用户界面:可以通过LCD显示屏、按键或串口等方式与用户进行交互,设置温度设定值 、显示当前温度和控制状态等信息。
需要根据具体的单片机型号和开发环境来选择相应的编程语言和开发工具,如C语言和 KeБайду номын сангаасl、Arduino IDE等。同时,还需要根据具体的硬件和传感器接口进行相应的配置和编程。
以上是一个基本的温控系统的实现步骤,具体的实现方式和细节可能会因应用场景和需求 的不同而有所差异。
单片机 温控
在单片机中实现温控功能,通常需要以下步骤:
1. 传感器读取温度:连接温度传感器(如LM35或DS18B20)到单片机的GPIO引脚上, 通过相应的接口(如ADC或串口)读取传感器的温度值。
2. 温度控制算法:根据读取到的温度值,使用控制算法(如PID控制)来计算控制信号。 控制算法的目标是使温度保持在设定值附近。
3. 控制输出:根据控制信号,通过相应的输出接口(如PWM、DAC或GPIO)控制温度 调节装置(如加热器或风扇)的工作状态。根据控制算法的输出,调整控制信号的幅度或频 率,以达到温度控制的目标。
单片机 温控
4. 反馈调整:通过反馈机制,实时监测温度变化,并根据实际温度与设定温度之间的差异 ,调整控制算法的参数或输出信号,使温度保持稳定。

基于51单片机的DHT11温湿度传感器

基于51单片机的DHT11温湿度传感器
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Delay_10us()//进入函数3us
{
uchar i;//每条语句1us
i--;
i--;
i--;
i--;
i--;
i--;
}
void display(uchar th,uchar tl)
{
uchar ih=0,il=0,jh=0,jl=0,kh=0,kl=0;
{
flag=2;
while((!dth)&&(flag++)); //等待拉高
//Delay_10us();
//Delay_10us();
//Delay_10us();
j=3;while(j--);//延时30us
temp=0;
if(dth==1)temp=1;
flag=2;
while(dth&&(flag++));//等待拉低
//if(flag==1)break;
cdata<<=1;
cdata=cdata|temp;
}
return cdata;
}
void getdth()
{
uchar i;
dth=0;
delayms(18);//18ms
dth=1;
//Delay_10us();
//Delay_10us();
//Delay_10us();
//Delay_10us();
i=4;while(i--);//延时40us
dth=1;
if(dth!=1)//dth11响应

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码

基于51单片机的DHT11温湿度监测+液晶LCD1602显示程序源代码/***************DHT11温湿度监测+液晶LCD1602显示程序源代码******************单片机型号:STC15W4K56S4,内部晶振:22.1184M。

功能:DHT11温湿度监测+液晶LCD1602显示。

操作说明:通过温湿度传感器DHT11监测温湿度数值,并将温湿度数值显示在液晶LCD1602上。

**************************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙sbit LCD_D0 = P0^0; //LCD_D0对应P0.0sbit LCD_D1 = P0^1; //LCD_D1对应P0.1sbit LCD_D2 = P0^2; //LCD_D2对应P0.2sbit LCD_D3 = P0^3; //LCD_D3对应P0.3sbit LCD_D4 = P0^4; //LCD_D4对应P0.4sbit LCD_D5 = P0^5; //LCD_D5对应P0.5sbit LCD_D6 = P0^6; //LCD_D6对应P0.6sbit LCD_D7 = P0^7; //LCD_D7对应P0.7sbit LCD_RS = P1^0; //LCD_RS对应P1.0sbit LCD_RW = P1^1; //LCD_RW对应P1.1sbit LCD_EN = P3^4; //LCD_EN对应P3.4sbit DHT11_PIN = P4^0; //DHT11管脚对应P4.0void delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //5Ms延时函数void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(void); //LCD初始化void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);//LCD显示一个字符void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //LCD显示一个字符串void DHT11_Init(void); //初始化DHT11void DHT11_Delay(unsigned int j); //延时函数,用于DHT11 void DHT11_Delay_10us(void); //延时函数,用于DHT11 void COM(void);void RH(unsigned char *temp,unsigned char *humi);void DHT11_Display(void);unsigned char code welcome[] = {"DHT 11"}; //LCD显示内容DHT 11 unsigned char code Dht11[] = {"T: H: "}; //LCD显示内容T: H: unsigned char code Space[] = {" "};//LCD显示内容空白unsigned char U8FLAG,k;unsigned char U8count,U8temp;unsigned char U8T_data_H_temp,U8T_data_L_temp;unsigned char U8RH_data_H_temp,U8RH_data_L_temp;unsigned char U8checkdata_temp;unsigned char U8comdata;unsigned char temperature;unsigned char humidity;unsigned char disbuff_T[4]={0,0,0,0};unsigned char disbuff_H[4]={0,0,0,0};void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i = 3;while(i--) delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--){delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P0M1 = P3M1&0x00;P0M0 = P3M0&0x00;P1M1 = P3M1&0xfc;P1M0 = P3M0&0xfc;P3M1 = P4M1&0xef;P3M0 = P4M0&0xef;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 0; //LCD管脚E设置成低电平LCD_EN = 1; //LCD管脚E设置成高电平while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 0; //LCD管脚RS设置成低电平LCD_RW = 0; //LCD管脚RW设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时P0 = WCLCD; //将数据送入P0口,即写入指令或地址 _nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_RS = 1; //LCD管脚RS设置成高电平LCD_RW = 0; //LCD管脚RW设置成低电平P0 = WDLCD; //将数据送入P0口_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 1; //E置高电平_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时_nop_(); //空操作,延时LCD_EN = 0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}void LCDInit(void) //LCD初始化{WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(DData); //发送数据}void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}void DHT11_Init(void) //初始化DHT11 {P4M1 = P4M1&0xfe;P4M0 = P4M0&0xfe;}void DHT11_Delay(unsigned int j){unsigned char i;for(;j>0;j--){for(i=0;i<250;i++);}}void DHT11_Delay_10us(void){unsigned char i;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;i--;}void COM(void){unsigned char i;for(i=0;i<8;i++){U8FLAG=2;while((!DHT11_PIN)&&U8FLAG++);DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();U8temp=0;if(DHT11_PIN)U8temp=1;U8FLAG=2;while((DHT11_PIN)&&U8FLAG++); //超时则跳出for循环if(U8FLAG==1)break;//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1U8comdata<<=1;U8comdata|=U8temp;}}void RH(unsigned char *temp,unsigned char *humi){DHT11_PIN = 0;DHT11_Delay(180);DHT11_PIN = 1; //总线由上拉电阻拉高主机延时20us DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us();DHT11_Delay_10us(); //主机设为输入判断从机响应信号DHT11_PIN = 1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!DHT11_PIN){U8FLAG=2;//判断从机是否发出 80us 的低电平响应信号是否结束while((!DHT11_PIN)&&U8FLAG++);U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态while((DHT11_PIN)&&U8FLAG++); //数据接收状态COM();U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DHT11_PIN=1; //数据校验U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp){*temp = U8T_data_H_temp;*humi = U8RH_data_H_temp;}}}void DHT11_Display(void){RH(&temperature,&humidity);disbuff_T[2]=temperature/100+0x30;disbuff_T[1]=temperature/10%10+0x30;disbuff_T[0]=temperature%10+0x30;disbuff_H[2]=humidity/100+0x30;disbuff_H[1]=humidity/10%10+0x30;disbuff_H[0]=humidity%10+0x30;DisplayOneChar(2,1,disbuff_T[2]);delay_ms(10); //延时DisplayOneChar(3,1,disbuff_T[1]);delay_ms(10); //延时DisplayOneChar(4,1,disbuff_T[0]);delay_ms(10); //延时DisplayOneChar(8,1,disbuff_H[2]);delay_ms(10); //延时DisplayOneChar(9,1,disbuff_H[1]);delay_ms(10); //延时DisplayOneChar(10,1,disbuff_H[0]);delay_ms(10); //延时}void main(void){GPIO_1602_Configuration(); //LCD1602液晶IO口初始化delay_ms(10); //延时LCDInit(); //LCD1602初始化delay_ms(10); //延时DHT11_Init(); //初始化DHT11DisplayListChar(5,0,welcome); //LCD1602显示Hello My Friends delay_ms(10); //延时while(1){DisplayListChar(0,1,Space); //LCD1602显示P: K1delay_ms(10); //延时DisplayListChar(0,1,Dht11); //LCD1602显示delay_ms(10); //延时DHT11_Display();delay_ms(200); //延时}}程序源代码是编译通过的DHT11温湿度监测模块接口电路图该程序的实际运行效果。

单片机温控程序

单片机温控程序

单片机温控程序单片机温控程序是一种用于控制温度的软件程序,它通过对温度传感器的读取和对加热或冷却装置的控制,实现对温度的精确调控。

下面我将以人类的视角来描述一下单片机温控程序的工作原理和应用场景。

让我们想象一下一个寒冷的冬天。

当我们进入室内时,我们希望室内的温度能够舒适,不过于寒冷也不过于炎热。

这时,单片机温控程序就能发挥作用了。

单片机温控程序中的第一步是读取室内的温度。

单片机内部有一个温度传感器,可以实时地感知到室内的温度。

通过读取传感器的数值,单片机可以获得当前的室温。

接下来,单片机将读取到的温度值与设定的目标温度进行比较。

如果当前温度高于目标温度,说明室内温度过高,需要降温。

此时,单片机会发送控制信号给加热装置,让其停止加热。

如果当前温度低于目标温度,说明室内温度过低,需要加热。

单片机会发送控制信号给加热装置,让其开始加热。

通过不断地读取温度、比较温度和发送控制信号的过程,单片机温控程序可以实现对室内温度的精确调控。

当室内温度接近目标温度时,单片机会减小控制信号的幅度,以避免温度的过度波动。

当室内温度达到目标温度时,单片机会停止发送控制信号,维持室内温度的稳定。

单片机温控程序广泛应用于各种场景。

例如,它可以用于家庭的中央空调系统,保持室内温度的舒适;它也可以用于电子设备的散热系统,防止设备过热;此外,它还可以用于实验室的恒温箱、温室的温度控制等等。

通过单片机温控程序,我们可以实现对温度的精确调控,提高室内的舒适度,同时还可以节省能源,减少对环境的影响。

无论是在家庭生活中,还是在工业生产中,单片机温控程序都发挥着重要的作用,使我们的生活更加便利和舒适。

基于单片机的温湿度控制系统设计

基于单片机的温湿度控制系统设计

计算机控制设计课程设计报告班级B电气092姓名陈文雄学号**********课程设计题目:基于单片机的花房温湿度控制系统设计花卉的生长要在一定的环境中进行,其在生长过程中受到环境中很多因素的影响,其中对花卉生长影响最大的是环境中的温度和湿度。

环境中昼夜温度和湿度变化很大,不利于花卉的生长。

因此必须对环境的温度和湿度进行监测和控制,使其适合花卉的生长。

本课程设计就是要求利用基于单片机来设计一个参数精度高,控制操作方便的花房温湿度控制系统。

以前种植植被一般都用温室栽培,为了充分的利用好温室栽培这一高效技术,就必需有一套科学的,先进的管理方法,用以对不同种类植被生长的各个时期所需的温度及湿度等进行实时的监控。

温湿度控制对于单片机的应用具有一定的实际意义,它代表了一类自动控制的方法。

而且其应用十分广泛。

技术参数和设计任务:1、显示部分的第1到4位显示出温度值,分辨率为0.01度,2位小数,第5、6位显示出湿度值,分辨率为1%H;2、设置湿度报警值,按1度增加,测量湿度到了设定值后,湿度指示LED灯关掉,高于设定湿度5度时报警LED灯打开,断电后能保存温度设定值;3、温度低于设定值时,输出加热控制信号;湿度大于设定值时,输出降湿控制信号;4、利用89C51单片机实现对温度和湿度的控制,以实现温湿度的采集和控制;5、完成SHT11温湿度传感器模块电路的设计;6、完成温湿度调节系统主要控制电路的设计;7、完成LED数码管显示模块电路的设计;8、完成声光报警模块电路的设计;9、完成按键模块电路的设计。

一、系统概述1、系统原理介绍该系统利用STC89C51单片机的软、硬件资源,辅以相应的测量电路和SHT11数字式集成温湿度传感器等智能仪器,能实现多任务、多通道的检测和输出。

它具有测量范围广、测量精度高等特点。

温湿度控制系统上电工作后,用户首先通过键盘输入温度及湿度的初值,单片机系统将用户设置的初值保存在X25045芯片中。

(完整)基于单片机的温湿度控制系统

(完整)基于单片机的温湿度控制系统

\基于单片机的温湿度控制系统一、研究背景温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。

并且随着人们生活水平的提高,人们对自己的生存环境越来越关注.而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了.随着科技的飞速发展和普及,高性能设备越来越多,各行各业对温湿度的要求也越来越高。

传统的温湿度检测模式是以人为基础,依靠人工轮流值班,人工巡回查看等方式来测量和记录环境状况信息。

在这种模式下,不仅效率低不利于人才资源的充分利用,而且缺乏科学性,许多重大事故都是由人为因素造成的,人工维护缺乏完整的管理系统。

而问世监控系统就可以解决这样人才资源浪费,管理不及时的问题,这是由于它的智能化设计所决定的。

故本次设计对于类似项目还具有普遍意义。

二、国内外研究现状(1)温度传感器智能温度传感器(亦称数字温度传感器)在20世纪90年代中期问世。

它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。

目前,国际上已开发出多种智能温度传感器系列产品.智能温度传感器内部包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。

有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。

智能温度传感器能输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,温度计也越来越智能化。

(2)湿度传感器湿度传感器产品及湿度测量属于90年代兴起的行业.湿度传感器主要分为电阻式和电容式两种,产品的基本形式都是在基片上涂覆感湿材料形成感湿膜。

空气中的水蒸汽吸附在感湿材料上后,元件的阻抗、介质常数发生很大的变化,从而制成湿敏元件。

近年来,国内外在湿度传感器研发领域取得了较大的发展。

湿敏传感器正从简单的湿敏元件向集成化、智能化、多参数检测的方向迅速发展。

STM32单片机DHT11数字温湿度监测

STM32单片机DHT11数字温湿度监测

STM32单片机DHT11数字温湿度监测OLED液晶接口电路图DHT11传感器接口电路图STM32单片机DHT11数字温湿度监测程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚PB12 #define LED_GREEN PBout(13) //绿色发光二极管控制管脚PB13 #define LED_YELLOW PBout(14) //黄色发光二极管控制管脚PB14 #define LED_BLUE PBout(15) //蓝色发光二极管控制管脚PB15 #define DHT11_IO_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;}#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;}#define DHT11_DQ_OUT PAout(0) //数据端口PA0#define DHT11_DQ_IN PAin(0) //数据端口PA0#define OLED_RST_Clr() PCout(13)=0 //RST#define OLED_RST_Set() PCout(13)=1 //RST#define OLED_RS_Clr() PBout(4)=0 //DC#define OLED_RS_Set() PBout(4)=1 //DC#define OLED_SCLK_Clr() PCout(15)=0 //SCL#define OLED_SCLK_Set() PCout(15)=1 //SCL#define OLED_SDIN_Clr() PCout(14)=0 //SDA#define OLED_SDIN_Set() PCout(14)=1 //SDA#define OLED_CMD 0 //写命令#define OLED_DATA 1 //写数据void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void Led_Init(void); //发光二极管控制管脚初始化void Red_Led_Light(void); //点亮红色发光二极管void Green_Led_Light(void); //点亮绿色发光二极管void Yellow_Led_Light(void); //点亮黄色发光二极管void Blue_Led_Light(void); //点亮蓝色发光二极管void Red_Led_Goout(void); //熄灭红色发光二极管void Green_Led_Goout(void); //熄灭绿色发光二极管void Yellow_Led_Goout(void); //熄灭黄色发光二极管void Blue_Led_Goout(void); //熄灭蓝色发光二极管u8 DHT11_Init(void); //初始化DHT11u8 DHT11_Read_Data(u8 *temp,u8 *humi); //读取温湿度u8 DHT11_Read_Byte(void); //读出一个字节u8 DHT11_Read_Bit(void); //读出一个位u8 DHT11_Check(void); //检测是否存在DHT11void DHT11_Rst(void); //复位DHT11void OLED_WR_Byte(u8 dat,u8 cmd);void OLED_Display_On(void);void OLED_Display_Off(void);void OLED_Refresh_Gram(void);void Oled_Init(void);void OLED_Clear(void);void OLED_DrawPoint(u8 x,u8 y,u8 t);void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode);void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size);void OLED_ShowString(u8 x,u8 y,const u8 *p);void Oled_Show(void);static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数u8 OLED_GRAM[128][8];const unsigned char oled_asc2_1206[95][12]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ {0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/ {0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/ {0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/ {0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/{0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/ {0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/ {0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/ {0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/ {0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/ {0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/ {0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/ {0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/ {0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/ {0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/ {0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/ {0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/ {0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/ {0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/ {0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/ {0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/ {0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/ {0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/ {0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/ {0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/ {0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/ {0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/ {0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/ {0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/ {0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/ {0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/ {0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/ {0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/ {0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/ {0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/ {0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/ {0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/ {0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/ {0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/ {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/{0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/ {0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/ {0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/ {0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/ {0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/ {0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/ {0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/ {0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/ {0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/ {0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/ {0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/ {0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/ {0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/ {0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ {0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/ {0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/ {0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/ {0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/ {0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/ {0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/ {0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/ {0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/ {0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/ {0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/ {0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/ {0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/ {0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/ {0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/ {0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/ {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/ {0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/ {0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/ {0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/ {0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/ {0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/ {0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/ {0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/ {0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/ {0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/ {0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/ {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/ {0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/ };const unsigned char oled_asc2_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/{0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/{0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/{0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/0x00,0x24,0x00,0x00},/*"4",20*/{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88, 0x10,0x70,0x00,0x00},/*"5",21*/{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88, 0x00,0x70,0x00,0x00},/*"6",22*/{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00, 0x10,0x00,0x00,0x00},/*"7",23*/{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44, 0x0E,0x38,0x00,0x00},/*"8",24*/{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88, 0x07,0xF0,0x00,0x00},/*"9",25*/{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00, 0x00,0x00,0x00,0x00},/*":",26*/{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00},/*";",27*/{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08, 0x10,0x04,0x00,0x00},/*"<",28*/{0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20, 0x02,0x20,0x00,0x00},/*"=",29*/{0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40, 0x00,0x80,0x00,0x00},/*">",30*/{0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80, 0x0F,0x00,0x00,0x00},/*"?",31*/{0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28, 0x07,0xD0,0x00,0x00},/*"@",32*/{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4, 0x00,0x1C,0x00,0x04},/*"A",33*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88, 0x00,0x70,0x00,0x00},/*"B",34*/{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08, 0x1C,0x10,0x00,0x00},/*"C",35*/{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08, 0x07,0xF0,0x00,0x00},/*"D",36*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04, 0x08,0x18,0x00,0x00},/*"E",37*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00, 0x08,0x00,0x00,0x00},/*"F",38*/{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78, 0x00,0x40,0x00,0x00},/*"G",39*/{0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84, 0x1F,0xFC,0x10,0x04},/*"H",40*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04, 0x00,0x00,0x00,0x00},/*"I",41*/0x10,0x00,0x00,0x00},/*"J",42*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C, 0x10,0x04,0x00,0x00},/*"K",43*/{0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04, 0x00,0x0C,0x00,0x00},/*"L",44*/{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC, 0x10,0x04,0x00,0x00},/*"M",45*/{0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18, 0x1F,0xFC,0x10,0x00},/*"N",46*/{0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08, 0x07,0xF0,0x00,0x00},/*"O",47*/{0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80, 0x0F,0x00,0x00,0x00},/*"P",48*/{0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A, 0x07,0xF2,0x00,0x00},/*"Q",49*/{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30, 0x0E,0x0C,0x00,0x04},/*"R",50*/{0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44, 0x1C,0x38,0x00,0x00},/*"S",51*/{0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00, 0x18,0x00,0x00,0x00},/*"T",52*/{0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04, 0x1F,0xF8,0x10,0x00},/*"U",53*/{0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80, 0x1C,0x00,0x10,0x00},/*"V",54*/{0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C, 0x1F,0xC0,0x00,0x00},/*"W",55*/{0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34, 0x18,0x0C,0x10,0x04},/*"X",56*/{0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00, 0x10,0x00,0x00,0x00},/*"Y",57*/{0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04, 0x10,0x18,0x00,0x00},/*"Z",58*/{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02, 0x40,0x02,0x00,0x00},/*"[",59*/{0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C, 0x00,0x03,0x00,0x00},/*"\",60*/{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00, 0x00,0x00,0x00,0x00},/*"]",61*/{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00, 0x20,0x00,0x00,0x00},/*"^",62*/{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00,0x01,0x00,0x01},/*"_",63*/0x00,0x00,0x00,0x00},/*"`",64*/{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44, 0x00,0xFC,0x00,0x04},/*"a",65*/{0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88, 0x00,0x70,0x00,0x00},/*"b",66*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04, 0x00,0x88,0x00,0x00},/*"c",67*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08, 0x1F,0xFC,0x00,0x04},/*"d",68*/{0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44, 0x00,0xC8,0x00,0x00},/*"e",69*/{0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04, 0x11,0x00,0x18,0x00},/*"f",70*/{0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9, 0x01,0x06,0x00,0x00},/*"g",71*/{0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04, 0x00,0xFC,0x00,0x04},/*"h",72*/{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04, 0x00,0x00,0x00,0x00},/*"i",73*/{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE, 0x00,0x00,0x00,0x00},/*"j",74*/{0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C, 0x01,0x04,0x00,0x00},/*"k",75*/{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04, 0x00,0x00,0x00,0x00},/*"l",76*/{0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04, 0x01,0x00,0x00,0xFC},/*"m",77*/{0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04, 0x00,0xFC,0x00,0x04},/*"n",78*/{0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04, 0x00,0xF8,0x00,0x00},/*"o",79*/{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88, 0x00,0x70,0x00,0x00},/*"p",80*/{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05, 0x01,0xFF,0x00,0x01},/*"q",81*/{0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00, 0x01,0x80,0x00,0x00},/*"r",82*/{0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24, 0x01,0x98,0x00,0x00},/*"s",83*/{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04, 0x00,0x00,0x00,0x00},/*"t",84*/{0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08, 0x01,0xFC,0x00,0x04},/*"u",85*/0x01,0x80,0x01,0x00},/*"v",86*/{0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/{0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/{0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/{0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/};void delay_init(u8 SYSCLK){SysTick->CTRL&=0xfffffffb; //bit2清空,选择外部时钟 HCLK/8 fac_us=SYSCLK/8;fac_ms=(u16)fac_us*1000;}void delay_ms(u16 nms){u32 temp;SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit) SysTick->VAL =0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void delay_us(u32 nus){u32 temp;SysTick->LOAD=nus*fac_us; //时间加载SysTick->VAL=0x00; //清空计数器SysTick->CTRL=0x01 ; //开始倒数do{temp=SysTick->CTRL;}while(temp&0x01&&!(temp&(1<<16))); //等待时间到达SysTick->CTRL=0x00; //关闭计数器SysTick->VAL =0X00; //清空计数器}void Led_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB接口时钟GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=0X00030000; //PB12推挽输出GPIOB->ODR|=1<<12; //PB12输出高电平GPIOB->CRH&=0XFF0FFFFF;GPIOB->CRH|=0X00300000; //PB13推挽输出GPIOB->ODR|=1<<13; //PB13输出高电平GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=0X03000000; //PB14推挽输出GPIOB->ODR|=1<<14; //PB14输出高电平GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRH|=0X30000000; //PB15推挽输出GPIOB->ODR|=1<<15; //PB15输出高电平}void Red_Led_Light(void){LED_RED=0;}void Red_Led_Goout(void){LED_RED=1;}void Green_Led_Light(void){LED_GREEN=0;}void Green_Led_Goout(void){LED_GREEN=1;}void Yellow_Led_Light(void){LED_YELLOW=0;}void Yellow_Led_Goout(void){LED_YELLOW=1;}void Blue_Led_Light(void){LED_BLUE=0;}void Blue_Led_Goout(void){LED_BLUE=1;}void DHT11_Rst(void){DHT11_IO_OUT(); //SET OUTPUTDHT11_DQ_OUT=0; //拉低DQdelay_ms(20); //拉低至少18msDHT11_DQ_OUT=1; //DQ=1delay_us(30); //主机拉高20~40us}u8 DHT11_Check(void){u8 retry=0;DHT11_IO_IN();while(DHT11_DQ_IN&&retry<100) //DHT11会拉低40~80us {retry++;delay_us(1);};if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100) //DHT11拉低后会再次拉高40~80us {retry++;delay_us(1);};if(retry>=100)return 1;return 0;}u8 DHT11_Read_Bit(void){u8 retry=0;while(DHT11_DQ_IN&&retry<100) //等待变为低电平{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100) //等待变高电平{retry++;delay_us(1);}delay_us(40); //等待40usif(DHT11_DQ_IN)return 1;else return 0;}u8 DHT11_Read_Byte(void){u8 i,dat;dat=0;for(i=0;i<8;i++){dat<<=1;dat|=DHT11_Read_Bit();}return dat;}u8 DHT11_Read_Data(u8 *temp,u8 *humi){u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++){buf[i]=DHT11_Read_Byte();} //读取40位数据if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];} }else return 1;return 0;}u8 DHT11_Init(void){RCC->APB2ENR|=1<<2; //使能PORTA口时钟GPIOA->CRL&=0XFFFFFFF0; //PORTA.11 推挽输出GPIOA->CRL|=0X00000003;GPIOA->ODR|=1<<0; //输出1DHT11_Rst();return DHT11_Check();void OLED_Refresh_Gram(void){u8 i,n;for(i=0;i<8;i++){OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址 for(n=0;n<128;n++){OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);} }}void OLED_WR_Byte(u8 dat,u8 cmd){u8 i;if(cmd){OLED_RS_Set();}else{OLED_RS_Clr();}for(i=0;i<8;i++){OLED_SCLK_Clr();if(dat&0x80){OLED_SDIN_Set();}else{OLED_SDIN_Clr();}OLED_SCLK_Set();dat<<=1;}OLED_RS_Set();}void OLED_Display_On(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X14,OLED_CMD); //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON}void OLED_Display_Off(void){OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF}void OLED_Clear(void){u8 i,n;for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00;OLED_Refresh_Gram(); //更新显示void OLED_DrawPoint(u8 x,u8 y,u8 t){u8 pos,bx,temp=0;if(x>127||y>63)return; //超出范围了.pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;else OLED_GRAM[x][pos]&=~temp;}void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode){u8 temp,t,t1;u8 y0=y;chr=chr-' ';for(t=0;t<size;t++){if(size==12){temp=oled_asc2_1206[chr][t];} //调用1206字体 else{temp=oled_asc2_1608[chr][t];} //调用1608字体 for(t1=0;t1<8;t1++){if(temp&0x80){OLED_DrawPoint(x,y,mode);}else{OLED_DrawPoint(x,y,!mode);}temp<<=1;y++;if((y-y0)==size){y=y0;x++;break;}}}}u32 oled_pow(u8 m,u8 n){u32 result=1;while(n--)result*=m;return result;}void OLED_ShowNumber(u8 x,u8 y,u32 num,u8 len,u8 size){u8 t,temp;u8 enshow=0;for(t=0;t<len;t++){temp=(num/oled_pow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){OLED_ShowChar(x+(size/2)*t,y,' ',size,1);continue;}else{enshow=1;}}OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1);}}void OLED_ShowString(u8 x,u8 y,const u8 *p){#define MAX_CHAR_POSX 122#define MAX_CHAR_POSY 58while(*p!='\0'){if(x>MAX_CHAR_POSX){x=0;y+=16;}if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}OLED_ShowChar(x,y,*p,12,1);x+=8;p++;}}void Oled_Init(void){RCC->APB2ENR|=1<<3; //使能PORTB时钟GPIOB->CRL&=0XFFF0FFFF;GPIOB->CRL|=0X00020000; //PB4 推挽输出RCC->APB2ENR|=1<<4; //使能PORTC时钟RCC->APB2ENR|=1<<0; //使能AFIO时钟GPIOC->CRH&=0X000FFFFF; //PC13,14,15设置成输出 2MHz 推挽输出GPIOC->CRH|=0X22200000;PWR->CR|=1<<8; //取消备份区写保护RCC->BDCR&=0xFFFFFFFE; //外部低俗振荡器关闭 PC14,PC15成为普通IO BKP->CR&=0xFFFFFFFE; //侵入检测TAMPER引脚作为通用IO口使用PWR->CR&=0xFFFFFEFF; //备份区写保护OLED_RST_Clr();delay_ms(100);OLED_RST_Set();OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率OLED_WR_Byte(80,OLED_CMD); //[3:0],分频因子;[7:4],震荡频率OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移OLED_WR_Byte(0X00,OLED_CMD); //默认为0OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式OLED_WR_Byte(0x02,OLED_CMD);//[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;OLED_WR_Byte(0xC0,OLED_CMD);//设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置OLED_WR_Byte(0x81,OLED_CMD); //对比度设置OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率OLED_WR_Byte(0x30,OLED_CMD);//[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;OLED_WR_Byte(0xA4,OLED_CMD);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示 OLED_WR_Byte(0xAF,OLED_CMD); //开启显示OLED_Clear();}void Oled_Show(void){OLED_ShowString(0,0,"****************");OLED_ShowString(22,20,"DHT11--TEST");OLED_ShowString(30,30,"T: 'C");OLED_ShowString(30,40,"H: %");OLED_ShowString(0,50,"****************");OLED_Refresh_Gram();}int main(void){u8 t;u8 temperature;u8 humidity;Stm32_Clock_Init(9); //系统时钟设置delay_init(72); //延时初始化JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口JTAG_Set(SWD_ENABLE); //打开SWD接口Oled_Init();Led_Init(); //LED初始化while(DHT11_Init()) //初始化DHT11{delay_ms(1000);LED_RED = !LED_RED;} //DS0闪烁Oled_Show();while(1){if(t%10==0){DHT11_Read_Data(&temperature,&humidity);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录1引言………………………………………………………2系统总体设计…………………………………………2.1 元器件基本知识……………………………………………2.1.1 单片机 AT89S51…………………………………………2.1.2 模数转换器 ADC0809……………………………………2.1.3 温度传感器 AD590………………………………………2.1.4 数码管LED显示器………………………………………2.2 原理图………………………………………………………2.2.1 原理图……………………………………………………2.2.2 功能………………………………………………………3软件详细设计…………………………………………3.1流程图………………………………………………………3.2原代码………………………………………………………4实验过程中经验及心得………………………………4.1实验过程中出现的问题及解决方法………………………4.2 ADC0809的CLK信号与单片机的经典接法………………参考文献………………………………………………1引言随着社会主义现代化的发展,在科学技术突飞猛进的今天,人工智能起不不可忽视的作用。

尤其是各种智能化的仪器、仪表在农、工业的广泛应用给社会带来了极大的便利。

本文就是一个利用温度来实现简单智能控制的例子。

它完成了从温度的采集、转换、显示以及控制的一系列任务。

由于时间关系,本文并未深入探讨温度的具体实例。

例如根据温度来控制热水器、电风扇等与温度有关的设备。

但是它提供了一个通过温度来控制设备的基本思想和原理。

相信能在实际应用中为我们的生活带来更大的便利。

98年,Prote公司推出了给人全新感觉的Proel98。

Protel98以其出众的自动布线能力获得了业内人士的一直好评。

99年,Protel公司又推出了最新一代的电子线路设计系统——Protel99。

在Protel99中加入了许多全新的特色。

2系统总体设计2.1 元器件基本知识2.1.1 单片机A T89S51a.主要特性●与MCS-51单片机产品兼容● 4K字节在系统可编程Flash存储器● 1000次擦写周期●全静态工作:0Hz—33MHz● 32个可编程I/O口线● 2个16位定时器/计数器● 6个中断源●全双工UART串行通道●低功耗空闲和掉电模式●掉电后中断可唤醒●看门狗定时器●双数据指针●灵活的ISP编程(字或字节模式)● 4.0---5.5V电压工作范围b.内部结构图3-1 是单片机A T89S51的内部结构总框图。

它可以划分为CPU、存储器、并行口、串行口、定时/计数器和中断逻辑几个部分。

● CPU由运算器和控制逻辑构成。

其中包括若干特殊功能寄存器(SFR)● AT89S51时钟有两种方式产生,即内部方式和外部方式。

(如图3-2所示)●AT89S51在物理上有四个存储空间:片内/片外程序存储大路、片内/片外数据存储器。

片内有256B数据存储器RAM和4KB的程序存储器ROM。

除此之外,还可以在片外扩展RAM和ROM,并且和有64KB的寻址范围。

● AT89S51内部有一个可编程的、全双工的串行接口。

它串行收发存储在特殊功能寄存器SFR的串行数据缓冲器SBUF中的数据。

图2-1 AT89S51 内部结构框图●AT89S51共有4个(P0、P1、P2、P3口)8位并行I/O端口,共32个引脚。

P0口双向I/O口,用于分时传送低8位地址和8位数据信号;P1、P2、P3口均为准双向I/O口;其中P2口还用于传送高8位地址信号;P3口每一引脚还具有特殊功能(图3-3),用于特殊信号的输入输出和控制信号。

●AT89S51内部有两个16位可编程定时器/计数器T0、T1。

最大计数值为216-1。

工作方式和定时器或计数器的选择由指令来确定。

图2-2 AT89S51的时钟电路图2-3 P3口引脚的特殊功能●中断系统允许接受5个独立的中断源,即两个外部中断,两个定时器/计数器中断以及一个串行口中断。

c.外部特性(引脚功能)A T89S51芯片有40条引脚,双列直插式封装引脚图如2-4所示:● Vcc(40):电源+5V● Vss(20): 接地● XTAL1(19)和XTAL2(18):使用内部振荡电路时,用来接石英晶体和电容;使用外部时钟时,用来输入时钟脉冲。

●P0口(39—32):双向I/O口,既可作地址/数据总线口用,也可作普通I/O口用。

● P1口(1—8):准双向通用I/O口。

● P2口(21—28):准双向口,既可作地址总线口输出地址高8位,也可作普通I/O 口用。

● P3口(10—17):多用途口,既图3-4 AT89S51引脚图可作普通I/O口,也可按每位定义的第二功能操作。

● ALE/~PROG(30):地址锁存信号输出端。

在访问片外丰储器时,若ALE为有效高电平,则P0口输出地址低8位,可以用ALE信号作外部地址锁存信号。

公式(2—1)f ALE =1/6fOSC,也可作系统中其它芯片的时钟源。

第二功能~PROG是对EPROM编程时的编程脉冲输入端。

●RST/VPD(9):复位信号输入端。

AT89S51接能电源后,在时钟电路作用下,该脚上出现两个机器周期以上的高电平,使内部复位。

第二功能是VPD,即备用电源输入端。

当主电源Vcc发生故障,降低到低电平规定值时,VPD将为RAM提供备用电源,发保证存储在RAM中的信号不丢失。

●~EA/Vpp(31):内部和外部程序存储器选择线。

~EA=0时访问外部ROM 0000H—FFFFH;~EA=1时,地址0000H—0FFFH空间访问内部ROM,地址1000H—FFFFH空间访问外部ROM。

● ~PSEN(29):片外程序存储器选通信号,低电平有效。

2.1.2 模数转换器AD0809a.主要特性● 8路8位A/D转换器,即分辨率8位。

●具有转换起停控制端。

●转换时间为100μs●单个+5V电源供电●模拟输入电压范围0~+5V,不需零点和满刻度校准。

●工作温度范围为-40~+85摄氏度●低功耗,约15mW。

b.内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图3-5所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。

因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。

输入输出与TTL兼容。

图2-5 ADC0809内部结构框图c.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图3-6所示。

下面说明各引脚功能。

●IN0~IN7:8路模拟量输入端。

●2-1~2-8:8位数字量输出端。

●ALE(22):地址锁存允许信号,输入,高电平有效。

●START(6):A/D转换启动信号,输入,高电平有效。

●EOC(7):A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

图2-6 ADC0809引脚图●OE(9):数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

●CLK(10):时钟脉冲输入端。

典型值为640KHZ。

●REF(+)、REF(-):参考电压输入端。

●Vcc(11):电源,+5V。

●GND(13):地。

●ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。

如表2-1所示。

表2-1 ADDA、ADDB、ADDC模拟通道地址码d.ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

2.1.3 温度传感器AD590a.主要特性AD590是美国模拟器件公司生产的单片集成两端感温电流源。

它的主要特性如下:●流过器件的电流(μA)等于器件所处环境的热力学温度(开尔文)度数,即:μA/K 公式(2-2)式中:—流过器件(AD590)的电流,单位为μA;T—热力学温度,单位为K。

● AD590的测温范围为-55℃~+150℃。

●AD590的电源电压范围为4V~30V。

电源电压可在4V~6V范围变化,电流变化1μA,相当于温度变化1K。

AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。

●输出电阻为710MΩ。

●精度高。

AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。

● AD590的输出电流值说明如下:其输出电流是以绝对温度零度(-273℃)为基准,每增加1℃,它会增加1μA输出电流,因此在室温25℃时,其输出电流Iout=(273+25)=298μA。

b.内部结构集成温度传感器实质上是一种半导体集成电路,它是利用晶体管的b-e结压降的不饱和值V BE与热力学温度T和通过发射极电流I的下述关系实现对温度的检测:公式(2-3)式中:K—波尔兹常数;q—电子电荷绝对值。

AD 590....AD590V0....集成温度传感器具有线性好、精度适中、灵敏度高、体积小、使用方便等优点,得到广泛应用。

集成温度传感器的输出形式分为电压输出和电流输出两种。

电压输出型的灵敏度一般为10mV/K ,温度0℃时输出为0,温度25℃时输出2.982V 。

电流输出型的灵敏度一般为1μA/K 。

c.外部特性(引脚功能)● Vcc(0):电源4—30v● GND(1):接地。

图2-7 AD590引脚图d.典型应用电路AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V -30V 检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流 增加1uA图2-8是AD590用于测量热力学 温度的基本应用电路。

因为流过AD590的电流与热力学温度成正比, 当电阻10k Ω时,输出电压V O 随温度的变化为10mV/K 。

图2-8 AD590其本应用电路● Vo 的值为电流I 乘上10K ,以室温25℃而言,输出值为10K×298μA=2.98V ● 测量Vo 时,不可分出任何电流,否则测量值会不准。

由于AD590的增益有偏差,电阻也有误差,因此应对电路进行调整。

表2-2 AD590温度与电流的对应关系表2.1.4 数码管LED显示器a.综合知识●数码显示器有静态和动态显示两种显示方式。

相关文档
最新文档