基于51单片机的数字热敏温度计设计论文正稿.doc

上传人:李司机 文档编号:1091029 上传时间:2022-06-23 格式:DOC 页数:29 大小:290.44KB
返回 下载 相关 举报
基于51单片机的数字热敏温度计设计论文正稿.doc_第1页
第1页 / 共29页
基于51单片机的数字热敏温度计设计论文正稿.doc_第2页
第2页 / 共29页
基于51单片机的数字热敏温度计设计论文正稿.doc_第3页
第3页 / 共29页
基于51单片机的数字热敏温度计设计论文正稿.doc_第4页
第4页 / 共29页
基于51单片机的数字热敏温度计设计论文正稿.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《基于51单片机的数字热敏温度计设计论文正稿.doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字热敏温度计设计论文正稿.doc(29页珍藏版)》请在三一办公上搜索。

1、信息与电气工程学院电子应用系统CDIO二级项目设计说明书 题 目 : _数字热敏温度计_1. 设计目的温度作为一个重要的物理量,是工业生产过程中最普遍、最重要的工艺参数之一,所以温度测量技术和测量仪器的研究是一个重要的课题。随着时代的进步和发展,单片机技术已经伸入到各个领域,基于单片机数字温度计与传统的温度计相比,具有读数方便,测温围广,其输出温度采用数字显示。本次CDIO题目是利用51单片机与热敏电阻设计一个温度采集系统,通过学过的单片机和数字电路与面向对象编程等课程的知识设计。要求的功能是能通过串口将采集的数据在上位机窗口显示,采集的温度达一定的精度。2. 设计正文2.1 整体系统设计思路

2、系统的硬件电路包括微控制器部分(主机),温度检测,人机对话(键盘/显示)三个主要部分。系统结构框图和硬件原理图分别如图1所示。热敏电阻NTCPCF8591 AD采集89C51数据处理LCD1602显示串口通信上位机显示图 1 系统设计结构框图温度检测部分采用传统的热敏电阻,热敏电阻的阻值随环境温度变化而变化,变送器将电阻信号转换成与温度成正比的电压信号,经A/D转换器将其转换为单片机可识别得二进制数字量,单片机主要控制LCD显示器显示正确的温度值,LCD显示器实现显示功能。由于采集NTC热敏电阻的时候需要一个基准,因此我采用了18B20的温度作为基准。它利用了一款新型的温度检测芯片DS18B2

3、0,这个芯片大大简化了温度检测模块的设计,它无需A/D转换,可直接将测得的温度值以二进制形式输出。该基准的原理框图和硬件原理图如图2所示:DS18B20温度采集89C51数据处理提供基准温度LCD1602显示图2 基准系统结构框图DS18B20是美国达拉斯半导体公司生产的新型温度检测器件,它是单片结构,无需外加A/D即可输出数字量,通讯采用单线制,同时该通讯线还可兼作电源线,即具有寄生电源模式。它具有体积小、精度易保证、无需标定等特点,特别适合与单片机合用构成智能温度检测与控制系统。2.2 系统各模块介绍2.2.1 AT89C51芯片介绍AT89S52 具有以下标准功能:8k 字节 Flash

4、,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片晶振与时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。AT89C52的引脚图如图3 所示。图 3 AT89C52引脚图P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有部上拉电阻。在 flash

5、编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校时,需要外部上拉电阻。P1 口:P1 口是一个具有部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P1 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。P2 口:P2 口是一个具有部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P2 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(I

6、IL)在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX DPTR)时,P2 口送出高八位地址。P3 口:P3 口是一个具有部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。P3 口亦作为 AT89C52 特殊功能(第二功能)使用,AT89C52的P3口的第二功能表如表1所示。表1 AT89C52的P3口的第二功能表脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2IN

7、T0(外部中断 0)P3.3INT0(外部中断 0)P3.4T0(定时器 0 外部输入)P3.5T1(定时器 1 外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器写选通)RST: 复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在 flash 编程时,此引脚(PROG)也

8、用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从 0000H 到 FFFFH 的外部程序存储器读取指令,EA 必须接 GND。为了执行部程序指令,EA 应该接 VCC。在 flash 编程期间,EA 也接收 12V编程电

