基于AT89S52单片机的数字温度计设计黎奔腾.docx
- 文档编号:8816607
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:865.04KB
基于AT89S52单片机的数字温度计设计黎奔腾.docx
《基于AT89S52单片机的数字温度计设计黎奔腾.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机的数字温度计设计黎奔腾.docx(14页珍藏版)》请在冰豆网上搜索。
基于AT89S52单片机的数字温度计设计黎奔腾
湖南铁路科技职业技术学院
单片机课程设计
选题名称:
基于单片机的数字温度计设计
系(院):
机械工程系(东院)
专业:
机电一体化
班级:
309—2班
***********
*********
录目
1项目设计综述……………………………………………………………2
1.1项目设计概述………………………………………………………..2
1.2项目设计要求………………………………………………………..2
1.3项目程设计方案……………………………………………………..2
2系统设计………………………………………………………................4
2.1图框设计方案…………………………………………………….....4
2.2DS18B20简介……………………………………………....……......4
2.2.1单片机AT89S52简介…………………………………………......4
3硬件设计.....................................................................................................6
3.1电路图原理..........................................................................................6
3.2DS18B20与单片机接口的设计..........................................................6
3.3显示电路图接口..................................................................................7
3.4其他外围电路....................................................................................8
4软件设计…………………………………………………………..........11
4.1程序设计流程图………………………………………...................11
4.2程序清单…………………………………………………................12
5系统仿真及调试…………………………………………………...........17
5.1.硬件调试……………………………………………………............17
5.2软件调试……………………………………………………...........17
总结……………………………………………………………………......18
参考文献……………………………………………………………….......19
1项目设计综述
1.1项目设计概述
在生活和生产中,经常要用到一些测温设备。
但是传统的测温设备具有制作成本高、硬件电路和软件设计复杂等缺点。
基于AT89S52单片机的数字温度计具有制作简单、成本低、读数方便、测温范围广和测温准确等优点,应用前景广阔。
1.2项目设计要求
基于AT89S52单片机的数字温度计设计要求如下:
⑴温度值用4位LED数码管显示
⑵测温范围为—30℃~100℃,且测量误差不得大于±0.5℃
⑶成品的体积、质量尽可能小。
1.3项目设计方案
大多单片机接口输入的信号是数字信号,或有带A/D转换的高端单片机也可以输入模拟信号。
由单片机获取非电信号的温度信息,必须通过温度传感器。
传统的温度测量虽多以热敏电阻作为温度传感器。
但是,热敏电阻的可靠性较差、测量温度精度较低,而且还需经A/D转换成数字信号后才能由单片机进行处理。
因此,使用数字温度传感器DS18B20了简化硬件设计、方便单片机读取数据、节约成本。
2系统设计
2.1图框设计
根据设计要求分析,基于AT89S52单片机的数字温度计由AT89S52单片机控制器、电源、显示电路、温度传感器、复位电路和时钟电路组成,系统图框如图2—1所示。
电源给整个电路供电,显示电路显示温度值,时钟电路为AT89S52提供时钟频率。
传感器采用美国DALLAS半导体公司生产的一种智能温度传感器DS18B20,其测温
范围为-50~125℃,最高分辨率可达0.0625℃,可完全符合设计要求。
2.2DS18B20简介
本公司最新推出TS-18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1:
技术性能描述 1.1独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
1.2测温范围-55℃~+125℃,固有测温分辨率0.5℃。
1.3支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
1.4工作电源:
3~5V/DC 1.5在使用中不需要任何外围元件 1.6测量结果以9~12位数字量方式串行传送 1.7不锈钢保护管直径Φ6 1.8适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温 1.9标准安装螺纹M10X1,M12X1.5,G1/2”任选 1.10PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
2:
应用范围 2.1该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域 2.2轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
2.3汽车空调、冰箱、冷柜、以及中低温干燥箱等。
2.5供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制
2.3单片机AT89S52简介
AT89S52具有如下特点:
40个引脚,8kBytesFlash片内程序储存器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/0)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S52设计和配置了振荡频率可为0Hz并通过软件设置省电模式。
空闲模式,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电式冻结振荡器而保存RAM的数据,停止芯片其他功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:
·兼容Mcs-51指令系统·8k可反复擦写(〉1000次)ISPFlashROM
·32个双向I/O口·4.5~5.5v工作电压
·3个16位可编程定时计数器·时钟频率0—33MHz
·全双工作UART穿行中断口线·256bit内部RAM
·2个外部中断源·低功耗空闲和省电模式
·中断唤醒省电模式·3级加密位
·看门狗(WDT)电路·软件设置空闲和省电功能
·灵活的ISP字节和分页编程·双数据寄存器指针
3硬件设计
3.2DS18B20与单片机接口的设计
DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同条线来完成。
DS18B20的电源供电方式有2种:
外部供电方式和寄生电源方式。
工作于寄生电源方式时,VDD和GND均接地,他在需要远程温度探测和空间受限的场合特别有用,原理是当1Wire总线的信号线DQ为高电平,窃取电信号能量给DS18B20供电,同时一部分能量虽给内部电容充电,当DQ为低电平时释放能量为DS18B20供电。
但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM时),同时芯片的性能也有所降低。
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。
因此本设计采用外部供电方式。
如下图所示:
3.3显示电路接口
本设计显示电路采用4位共阴极LED数码管来显示测量得到的温度值。
LED数码管能在低电压工作,而且体积小、重量轻、使用寿命长,因此本次设计选用此数码管作为显示器件。
一个LED数码管只能显示一位的字符,如果字符位数不止一位,可以用几个数码管组成,但要控制多位的显示电路需要有字段控制和字位控制,字段控制是指控制所要显示的字符是什么,控制电路应将字符的七段码通过输出口连接到LED的a~g的引脚,是某些段点亮,某些段处于熄灭状态。
字位控制是指控制在多位显示器中,哪几位发光或那几位不发光,字位控制则需要通过字位码作用于LED数码管的公共引脚,是某一位或某几位的数码管可以发光。
数码光显示电路分为动态显示和静态显示。
静态显示方式时指每一个数码管的字段控制是独立的,每一个数码管都需要配置一个8位输出口来输出该字位的七段码。
应此需要显示多位时需要多个输出口,通常片内并口不够用,需要在片外扩展。
动态显示又称为扫描显示方式,也就是在某一时刻只能让一个字位处于选通状态,其他字位一律断开,同时在字段线上发出该位要显示的字段码,这样在某一时刻某一位数码管就会被点亮,并显示出相应的字符。
下一刻该改变所显示的字位和字段码,点亮另一个数码管,显示另一个字符。
绕后一次扫描轮流点亮其他数码管,只要扫描速度快,利用人眼的视觉残留效应,会使人感觉到几位数码管都在稳定的显示。
本次试验用74LSO4非门作驱动。
如图所示
3.4其他外围电路
复位电路:
在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作。
实际应用中,复位操作有两种形式:
一种是上电复位,另一种是上电与按键均有效的复位。
上电复位要求接通电源后,单片机自动实现复位操作。
上点瞬间RST引脚获得高电平,随着电容的充电,RST引脚的高电平逐渐下降。
只要RST引脚保持两个机器周期的高电平单片机就可以进行复位操作。
本设计用的上电与接键均有效的复位。
电路图如下:
时钟电路:
单片机的时钟信号通常有两种方式生产:
一是内部时钟方式,二是外部时钟方式。
本设计采用内部时钟方式,在单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2脚外接石英晶体(简称晶振),就构成了自己震荡器并在单片机内部产生时钟脉冲信号。
图中电容器的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF.j晶振CYS的振荡频率范围在1.2~12MHz和6MHz.本设计采用12MHz晶振,电容值为30pF。
在电路总体设计中,先从片内程序储存器取指还是从内部程序储存器取指的选择信号。
当EA\Vpp接高电平时,先从片内程序存储器读取指令,读完4KB后,自动改为片外取指。
若EA\Vpp接低电平,则所有指令均从片外程序存储器读取。
ALE脚用于输出允许地址所存信号。
PSEN脚用于外部程序存储器选通信号,在对外部程序存储器取指操作时此引脚置低电平有效。
在执行片内程序存储器取指时PESN脚无效。
本设计无片外程序储存区扩展,所以将EA\Vpp接高电平,ALE及PSEN脚悬空。
4软件设计
4.1程序设计流程图
主程序的主要功能是负责温度的实时显示。
读出并处理DS18B20测量的当前温度值,温度测量值每1s进行一次。
这样可以在1s之内测量一被测温度,其程序流程如图4-1所示
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,其流程图如图4—2所示。
温度转换命令子程序主要是发温度转换开始命令,采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
计算温度子程序RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位0时将符号显示位移入下一位。
4.2程序清单
#include"reg51.h"
#include"intrins.h"//延时函数用
#defineDisdataP1//段码输出口
#definediscanP3//扫描口
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;//温度输入口
sbitDIN=P1^7;//LED小数点控制
uinth;
ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//温度小数部分用查表法
ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/*共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字
uchardatatemp_data[2]={0x00,0x00};//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用
voiddelay(uintt)//11微秒延时函数
{
for(;t>0;t--);
}
scan()//显示扫描函数
{
chark;
for(k=0;k<4;k++)//四位LED扫描控制
{
Disdata=dis_7[display[k]];
if(k==1){DIN=0;}
discan=~scan_con[k];delay(90);discan=0x00;
}
}
ow_reset(void)//18B20复位函数
{
charpresence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay(50);//550us
DQ=1;
delay(6);//66us
presence=DQ;//presence=0继续下一步
}
delay(45);//延时500us
presence=~DQ;
}
DQ=1;
}
voidwrite_byte(ucharval)//18B20写命令函数
{
uchari;
for(i=8;i>0;i--)//
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
DQ=val&0x01;//最低位移出
delay(6);//66us
val=val/2;//右移一位
}
DQ=1;
delay
(1);
}
ucharread_byte(void)//从总线上读取一个字节
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;//
_nop_();_nop_();_nop_();_nop_();//4us
DQ=1;_nop_();_nop_();_nop_();_nop_();//4us
if(DQ)value|=0x80;
delay(6);//66us
}
DQ=1;
return(value);
}
read_temp()//读出温度函数
{
ow_reset();//总线复位
write_byte(0xCC);//发SkipROM命令
write_byte(0xBE);//发读命令
temp_data[0]=read_byte();//温度低8位
temp_data[1]=read_byte();//温度高8位
ow_reset();
write_byte(0xCC);//SkipROM
write_byte(0x44);//发转换命令
}
work_temp()//温度数据处理函数
{
ucharn=0;//
if(temp_data[1]>127)
{temp_data[1]=(256-temp_data[1]);temp_data[0]=(256-temp_data[0]);n=1;}//负温度求补码
display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//
display[3]=display[4]/100;
display[1]=display[4]%100;
display[2]=display[1]/10;
display[1]=display[1]%10;
if(!
display[3]){display[3]=0x0A;if(!
display[2]){display[2]=0x0A;}}//最高位为0时都不显示
if(n){display[3]=0x0B;}//负温度时最高位显示"-"
}
main()//主函数
{
Disdata=0xff;//初始化端口
discan=0xff;
for(h=0;h<4;h++){display[h]=8;}//开机显示8888
ow_reset();//开机先转换一次
write_byte(0xCC);//SkipROM
write_byte(0x44);//发转换命令
for(h=0;h<500;h++)
{scan();}//开机显示"8888"2秒
while
(1)
{
read_temp();//读出18B20温度数据
work_temp();//处理温度数据
for(h=0;h<500;h++)
{scan();}//显示温度值2秒
}
}
5系统设计仿真及调试
5.1硬件调试
先排除硬件电路故障,包括设计性错误和工艺性故障,一般原则先静态后动态。
利用万用表或测试仪器,检查电路中的各器件及引脚是否连接正确,是否有短路故障。
先要将单片机AT89S52芯片取下,对电路板进行通电检查,通过观察看是否有异常,然后用万用表测试个电源电压,若这些都没问题,则接上仿真机进行联机调试观察各接线口线路是否正常。
5.2软件调试
软件调试是利用仿真工具进行再线仿真调试,我们用KELL软件调试,处发现和解决程序错误外,还可以发现硬件上的问题。
总结
经过将近两周的单片机课程设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思啊!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有有巧妙的程序算法,虽然以前写过几次程序,但我觉得写好一个程序并不是一件简单的事,举个例子,在列控制位选择调试时,我刚开始只注意到我用的是74LS04非门驱动,所以就给列控制位都送低电平过去,后来调试时发现并不是这样的数码管并没有显示出我想要的数字来,后来在分析硬件时发现我用的是共阴数码管要送高低平过去才行,还有我的温度数据处理函数没有用直接的加减而是用于上一位BCD码来解决,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只有学习理论有些东西是很难理解的,更谈不上掌握。
还有在硬件调试过程中发现程序捎进单片机中就没有一点反应,后来我终于找到问题的所在——在选材时就出现了问题了,数码管分压电阻选错了,电阻阻值太大了,导致数码管的电压不足直接导致数码管不亮,后来我换了个电阻小,在调试是数码管就亮了,那是我很兴奋,也很受教训,做任何是都要从刚开始时就认真做起,要一丝不苟,要精心细心,不能有一刻含糊,只有这样才能做好事,做大事!
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
最后,还要感谢我的指导老师和我们热心的同学,在他们的帮助下我的课程设计才能顺利完成,谢谢你们!
参考文献
[1]杨居义.单片机课程设计指导.北京:
清华大学出版社.2009年9月
[2]李广弟.单片机基础.北京:
北京航空航天大学出版.2007年5月
[3]阎石.单片机技术与应用基础.北京:
高等教育出版社.2006年7月
[4]李朝青.单片机原理及接口技术.杭州.北京航空航天大学出版社.2006年3月
[5]王守中.单片机的开发入门与典型实例.北京:
人民邮电出版社.2002年8月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于AT89S52单片机的数字温度计设计 黎奔腾 基于 AT89S52 单片机 数字 温度计 设计 奔腾