基于51单片机的测温数字温度计的最小系统.docx
- 文档编号:1597734
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:12
- 大小:456.74KB
基于51单片机的测温数字温度计的最小系统.docx
《基于51单片机的测温数字温度计的最小系统.docx》由会员分享,可在线阅读,更多相关《基于51单片机的测温数字温度计的最小系统.docx(12页珍藏版)》请在冰豆网上搜索。
基于51单片机的测温数字温度计的最小系统
●第一章设计目的——————————————3
●第二章设计内容—————————————3
●第三章分析———————————————7
●第四章示例程序——————————————7
●第五章总结———————————————13
一、设计目的:
利用51单片机和ds18b20等元件设计一个实时的测量温度和报警的小系统。
系统可以通过数码管显示实时的温度值,显示的温度的精度是0.01℃。
然后,还可以利用按键进行最高温度值和最低温度值的设定,当温度超过设定的最高温度值的时候,蜂鸣器会响,并且会有一个led灯亮起;当温度值低于设定的最低温度值的时候,蜂鸣器会响,但是led灯不会亮。
二、设计内容:
温度计电路设计总体设计方框图如图1所示,控制器采用单片机8051,温度传感器采用DS18B20,显示部分是一个四位一体的数码管,设置电路部分是3个按键和3个用于指示的led灯,报警电路部分是一个led灯和一个蜂鸣器。
图1
1、温度传感器
DS18B20与8051单片机连接非常简单,只需将DS18B20信号线与单片机一位I/O线相连,且一位I/O线可连接多个DS18B20,以实现单点或多点温度测量。
温度计仿真电路部分如图2所示。
图2
Ds18b20需要严格的协议以确保数据的完整性。
协议包括集中单线信号类型:
复位脉冲.存在脉冲.写0.写1.读0和读1。
所有这些信号,处存在脉冲外,都是由总线控制器发出的。
和ds18b20间的任何通讯都是需要以初始化序列开始,初始化序列见图3,一个复位脉冲跟着一个存在脉冲表明ds18b20已经准备好发送和接收数据。
图3
Ds18b20的读写时序图如图4所示,
Ds18b20的几个常用的功能命令如下:
CCH跳过ROM指令
44H温度转换指令
BEH读SRAM
4EH写SRAM
三、分析:
1.程序一开始测得温度并储存,然后对按键1进行判断,若按键1未按下则直接跳到第四步;
2.若按键1按下,则开始设置最高温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。
然后再判断按键1是否按下,若按下则执行第三步,否则在设定最高温度的程序里面不停循环。
3.若按键1按下,则开始设置最低温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。
然后再判断按键1是否按下,若按下则执行第四步,否则在设定最低温度的程序里面不停循环。
4.最后,判断实时温度是否越过界限,若越过则按不同的情况进行报警,并对实时温度进行显示。
四、示例程序:
#include"reg52.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//无小数点
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//有小数点
ucharwei[]={0xf7,0xfb,0xfd,0xfe};//位选
uchartable2[4];
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitDQ=P3^7;
sbitled=P1^4;
sbitspeaker=P1^3;
inti,j,m=0;
floattemp1[]={0,30,25};
voidDelay(ucharms)
{
uchari,j;
for(j=0;j for(i=0;i<160;i++); } voidfen() { inttemp=temp1[m%3]; table2[3]=temp/1000; table2[2]=temp/100-table2[3]*10; table2[1]=temp/10-temp/100*10; table2[0]=temp-temp/10*10; } voidcharge() { if(temp1[0]<=100*temp1[2]) { speaker=0; } else { if(temp1[0]>=100*temp1[1]) { speaker=0; led=0; } else { led=1; speaker=1; } } } //**判断按键的三个函数 ucharpkey1() { if(key1==0) { Delay(10); if(key1==0) { while(! key1); return1; } } return0; } ucharpkey2() { if(key2==0) { Delay(10); if(key2==0) { while(! key2); return1; } } return0; } ucharpkey3() { if(key3==0) { Delay(10); if(key3==0) { while(! key3); return1; } } return0; } //******** voidplus() { fen(); for(j=0;j<4;j++) { if(pkey2()) { table2[1]=(table2[1]+1)%10;//十位 temp1[m%3]=table2[3]*1000+table2[2]*100+table2[1]*10+table2[0]; } if(pkey3()) { table2[0]=(table2[0]+1)%10;//个位 temp1[m%3]=table2[3]*1000+table2[2]*100+table2[1]*10+table2[0]; } fen(); P0=wei[j]; if(j<2) { P2=duan[table2[j]]; } elseif(j==2) { P2=0x00; } else { if(m%3==1) P2=0x76; else P2=0x38; } } } voidsettemp() { while (1) { plus(); if(pkey1()) { m++; settemp(); } if(m%3==0)break; } } //ds18b20的相关定义函数 /*--------------延时子程序函数------------*/ voiddelay5(ucharn) { do { _nop_(); _nop_(); _nop_(); n--; } while(n); } /*--------------初始化函数----------------*/ voidinit_ds18b20(void) { //ucharx=0; delay5 (1); DQ=0; delay5(120); DQ=1; delay5(16); //delay5(80); while(DQ! =1); } /*--------------读取一字节函数-------------*/ ucharreadbyte(void) { uchari=0; uchardate=0; for(i=8;i>0;i--) { DQ=0; delay5 (1); DQ=1;//15微秒内拉释放总线 date>>=1; if(DQ) date|=0x80; delay5(11); } return(date); } /*--------------写一字节函数---------------*/ voidwritebyte(uchardat) { uchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01;//写"1" delay5(12);//有段时间要延时60微秒 DQ=1; dat>>=1; delay5(5); } } /*--------------读取温度函数---------------*/ floatretemp(void) { uchara,b; floattt; uintt; init_ds18b20(); writebyte(0xCC); writebyte(0x44); init_ds18b20(); writebyte(0xCC); writebyte(0xBE); a=readbyte(); b=readbyte(); t=b; t<<=8; t=t|a; tt=t*0.0625; return(tt); } voidmain() { while (1)//动态显示 { temp1[0]=retemp(); temp1[0]=100*temp1[0]; fen(); if(pkey1()) { m++; settemp(); } else for(j=0;j<4;j++) { for(i=0;i<4;i++) { charge(); P0=wei[i]; if(i==2) { P2=duan[table2[i]+10]; } else P2=duan[table2[i]]; Delay(10);} } } } 五、结论: 在做这个系统的过程中,有很多的东西还不懂,很多都还需要去查资料,在设计温度传感器的程序的时候,要对它的时序图了解之后才能设计正确的程序,否则,根本无法下手;在利用protues仿真的过程中,最开始有很多的操作也还不知道,然后,有些原件的某些参数还要设置正确后才有用,比如说蜂鸣器的电压的参数等;在实际焊接电路板的过程中也会碰到一些问题,比如说对某个原件的引脚的不了解就可能会把电路焊错,比如说在最开始的时候,我就把一个四个引脚的按键给焊错了,导致按键完全不起作用,当然在焊接电路的过程中也不能大意。 总之,不管是哪一步都需要非常的细心,然后碰到不懂的东西的时候要多到网上查查,但是不能相信查到的某一个结果,而是要综合一些方法后再自己总结。 文档来源网络,版权归原作者。 如有侵权,请告知,我看到会立刻处理。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 测温 数字 温度计 最小 系统