9、源( VPP)。XTAL1:振荡器反相放大器和部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。(2)晶振电路晶振电路是单片机的最小系统的组成部分。典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行。(3)复位电路复位电路也是单片机的最小系统的组成部分。当单片机系统在运行中,受到环境干扰出现程序执行错乱的时候,按下复位按钮

10、部的程序自动从头开始执行。复位电路的原理是单片机RST引脚接收到2us以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。单片机最小系统复位电路的极性电容的大小直接影响单片机的复位时间,一般采用1030uF,51单片机最小系统容值越大需要的复位时间越短。2.2.2PCF8591 AD/DA芯片PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC总线接口。PCF8591的3个地

11、址引脚A0, A1和A2可用于硬件地址编程,允许在同一个IC总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向IC总线以串行的方式进行传输。PCF8591的功能包括多路模拟输入、置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由IC总线的最大速率决定。1、主要技术指标和特性 单独供电 PCF8591的操作电压围2.5V-6V 低待机电流 通过I2C总线串行输入/输出 PCF8591通过3个硬件地址引脚寻址 PCF8591的采样率由I2C总线速率决定 4个模拟输入可编程为单端型或差分输入 自动增

12、量频道选择 图4 PCF8591引脚图PCF8591的模拟电压围从Vss到VDD PCF8591置跟踪保持电路 8-bit逐次逼近A/D转换器 通过1路模拟输出实现DAC增益 2、ADC0808引脚功能PCF8591引脚图如图4所示AIN0AIN3:模拟信号输入端。 A0A3:引脚地址端。 VDD、VSS:电源端。 (2.56V) SDA、SCL:I2C 总线的数据线、 时钟线。 OSC:外部时钟输入端,部时钟输出端。 EXT:部、外部时钟选择线,使用部时钟时 EXT 接地。 AGND:模拟信号地。 AOUT:D/A 转换输出端。 VREF:基准电源端。4 功能描述(1)地址IIC总线系统中的

13、每一片PCF8591通过发送有效地址到该地址器件来激活。该地址包括固定部分和可编程部分。可编程部分必需根据地址引脚A0、A1和A2来设置。在IIC总线协议中地址必需是起始条件后作为第一个字节发送。地址字节的最后一位是用于设置以后数据传输方向的读/写。地址设置如图 5所示:图5 PCF8591地址设置(2)控制字图 6 控制字格式控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。控制字节存放在控制寄存器中。总线操作时为主控器发送的第二字节。其格式如以下图6所示:其中:D1、D0两位是A/D通道编号:00通道0,01通道1,10通道2,11通道3D2 自动增益选择(有效位为1) D5、

14、D4模拟量输入选择:00为四路单数入、01为三路差分输入、10为单端与差分配合输入、11为模拟输出允许有效 当系统为A/D转换时,模拟输出允许为0。模拟量输入选择位取值由输入方式决定:四路单端输入时取00,三路差分输入时取01,单端与差分输入时取10,二路差分输入时取11。最低两位时通道编号位,当对0通道的模拟信号进行A/D转换时取00,当对1通道的模拟信号进行A/D转换时取01,当对2通道的模拟信号进行A/D转换时取10,当对3通道的模拟信号进行A/D转换时取11。 在进行数据操作时,首先是主控器发出起始信号,然后发出读寻址字节,被控器做出应答后,主控器从被控器读出第一个数据字节,主控器发出

15、应答,主控器从被控器读出第二个数据字节,主控器发出应答一直到主控器从被控器中读出第n个数据字节,主控器发出非应答信号,最后主控器发出停止信号。(3)A/D转换A/D转换器采用逐次逼近转换技术。在A/D转换周期将临时使用片上转换器和高增益比较器。一个A/D转换周期总是开始于发送一个有效读模式地址给PCF8591之后。A/D转换周期子在应答时钟脉冲的后延被触发。并在传输前一次转换结果时执行(见图7)图 7 A/D转换一旦一个转换周期被触发,所选通的输入电压采样将保存到芯片并被转换为对应的8位二进制码,取自差分输入的采样将被转换为8位二进制补码 转换结果被保存在ADC数据寄存器等待传输。如果自动增量

