数字温度传感器Word格式.docx
- 文档编号:16601411
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:9
- 大小:160.54KB
数字温度传感器Word格式.docx
《数字温度传感器Word格式.docx》由会员分享,可在线阅读,更多相关《数字温度传感器Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵显示电路
显示电路采用4位共阳LED数码管,从P3口RXD,TXD串口输出段码。
DS18B20的性能特点如下:
独特的单线接口仅需要一个端口引脚进行通信;
多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
无须外部器件;
可通过数据线供电,电压范围为3.0~5.5V;
零待机功耗;
温度以9或12位数字;
四、元器件
1.实验中所需的器材
Ø
5V电源。
DS18B2O
单片机AT89S52。
共阳八段数码管2个。
电阻若干
电容若干
电源接头。
LED灯
2.芯片内部结构图及引脚图
五.原理图和PCB图
数字温度传感器原理图如下:
PCB图如下
六.电路程序
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
#include"
reg51.h"
intrins.h"
//_nop_();
延时函数用
#defineDisdataP1//段码输出口
#definediscanP2//扫描口
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
//温度输入口
sbitDIN=P0^7;
//LED小数点控制
uinth;
uinttemp;
//**************温度小数部分用查表法***********//
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]={0x7f,0xbf,0xdf,0xef};
//列扫描控制字
uchardatatemp_data[2]={0x00,0x00};
//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
//显示单元数据,共4个数据和一
voiddelay(uintt)
{
for(;
t>
0;
t--);
}
scan()
chark;
for(k=0;
k<
4;
k++)//4位LED扫描控制
Disdata=dis_7[display[k]];
//数据显示
if(k==1){DIN=0;
}//小数点显示
discan=scan_con[k];
//位选
delay(300);
/****************DS18B20复位函数************************/
ow_reset(void)
charpresence=1;
while(presence)
while(presence)
{
DQ=1;
_nop_();
//从高拉倒低
DQ=0;
delay(50);
//550us
DQ=1;
delay(6);
//66us
presence=DQ;
//presence=0复位成功,继续下一步
}
delay(45);
//延时500us
presence=~DQ;
//拉高电平
/****************DS18B20写命令函数************************/
//向1-WIRE总线上写1个字节
voidwrite_byte(ucharval)
{
uchari;
for(i=8;
i>
i--)
//从高拉倒低
DQ=0;
//5us
DQ=val&
0x01;
//最低位移出
delay(6);
val=val/2;
//右移1位
}
delay
(1);
//从总线上取1个字节
ucharread_byte(void)
uchari;
ucharvalue=0;
for(i=8;
value>
>
=1;
//4us
if(DQ)value|=0x80;
return(value);
read_temp()
ow_reset();
//总线复位
delay(200);
write_byte(0xcc);
//发命令
write_byte(0x44);
//发转换命令
write_byte(0xbe);
temp_data[0]=read_byte();
//读温度值的第字节
temp_data[1]=read_byte();
//读温度值的高字节
temp=temp_data[1];
temp<
<
=8;
temp=temp|temp_data[0];
//两字节合成一个整型变量。
returntemp;
//返回温度值
/****************温度数据处理函数************************/
work_temp(uinttem)
ucharn=0;
if(tem>
6348)//温度值正负判断
{tem=65536-tem;
n=1;
}//负温度求补码,标志位置1
display[4]=tem&
0x0f;
//取小数部分的值
display[0]=ditab[display[4]];
//存入小数部分显示值
display[4]=tem>
//取中间八位,即整数部分的值
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;
//最高位为0时不显示
display[2])
display[2]=0x0a;
//次高位为0时不显示
if(n){display[3]=0x0b;
}//负温度时最高位显示"
/****************主函数************************/
main()
Disdata=0xff;
//初始化端口
discan=0xff;
for(h=0;
h<
h++)//开机显示"
0000"
{display[h]=0;
}
//开机先转换一次
//SkipROM
100;
{scan();
while
(1)
work_temp(read_temp());
//处理温度数据
scan();
//显示温度值
七.设计总结
1.很感谢老师提供一个机会,让我们实践单片机和温度伟传感器。
经过近三周时间辛勤努力查找资料和焊接电路。
功夫不负有心人,终于按计划完成了我的数字温度计的设计,单片机能实现温度测量和报警。
虽然设计得很简单,功能单调,焊接电路粗糙,但从心里来说,还是非常高兴,回想以前遇到的困难,心里更美滋滋的,毕竟这次设计通过自己勤劳所得的结晶。
高兴之余不得不深思总结。
2.在本次设计过程中,我发现自己有很多不足之处。
虽然以前也做过硬件电路设计,但没有软件设计,这次的设计真的让我难以忘记,而且长进很多知识。
单片机课程设计最重要就在于软件编程序的设计,需要有很清晰的思路。
以前写过一些简单的程序,但没有像这次这么复杂。
这次采用了很多指令,例如调表指令,比较指令,跳转指令等等。
以前用的都是清零,置1指令,用在流水线。
这次更进一步认识单片机和汇编程序。
3.从这次的课程设计中,我学习到很多知识,也知道自己的不足之处,在以后的学习中,仔细认真,注重细节,要理论联系实际,把我们所学到的知识运用到实际当中,并把实践中发现的问题弥补理论,学习单片机也是如此,这次最重要认识在于程序,程序只有在经常写和读中才能提高,并从中找到乐趣。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 温度传感器
![提示](https://static.bdocx.com/images/bang_tan.gif)