温度测量系统设计与总结报告面包队.docx
- 文档编号:11178055
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:25
- 大小:382.67KB
温度测量系统设计与总结报告面包队.docx
《温度测量系统设计与总结报告面包队.docx》由会员分享,可在线阅读,更多相关《温度测量系统设计与总结报告面包队.docx(25页珍藏版)》请在冰豆网上搜索。
温度测量系统设计与总结报告面包队
温度测量系统设计与总结报告
摘要:
本文介绍的是利用单片机STC89C52与DS18B20、DS1302、设计出一个具有万年历和数字温度显示功能的设计,用液晶显示屏1602LCD显示的温度测量系统。
本设计对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能。
要测的环境温度通过一线温度传感器DS18B20采集,测量范围0~100°C,分辨率不低于0.1°C,然后通过C52单片机处理并在液晶显示屏1602LCD上显示。
同时单片机控制加入了一个报警电路——蜂鸣器电路,能通过独立键盘设置温度报警上下限,当温度达到高、低限温点时将发出声音报警信息。
时钟芯片DS1302用于计时,起到万年历的作用,能通过独立键盘调节万年历时间和日期。
能通过独立键盘实现温度显示界面和万年历显示界面的切换。
关键词:
电子万年历;单片机;温度测量;时钟;液晶显示
引言:
由于课题基本要求设计一种具有能数字显示被测发热体温度,测量范围0~100°C,分辨率不低于0.5°C;通过键盘可任意设置温度报警的上限和下限,当温度达到高、低限温点时将发出声或光报警信息的温度测量系统。
但通过我们对各种温度测量系统的观察,发现了一些不足之处,比如:
温度分辨率过大、无时间和日期显示等,这都给人们的使用带来了某些不便。
为此设计了一种具有温度测量和万年历显示功能的基于52单片机的温度测量系统。
一:
方案设计与论证
方案1:
1.1单片机芯片的选择:
采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C52的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插。
1.2显示模块选择:
采用8段数码管显示。
1.3时钟芯片的选择:
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。
单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。
这样就实现了直接用单片机来实现电子万年历设计。
1.4温度传感器的选择:
使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。
方案2:
2.1单片机芯片的选择:
采用89C2芯片作为硬件核心,STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
2.2显示模块选择:
采用液晶12864显示。
2.3时钟芯片的选择:
不使用时钟芯片,而直接用STC89C52单片机来实现电子万年历设计。
单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。
这样就实现了直接用单片机来实现电子万年历设计。
2.4温度传感器的选择:
采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125°C,最大分辨率可达0.0625°C。
方案3:
3.1单片机芯片的选择:
采用89C2芯片作为硬件核心,STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
3.2显示模块选择:
采用液晶1602显示。
3.3时钟芯片的选择:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.
3.4温度传感器的选择:
采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125°C,最大分辨率可达0.0625°C。
方案论证:
单片机芯片的选择:
虽然说采用AT89S52,同样具有89C52的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
但是专用的并口烧写口成本较高。
而采用STC89C52,虽然运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
但是可以采用40引脚IC座,可轻松对芯片进行多次拔插,成本方面也较低。
因而选用STC89C52芯片。
显示模块选择:
采用8段数码管显示,虽然可视范围十分宽,而且经济实惠,也不需要复杂的驱动程序,但是操作比液晶显示略显繁琐,内容显示也不多,比较局限。
采用液晶12864显示,液晶显示效果出众,可以运用菜单项来方便操作,可显示大量文字,图形,显示多样、详细,清晰可见,操作也比较简单,但是价格比较昂贵,体积大。
采用液晶1602显示,虽然显示不了文字,但是价格较实惠,比液晶12864的体积小,功能也相差无几,较适合此次作品。
因而选用液晶1602显示。
时钟芯片的选择:
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。
虽然减少芯片的使用,节约成本,充分利用了单片机的资源,但是精度不够高,时间误差较大,掉电后丢失所有数据,软件编程较复杂。
而采用DS1302作为主要计时芯片,可以做到计时准确。
更重要的是,DS1302可以在很小电流的后备电源(2.5~5V电源,在2.5V时耗电小于300nA)下继续计时,停电后时钟无需重新调整,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电,还可自设闹铃,阳历、星期与年月日自动对应。
因而选用了时钟芯片DS1302。
方案选定:
由于在系统设计时,需要考虑以下几点因素:
实用性、功耗低、精确度高、软件编程较简单,元器件体积小、元器件成本低等,故本系统采用方案3。
二:
电路设计
1、电路设计框图
STC89C52
主控制模块
2、单片机主控制单元电路设计:
STC89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如下图所示,第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路。
第12引脚和第13引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。
第3、4、5、6引脚接独立键盘电路,第23引脚接DS18B20温控电路,第24引脚接蜂鸣器电路,20引脚为接地端,40引脚为电源端.如图所示
STC89C52
3、DS18B20温度采集单元电路设计:
采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P2^2与DS18B20的I/O口连接加一个10k上拉电阻,Vcc接电源,GND接地。
4、独立键盘单元电路设计:
独立按键电路,由四个轻触开关组成,组成功能按键,是用来设置万年历和温度报警上下限的,配上程序之后,能起到切换功能。
5、1602显示单元电路设计:
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等得点阵型液晶模块,可以显示两行,每行16个字符液晶模块。
内含复位电路,并提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能。
3引脚接个可调电阻,可通过调节可调电阻来调节1602LCD的对比度。
为防止直接加5V电压烧坏背光灯,在15引脚串接一个10Ω电阻用于限流。
6、电源、串行口单元电路设计:
电源电路和串行口电路是给单片机通电以及串烧程序的两个基本电路,是驱动单片机工作的基本电路,给单片机提供5V电源,从而驱动并达到单片机的工作电压,使单片机正常工作;而串行口通信电路是通过与PC终端相连接,PC终端发送程序到单片机C52里面。
7、DS1302时钟单元电路设计:
DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。
中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
8、蜂鸣器单元电路设计:
三极管主要是做驱动用的。
因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,当输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。
9、软件设计的流程图:
主程序流程图
时间调整程序流程图
温度上下限调整程序流程图
N
Y
切换屏子程序流程图
DS18B20温度计主程序流程图读出温度子程序流程图
10、软件设计代码:
10.1DS18B20温度子程序:
voiddelay(unsignedinti)//DS18B20延时函数
{
while(i--);
}
voidInit_DS18B20(void)//DS18B20初始化函数
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
ucharReadOneChar(void)//DS18B20读一个字节
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--){
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)dat|=0x80;
delay(4);
}
return(dat);
}
voidWriteOneChar(unsignedchardat)//DS18B20写一个字节
{
unsignedchari=0;
for(i=8;i>0;i--){
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
uintReadTemperature(void)//DS18B20读取温度
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;//将温度的高位与低位合并
t=tt*100+0.5;//对结果进行4舍5入
return(t);
}
10.1DS1302时钟子程序:
voidRTInputByte(uchard)//实时时钟写入一字节
{
uchari;
ACC=d;
for(i=8;i>0;i--)
{
T_IO=ACC0;//相当于汇编中的RRC
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
ucharRTOutputByte(void)//实时时钟读取一字节
{
uchari;
for(i=8;i>0;i--)
{
ACC=ACC>>1;//相当于汇编中的RRC/
ACC7=T_IO;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
voidW1302(ucharucAddr,ucharucDa)//往DS1302写入数据
{
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);//地址,命令/
RTInputByte(ucDa);//写1Byte数/
T_CLK=1;
T_RST=0;
}
voidWrite_DS1302Init(void)
{
W1302(0x8e,0);
W1302(0x80,time_data_buff[0]);//写入秒
W1302(0x8e,0);
W1302(0x82,time_data_buff[1]);//写入分
W1302(0x8e,0);
W1302(0x84,time_data_buff[2]);//写入小时
W1302(0x8e,0);
W1302(0x86,time_data_buff[3]);//写入日
W1302(0x8e,0);
W1302(0x88,time_data_buff[4]);//写入月
W1302(0x8e,0);
W1302(0x8a,time_data_buff[5]);//写入星期
W1302(0x8e,0);
W1302(0x8c,time_data_buff[6]);//写入年
}
ucharR1302(ucharucAddr)//读取DS1302某地址的数据
{
ucharucData;
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(ucAddr);//地址,命令/
ucData=RTOutputByte();//读1Byte数据/
T_CLK=1;
T_RST=0;
return(ucData);
}
voidSet1302(uchar*pClock)//设置初始时间
{
uchari;
ucharucAddr=0x80;
EA=0;
W1302(0x8e,0x00);//控制命令,WP=0,写操作?
/
for(i=7;i>0;i--)
{
W1302(ucAddr,*pClock);//秒分时日月星期年/
pClock++;
ucAddr+=2;
}
W1302(0x8e,0x80);//控制命令,WP=1,写保护?
/
EA=1;
}
voidGet1302(ucharucCurtime[])//读取DS1302当前时间
{
uchari;
ucharucAddr=0x81;
EA=0;
for(i=0;i<7;i++)
{
ucCurtime[i]=R1302(ucAddr);//格式为:
秒分时日月星期年/
ucAddr+=2;
}
EA=1;
}
三:
测试方法和测试结果
1、测试仪器:
序号
名称
型号
1
PC机
华硕K42JB
2
5V直流稳压电源
自制
3
单片机学习板
PL-51
4
数字万用表
DT9205A
2、测试方法:
2.1测试硬件方法:
温度测量系统的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。
硬件调试主要是检测硬件电路是否有短路、断路、虚焊现象。
时钟和测温部分的硬件电路很简单,DS1302通过3根线、DS18B20只通过1根线与单片机相连接,很容易检测,主要是检测引脚晶振和电源是否接好。
另外可以通过软件来调试硬件,如编写一个简单的显示程序来测试显示电路连接是否正确。
由于硬件电路系统较大,故将整个硬件系统瓜分为几个小模块:
键盘模块、时钟DS1302模块等。
分别对每个模块进行测试,并将每个测试结果与PL-51单片机学习板相比较,从中发现不同之处,再细分到各个模块,找出硬件电路的错误之处。
再针对情况,对各个元器件用万用表进行检查是否损坏。
2.2测试软件方法:
温度测量系统是多功能的,可以看当前日期和时间、温度,并可通过任意设置报警的温度报警的上限和下限,当温度达到高、低限温点时将发出声音报警信息的仪器。
温度测量系统功能很多,所以对于它的程序也较为复杂,在编写程序和调试时出现了相对较多的问题。
由于温度测量系统功能很多,故而在编写程序时,先分别对各个功能进行编写程序和调试,在实现单一功能后,再进行多功能合并的编写和调试,最终将各个功能合并在一起,再进行总个调试和修改。
在这个过程中,不断发现编写程序代码的问题,并不断改正和修正,才编写出可以实现各个功能的程序。
3、测试结果:
3.1测试硬件结果:
在本温度测量系统的设计调试中遇到了很多的问题。
回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:
(1)在测试中遇到代码时不时烧写不进程序。
解决方法:
刚开始初步认为是40引脚IC座与芯片交接处接触不好或电路出现虚焊、漏焊情况,在重新焊过电路和40引脚IC座后,还是出现这种问题。
经过一系列排查后,才发现晶振的插座与晶振接触不好,导致此现象发生。
(2)在测试中遇到1602LCD不显示时。
解决方法:
首先管擦电路是否存在漏焊,虚焊,或者元件损坏。
并用万用表测试。
测试无误后,查看烧写的程序是否正确无误。
最后才发现原来是对比度调节没调好。
3.2测试软件结果:
由于温度测量系统功能较多的情况下,程序代码较多,在软件的调试过程中调试中遇到了很多的问题,主要遇到的问题如下:
(1)烧入程序后,1602LCD显示万年历时,呈现乱码。
解决方法:
将程序烧入到芯片后,放到PL-51单片机学习板上进行测试,可以正常显示,初步判断是硬件时钟DS1302电路出现问题或元器件坏了,但经过换元器件和重新制造时钟DS1302电路后,还是有此问题。
在观察软件代码和硬件原理图后,才发现时钟电路的一个引脚接错I/O口了。
(2)修改时间、日期时没有自动对应上。
解决方法:
把不相关的程序暂时屏蔽,修改时间、日期的子程序和显示子程序独立调试,发现显示时,对十进制和十六进制处理不好,所以会造成错乱。
最后把相应的十进制进行修改,使得可以与十六进制对应,最后解决了此问题.
(3)在加上独立键盘调节温度上下限和时间、日期时,1602LCD会显示乱码
解决方法:
对4个按键一个个测试,发现一按SW3按键,1602LCD会显示乱码,而其他按键没有反应,除了SW5按键。
经过排查,才发现定义独立按键的I/O口与1602LCD的I/O口冲突了。
最后重新做个独立的按键模块,经按键I/O定义到其他未被使用的I/O口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测量 系统 设计 总结报告 面包