16、标志被置1,将选择下一个通道。在读周期传输的第一个字节包含前一次读周期的转换结果代码,以上电复位之后读取的第一个字节是0x80。最高A/D转换速率取决于实际的IIC总线速度。(4)D/A转换发送给PCF8591的第三个字节被存储到DAC数据存储器,并使用片D/A转换器转换成对应的模拟电压。这个D/A 转换器由连接到外部参考电压的具有256个接头的电阻分压电路和选择开关组成。接头译码器切换一个接头至DAC输出线。模拟输出电压由自动清零单位增益放大器缓冲。这个缓冲放大器可通过设置控制寄存器的模拟输出允许标志来打开或关闭。在激活状态,输出电压将保持到新的数据字节被发送。提供给模拟输出AOUT的输出电

17、压由下式给出。D/A转换顺序的波形图如图8= +图8 D/A转换(5)振荡器片上振荡器产生A/D转换周期和刷新自动清零缓冲放大器需要的时钟信号。在使用这个振荡器时EXT引脚必须连接到VSS。在OSC引脚振荡频率是可用的。如果EXT引脚被连接到VDD,振荡输出OSC将切换到高阻态以允许用户连接外部时钟信号至OSC。6 I2C总线特性I2C总线是不同的IC或模块之间的双向两线通信,这两条线是串行数据线(SDA)和串行时钟线(SCL),这两条线必须通过上拉电路连接至正电源。数据传输只能是在总线不忙时启动。(1)位传输 一个数据位在每一个时钟脉冲期间传输。SDA线上的数据必须在时钟脉冲的高电平期间保持

18、稳定。这个期间数据线上的改变被当作控制信号。具体时序如图 9所示:图9 位传输(2)开始或停止条件 数据和时钟线在总不忙时保持高电平。在时钟为高电平时,数据线上的一个由高到低的变化被定义为开始条件。时钟为高电平时,数据线上的一个由低到高的变化被定义为停止条件。具体时序如图 10所示图10 开始和停止条件(3)系统配置 产生信息的器件称作“发送机”,接收信息的器件称作“接收机”。控制信息的器件称作“主机”,被控制的器件称作“从机”。如图11 所示:图11 系统配置(4)应答在开始和停止条件之间从发送机传输到接收机的数据字节数是没有限制的。每个8位数据字节之后紧跟着一个应答位。应答位是由发送机放在

19、总线的一个高电平,而主机也产生一个额外的与应答有关的时钟脉冲。地址匹配的从接收机必须在接收每一个字节后产生一个应答。在应答时钟脉冲期间,应答的器件必须将SDA线拉低。因此在应答相应的时钟脉冲的高电平期间,SDA线必须保持稳定的低电平。在由从机终止的最后一个字节,主接收机必须通过产生一个低电平应答向发送机发送一个数据完毕信号,这样发送机必须将数据线SDA拉高以允许主机产生停止条件。具体时序如图 11所示 图12 I2C 总线应答(5)总线协议 在开始条件后一个有效的硬件地址必须发送至PCF8591。读/写位定义了以后单个或多个字节数据传输的方向。开始条件、停止条件和应答位的格式应定时参考I2C总

20、线特性。在写模式数据传输通过发送下一个数据的停止条件或开始条件来约束。总线协议具体时序如图13,14所示:图13 写模式的总线协议,D/A转换图14 读模式的总线协议,A/D转换2.2.3NTC热敏电阻热敏电阻是热电阻的一种,所以说,原理都是温度引起电阻变化。但是现在热电阻一般都被工业化了,基本是指PT100,CU50等常用热电阻他两的区别是:一般热电阻都是指金属热电阻(PT100)等,热敏电阻都是指半导体热电阻由于半导体热电阻温度系数要比金属大10100倍以上,能检测出10-6的温度变化,而且电阻值可在0.1100k间任意选择。所以称为热敏电阻但是热敏电阻阻值随温度变化的曲线呈非线性,而且每

