1、电子技术课程设计报告题 目: 数字温度传感器电路 学 年: 0809 学 期: 1专 业: 电子信息工程 班 级:06 学 号: 0611102027 姓 名:指导教师及职称: 时 间: 2023年12月22一、 设计目的1. 熟悉数字温度传感器电路的引脚安排。2. 掌握数字温度传感器电路各芯片的逻辑功能及使用方法。3. 了解数字温度传感器电路结构及其接线方法。4. 了解数字温度传感器电路的组成及工作原理。5. 熟悉数字温度传感器电路的设计与制作。二、 设计要求1设计指标(1) 根本范围-50-110。(2) 精度误差小于0.5。(3) LED数码直读显示。2设计要求(1) 实现数字报数。(2
2、) 可以任意设定温度的上下限显示功能。(3) 用两只LED数码管来显示当前温度。三、 设计原理及其框图主 控 制 器LED显 示温 度 传 感 器单片机复位时钟振荡电源1数字温度传感器的构成图3-1 数字温度传感器的组成框图晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768z的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。显示电路显示电路采用4位共阳LED数码管,从P3口RXD,TXD串口输出段码。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点
3、组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5V;零待机功耗;温度以9或12位数字;四、 元器件1实验中所需的器材 5V电源。 DS18B2O 单片机AT89S52。 共阳八段数码管2个。 电阻假设干 电容假设干 电源接头。 LED灯2芯片内部结构图及引脚图五原理图 和PCB图 数字温度传感器原理图如下:PCB图如下六电路程序系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。#include reg51.h#include intrins.h /_nop_();延时函数用#define Disdata P1 /段码输出口#def
4、ine discan P2 /扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P37; /温度输入口sbit DIN=P07; /LED小数点控制uint h; uint temp;/xxxxxxxxxxxxxx温度小数局部用查表法xxxxxxxxxxx/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09uchar code dis_712=0xc0,0xf9,0xa4,0
5、xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/共阳LED段码表 0 1 2 3 4 5 6 7 8 9 不亮 - uchar code scan_con4=0x7f,0xbf,0xdf,0xef; /列扫描控制字uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一void delay(uint t) for (;t0;t-);scan() char k; for(k=0;k0;i-) DQ=1;_nop
6、_();_nop_(); /从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); /5 us DQ=val&0x01; /最低位移出 delay(6); /66 us val=val/2; /右移1位 DQ=1; delay(1);/从总线上取1个字节uchar read_byte(void)uchar i;uchar value=0;for(i=8;i0;i-) DQ=1;_nop_();_nop_(); value=1; DQ=0;_nop_();_nop_();_nop_();_nop_(); /4 us DQ=1;_nop_();_nop_();_no
7、p_();_nop_(); /4 us if(DQ)value|=0x80; delay(6); /66 usDQ=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_data0=read_byte(); /读温度值的第字节 temp_data1=read_byte(); /读温度值的高字节 temp=
8、temp_data1; temp6348) / 温度值正负判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem&0x0f; / 取小数局部的值 display0=ditabdisplay4; / 存入小数局部显示值 display4=tem4; / 取中间八位,即整数局部的值 display3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10; / 取十位数据暂存 display1=display1%10; /xxxxxxxxxxxxxxxxxx符号位显示判断xxxxxxxxxxxxxxxxxxxxxxxxxx/ if(!display3) display3=0x0a; /最高位为0时不显示 if(!display2) display2=0x0a; /次高位为0时不显示 if(n)display3=0x0b; /负温度时最高位显示-/xxxxxxxxxxxxxxxx主函数xxxxxxxxxxxxxxxxxxxxxxxx/main() Disdata=0xff; /初始化端口 discan=0xff; for(h=0;h4;h+) /开机显示0000 displayh=0; ow_reset();