基于单片机的数字温度计的设计报告.docx
- 文档编号:9474356
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:14
- 大小:320.59KB
基于单片机的数字温度计的设计报告.docx
《基于单片机的数字温度计的设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计的设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
基于单片机的数字温度计的设计报告
基于单片机的数字温度计
摘要:
随着时代的进步和发展,单片机技术已经普及到我们的生活、工作、科研、各个领域,已经成为一种比较成熟的技术。
本文介绍一种基于AT89C51单片机的一种温度测量,该电路采用电位器和ADC0804转换器代替温度传感器DS18B20作为温度监测元件,测量范围0℃~100℃,误差范围为0.5℃。
正文着重给出了软硬件系统的各部分电路,介绍了ADC0804转换器的工作原理,AT89C51单片机的功能和应用。
该系统可以方便的实现温度采集和显示,并可根据需要设定上下限温度,它使用起来具有精确度高、测量广、灵敏度高、体积小、功耗低等优点。
该电路设计新颖、功能强大、结构简单,有广泛的应用前景。
关键词:
ADC0804、AT89C51、电位器、温度测量
1器件简介
1.1AT89C51简介
1.1.1AT89C51简介
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
1.1.2管脚说明
如图1为AT89C51引脚图,各引脚功能说明如下:
图1AT89C51引脚图
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89C51特殊功能(第二功能)使用,如表1所示。
表1AT89C51引脚号第二功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
INT0(外部中断0)
P3.3
INT0(外部中断0)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
RST:
复位输入,晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出69个晶振周期的高电平。
特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。
DISRTO默认状态下,复位高电平有效。
ALE/PROG:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
在flash编程时,此引脚(PROG)也用作编程输入脉冲。
在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。
然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。
如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。
这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。
否则,ALE将被微弱拉高。
这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
1.2ADC0804简介
1.2.1ADC0804简介
A/D转换就是将模拟信号输换成数字信号。
A/D转换器就是用来实现这一功能的器件。
信号输入端常常是传感器或相应电路的模拟输出,由ADC器件转换成数字信号再提供给微处理器,以便用作显示等后期信号处理。
ADC0804是属于连续渐进式(SuccessiveApproximationMethod)的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。
本次使用8位COMS依次逼近型的ADC0804转换器.。
三态锁定输出;存取时间:
135US;分辨率:
8位;转换时间:
100US;总误差:
正负1LSB;工作温度:
ADC0804LCN---0~70度。
1.2.2引脚图及定义
引脚图如图2所示。
图2ADC0804引脚图
/CS:
芯片选择信号。
/RD:
外部读取转换结果的控制输出信号。
/RD:
为高时,DB0~DB7处理高阻抗;/RD为低时,数字数据才会输出。
/WR:
用来启动转换的控制输入,相当于ADC的转换开始(/CS=0时);当/WR由高变为低时,转换器被清除;当/WR回到高时,转换正式开始。
/CLKR:
时钟输入或接振荡无件(R,C)频率约限制在100KHZ~1460KHZ,如果使用RC电路则其振荡频率为1/(1.1RC)。
/INTR:
中断请求信号输出,低地平动作。
VIN(+)、VIN(-):
差动模拟电压输入。
输入单端正电压时,VIN(-)接地;而差动输入时,直接加入VIN(+)、VIN(-)。
AGND、DGND:
模拟信号以及数字信号的接地。
VREF:
辅助参考电压。
DB0~DB7:
8位的数字输出。
VCC:
电源供应以及作为电路的参考电压.
2系统设计
2.1设计方案
选用AT89C51型单片机作为主控制器件,用电位器模拟温度传感器,把转换的温度值的模拟量送入ADC0804的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数码管显示。
2.2总体设计框图
温度计电路设计总体设计方框图如图3所示。
图3电路设计总体设计方框图
3系统硬件软件设计
3.1硬件设计
3.1.1主板电路
主板电路原理图如图4所示。
电路图中包括AT89C51单片机、时钟电路和复位电路、液晶显示模块、ADC0804转换器、电位器和电压表。
图4中的电位器可以调节输入电压的大小,并联接在电位器上的电压表可实时显示当前电压。
电位器有最大值和最小值,转换为温度显示时,限定为温度的最大值和最小值。
液晶显示屏与AT89C51单片机连接,单片机输出的数据会实时显示在该屏幕上,能直观的读出当前温度值。
ADC0804转换器将电位器输出的模拟信号转换为单片机可以接收的数字信号,然后通过与单片机的接口将数字信号输入到单片机中。
图4主板电路原理图
3.1.2温度监测模块
电位器和ADC0804转换器代替温度传感器DS18B20作为温度监测元件模块,该模块及ADC0804转换器与单片机的连接方式如图5所示。
图5测温模块及连接
3.2软件设计
3.2.1程序设计流程图
程序设计流程图如图6所示。
图6程序设计流程图
3.2.2程序设计
根据大体程序设计思路,将程序设计具体如下:
#include
Unsignedcharcodeseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码
sbitint0=P3^2;//定义管脚功能
sbitwr=P3^6;//写端口
sbitrd=P3^7;//读端口
voidDelay(unsignedinttc)//显示延时程序
{
while(tc!
=0)
{
unsignedinti;
for(i=0;i<100;i++);
tc--;
}
}
unsignedcharadc0804(void)//读AD0804子程序
{
unsignedcharaddata,i;
rd=1;
wr=1;
int0=1;//读ADC0804前准备
P0=0xff;//P1全部置一准备
wr=0;
wr=1;//启动ADC0804开始测电压
while(int0==1);//查询等待A/D转换完毕产生的INT(低电平有效)信号
rd=0;//开始读转换后数据
i=i;i="i";//无意义语句,用于延时等待ADC0804读数完毕
addata=P0;//读出的数据赋与addate
rd=1;//读数完毕
return(addata);//返回最后读出的数据
}
unsignedintdatpro(void)//ADC0804读出的数据处理
{
unsignedcharx;
unsignedintdianyax;//用于存储读出数据
unsignedintdianya=0;//存储最后处理完的结果注意数据类型
for(x=0;x<10;x++)//将10次测得的结果存储在dianya中
{
dianya=adc0804()+dianya;
}
dianya=dianya/10;//求平均值
dianya=dianya*3.922;
return(dianya);//返回最后处理结果
}
voidLed()
{
unsignedintdate;
date=datpro();//调用数据处理最后结果
P1=P1&0x7f;
P2=seg7code[date/1000];//输出百位
Delay(8);
P1=P1|0xf0;
P1=P1&0xbf;
P2=seg7code[date%1000/100];//输出十位
Delay(8);
P1=P1|0xf0;
P1=P1&0xdf;
P2=seg7code[date%100/10]|0x80;//输出个位及小数点
Delay(8);
P1=P1|0xf0;
P1=P1&0xef;
P2=seg7code[date%10];//输出小数点后第一位
Delay(8);
P1=P1|0xf0;
}
voidmain()
{
while
(1)
{
Led();//只需调用显示函数
}
}
4Proteus仿真
4.1Proteus仿真操作
将编写好的程序在keil软件中进行编译,然后生成“.hex”文件。
打开制作完成的电路原理图,双击单片机,将“.hex”文件加载到单片机中,然后即可进行仿真。
4.2Proteus仿真
对加载程序后的电路进行仿真操作,仿真后可看到电路图显示相应的温度数值,可通过改变电位器的大小值,显示不同的温度数值。
具体仿真显示图如图7所示。
图7电路仿真显示图
5测量数据分析
仿真后得出各电压值所对应温度的测量值,采样其中十组数据与真实值进行分析比对,计算出所设计的数字温度计的精度。
数据分析表如表2所示。
表2数据分析表
电压值/V
0.00
0.50
1.00
1.50
2.00
2.50
3.00
3.50
4.00
4.50
5.00
真实值/℃
0.0
10.0
20.0
30.0
40.0
50.0
60.0
70.0
80.0
90.0
100.0
测量值/℃
0.0
9.8
20.0
29.8
40.0
49.9
60.0
69.8
80.0
89.8
100.0
由数据表中数据,得
最大绝对误差为:
0.2℃
引用误差为:
0.2/100*100%=0.2%
该数字温度计的精度为:
0.2
经计算可知,所设计的数字温度计符合设计要求。
参考文献:
[1]丁向荣,谢俊,王彩申.单片机C语言编程与实践[M].北京:
电子工业出版社,2009.
[2]阎石.数字电子技术基础[M].北京:
高等教育出版社,2006.5.
[3]龚尚福,贾澎涛,靳玉萍.C/C++语言程序设计[M].徐州:
中国矿业大学出版社,2006.
[4]皮大能,南光群,刘金华.单片机课程设计指导书[M].北京:
北京理工大学出版社,2010.7.
[5]陈涛.单片机应用及C51程序设计[M].北京:
机械工业出版社,2010.9.
[6]楼然苗,李光飞.单片机课程设计指导[M].北京:
北京航空航天大学出版社,2012.1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 温度计 设计 报告