21、个相同型号的线性度也不一样,并且测温围比较小。所以工业上一般用金属热电阻也就是我们平常所说的热电阻。而热敏电阻一般用在电路板里,比如像通常所说的可以类似于一个保险丝。由于其阻值随温度变化大,可以作为保护器使用。当然这只是一方面,它的用途也很多,如热电偶的冷端温度补偿就是靠热敏电阻来补偿。另外,由于其阻值与温度的关系非线性严重所以元件的一致性很差,并不能像热电阻一样有标准信号。热敏电阻工作原理NTC是Negative Temperature Coefficient 的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件,所谓NTC热敏电阻器就是负温度系数热敏电阻器。它是以锰、钴、镍和

22、铜等金属氧化物为主要材料,采用瓷工艺制造而成的。这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。NTC热敏电阻器在室温下的变化围在10O1000000欧姆,温度系数-2%-6.5%。NTC热敏电阻器可广泛应用于温度测量、温度补偿、抑制浪涌电流等场合。应用设计:NTC 热敏电阻的基本物理物性有:电阻值、B值、耗散系数、时间常数。电 阻 值 R(k):电阻值可以近似地用如下公式表达:其中: R1、R2 为绝对温度下T1、T2 时的电阻值(k); B

23、:B值(K)B 值: B (K):B值反映了两个温度之间的电阻变化,可用下述公式计算:其中: R1、R2 绝对温度T1、T2时的电阻值()耗 散 系 数 (mW/):耗散系数是指热敏电阻消耗的功率与环境温度变化之比:其中:W 热敏电阻消耗的功率(mW) T 热平衡时的温度 To 周围环境温度 I 在温度T时通过热敏电阻电流 R 在温度T时热敏电阻的电阻值() 时间常数 (sec.): 热敏电阻在零功率状态下,当环境温度由一个特定温度向另一个特定温度突变时, 温度变化63.2%所需时间。热敏电阻的温度阻值特性曲线如图15所示:图15 电阻温度特性2.3 系统仿真测试确定好方案后,用Protues

24、软件搭建好系统电路,将写好的程序下载进仿真图中,运行结果如图16所示:图 16 系统原理图与仿真结果2.4 系统程序设计思路图 17 串口发送数据仿真串口发送数据仿真图如图 17所示:2.4 系统程序设计本温度采集系统采用的主控芯片是AT89C51,利用NTC热敏采集温度,由PCF8591的AD芯片将NTC的电压值转换成二进制值,由18B20温度传感器采集的温度作为NTC的基准,利用公式计算出热敏电阻的温度值,然后让LCD1602显示,并且将温度通过串口通信发送到上位机的显示窗口中,程序流程图如图18所示:开始PCF8591初始化液晶1602初始化PCF8591采集温度对采集的电压值进行数据处

25、理液晶显示完毕18B20提供基准图18 程序流程图具体的程序设计如下:2.4.1 主程序模块(main.c)#includeconfig.h#includelcd.h/*指示灯相关的位定义*/sbit D1=P22;sbit D2=P23;sbit D3=P24;/*全局变量*/char temp16,tempo16;uchar AD_result;float Tempre,NTC_Tempre;/*函数名*void System_init()*功 能 *系统初始化*参 数 *说 明 *对液晶和I2C的初始化*/void System_init()LCD_init();Uart_init();

26、/*函数名*void LCD_DIS()*功 能 *显示函数*参 数 *说 明 */void LCD_DIS()sprintf(char *)temp,T=%7.4bfC,Tempre);sprintf(char *)tempo,NTC:%5bd,AD_result);LCD_Str_DIS(char *)temp,1,0);LCD_Str_DIS(char *)tempo,0,0);/*函数名*void AD_Work()*功 能 *模数转换模块函数*参 数 *说 明 */void AD_Work()AD_init();AD_start();AD_write(0x90);AD_respons

