数字温度传感器电路设计报告.docx
《数字温度传感器电路设计报告.docx》由会员分享,可在线阅读,更多相关《数字温度传感器电路设计报告.docx(10页珍藏版)》请在冰豆网上搜索。
数字温度传感器电路设计报告
电子技术课程设计报告
题目:
数字温度传感器电路
学年:
08—09学期:
1
专业:
电子信息工程班级:
06
学号:
0611102027姓名:
指导教师及职称:
时间:
2008年12月22
一、设计目的
1.熟悉数字温度传感器电路的引脚安排。
2.掌握数字温度传感器电路各芯片的逻辑功能及使用方法。
3.了解数字温度传感器电路结构及其接线方法。
4.了解数字温度传感器电路的组成及工作原理。
5.熟悉数字温度传感器电路的设计与制作。
二、设计要求
1.设计指标
(1)基本范围-50℃-110℃。
(2)精度误差小于0.5℃。
(3)LED数码直读显示。
2.设计要求
(1)实现数字报数。
(2)可以任意设定温度的上下限显示功能。
(3)用两只LED数码管来显示当前温度。
三、设计原理及其框图
1.数字温度传感器的构成
图3-1数字温度传感器的组成框图
⑴晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵显示电路
显示电路采用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"
#include"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_();_nop_();//从高拉倒低
DQ=0;
delay(50);//550us
DQ=1;
delay(6);//66us
presence=DQ;//presence=0复位成功,继续下一步
}
delay(45);//延时500us
presence=~DQ;
}
DQ=1;//拉高电平
}
/****************DS18B20写命令函数************************/
//向1-WIRE总线上写1个字节
voidwrite_byte(ucharval)
{
uchari;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;_nop_();_nop_();_nop_();_nop_();//5us
DQ=val&0x01;//最低位移出
delay(6);//66us
val=val/2;//右移1位
}
DQ=1;
delay
(1);
}
//从总线上取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();//总线复位
delay(200);
write_byte(0xcc);//发命令
write_byte(0x44);//发转换命令
ow_reset();
delay
(1);
write_byte(0xcc);//发命令
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>>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;//最高位为0时不显示
if(!
display[2])
{
display[2]=0x0a;//次高位为0时不显示
}
}
if(n){display[3]=0x0b;}//负温度时最高位显示"-"
}
/****************主函数************************/
main()
{
Disdata=0xff;//初始化端口
discan=0xff;
for(h=0;h<4;h++)//开机显示"0000"
{display[h]=0;}
ow_reset();//开机先转换一次
write_byte(0xcc);//SkipROM
write_byte(0x44);//发转换命令
for(h=0;h<100;h++)//开机显示"0000"
{scan();}
while
(1)
{
work_temp(read_temp());//处理温度数据
scan();//显示温度值
}
}
七.设计总结
1.很感谢老师提供一个机会,让我们实践单片机和温度伟传感器。
经过近三周时间辛勤努力查找资料和焊接电路。
功夫不负有心人,终于按计划完成了我的数字温度计的设计,单片机能实现温度测量和报警。
虽然设计得很简单,功能单调,焊接电路粗糙,但从心里来说,还是非常高兴,回想以前遇到的困难,心里更美滋滋的,毕竟这次设计通过自己勤劳所得的结晶。
高兴之余不得不深思总结。
2.在本次设计过程中,我发现自己有很多不足之处。
虽然以前也做过硬件电路设计,但没有软件设计,这次的设计真的让我难以忘记,而且长进很多知识。
单片机课程设计最重要就在于软件编程序的设计,需要有很清晰的思路。
以前写过一些简单的程序,但没有像这次这么复杂。
这次采用了很多指令,例如调表指令,比较指令,跳转指令等等。
以前用的都是清零,置1指令,用在流水线。
这次更进一步认识单片机和汇编程序。
3.从这次的课程设计中,我学习到很多知识,也知道自己的不足之处,在以后的学习中,仔细认真,注重细节,要理论联系实际,把我们所学到的知识运用到实际当中,并把实践中发现的问题弥补理论,学习单片机也是如此,这次最重要认识在于程序,程序只有在经常写和读中才能提高,并从中找到乐趣。