27、();AD_write(0x03);AD_respons();AD_end();AD_start();AD_write(0x90);AD_respons();AD_write(0x03);AD_respons();AD_start();AD_write(0x91);AD_respons();AD_result=AD_read();/P1=AD_result;AD_respons();AD_end();/*函数名*void Date_Done()*功 能 *数据处理函数*参 数 *说 明 */void Date_Done()NTC_Tempre=(AD_result+204)/3.0;/*函数名

28、*void Uart_Work()*功 能 *串口发送数据函数*参 数 *说 明 */void Uart_Work()static float t;if(t!=Tempre)t=Tempre;Uart_sendstr(temp);Uart_sendbyte(n);/*函数名*void main()*功 能 *主函数*参 数 *说 明 */void main()System_init();while(1)LCD_DIS();Tempre=DS1820_readt();AD_Work();/Date_Done();Uart_Work();2.4.2 PCF8591模数数模转换(AD.c)#incl

29、udesbit sda=P20;sbit scl=P21;/*函数名*void AD_init()*功 能 *参 数 *说 明 */void AD_init()sda=1;delay();scl=1;delay();/*函数名*void AD_start()*功 能 *参 数 *说 明 */void AD_start()sda=1;delay();scl=1;delay();sda=0;delay();/*函数名*void AD_end()*功 能 *参 数 *说 明 */void AD_end()sda=0;delay();scl=1;delay();sda=1;delay();/*函数名*

30、void AD_write(uchar dat)*功 能 *参 数 *说 明 *写数据时序:scl=1时保持数据,scl=0时变化数据*/void AD_write(uchar dat)uchar i,temp;temp=dat;for(i=8;i0;i-)dat=dat0;i-)scl=1;delay();k=(k1)|sda;delay();scl=0;delay();return k;/*函数名*void AD_respons()*功 能 *参 数 *说 明 *respons sda=0;norespons sda=1*/void AD_respons()uchar i;scl=1;de

31、lay();while(sda=1)&(i250)i+;scl=0;delay();2.4.3 LCD液晶显示(LCD.c)#includelcd.h/*与液晶相关的参数*/sbit RS=P26;sbit RW=P25;sbit LCDE=P27;char buf16;/*函数名*void LCD_init()*功 能 *液晶初始化函数*参 数 *说 明 */void LCD_init()LCD_Wcom(0x38);delay_ms(5);LCD_Wcom(0x38);delay_ms(5);LCD_Wcom(0x38);delay_ms(5);LCD_Wcom(0x0c);delay_m

32、s(5);LCD_Wcom(0x06);delay_ms(5);LCD_Wcom(0x01);delay_ms(5);/*函数名*bit lcd_busy()*功 能 *检测液晶状态,是否忙*参 数 *返回状态 1:忙 0:不忙*说 明 *RS=0 RW=1 LCDE=1,读状态字(检测忙主要是第8位)*/bit lcd_busy()bit result;RS=0;RW=1;LCDE=1;delay_ms(5);result=(bit)(P0&0x80);LCDE=0;return result;/*函数名*LCD_Wcom(uchar )*功 能 *液晶写命令函数*参 数 *说 明 *RS=

33、0 RW=0 LCDE高脉冲,写指令*/void LCD_Wcom(uchar )while(lcd_busy();RS=0;RW=0;LCDE=0;P0=;delay_ms(5);LCDE=1;delay_ms(5);LCDE=0;/*函数名*LCD_Wdat(uchar dat)*功能 *液晶写数据函数*参数 *说明 *RS=1 RW=0 LCDE高脉冲,写数据*/void LCD_Wdat(uchar dat)while(lcd_busy();RS=1;RW=0;LCDE=0;P0=dat;delay_ms(5);LCDE=1;delay_ms(5);LCDE=0;/*函数名*void

34、lcd_pos(bit x,uchar y)*功 能 *液晶显示位置设置函数*参 数 *x:行设置 y:列设置*说 明 *x=0在第一行显示,x=1在第二行显示*y对应列,取值从0到15*/void lcd_pos(bit x,uchar y) if(x) LCD_Wcom(0x80+0x40+y);elseLCD_Wcom(0x80+y);/*函数名*void LCD_clr()*功 能 *液晶清屏函数*参 数 *说 明 *写0x01指令即清屏*/void LCD_clr()LCD_Wcom(0x01);delay_ms(5);/*函数名*void LCD_out(char *s)*功 能 *发送串*参 数 *说 明 */void LCD_out(char *s)while(*s)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号