一、实验目的
通过对基于单片机的温度传感器的制作,进一步加深了实践动手设计能力和对单片机知识的巩固,从而让自己为以后的动手制作做好铺垫。
二、实验材料
发光二级管一个、三极管S8850两个、温度传感器18B20三极管一个、插脚若干、12兆晶振一个、USB接口一个、开关一个、30皮发电容两个、电容CD110一个、C52单片机一个插槽一个、2位数码显示管一个、九脚排阻A103J一个、
470k电阻两个、120Ω电阻一个、1000Ω电阻一个、PCB板一块。
三、实验原理
接触式温度传感器的检测部分与被测对象有良好的接触,又称温度计。温度计通过传导或对流达到热平衡,从而使温度计的示值能直接表示被测对象的温度。一般测量精度较高。在一定的测温范围内,温度计也可测量物体内部的温度分布。但对于运动体、小目标或热容量很小的对象则会产生较大的测量误差。
原理电路图如下:
四、实验总结
通过本次实验,了解自己在动手能力上的不足和对单片机知识的缺乏,让自己更清楚自己需要认真多家努力去弥补。同时也要加强与同学的交流,让自己有更大更快的进步。
五、程序编码
//18B20单线温度检测的应用样例程序
#include #include #include #define uchar unsigned char #define uint unsigned int; /*****************************************************************************/ /**********系统管脚定义说明 DS18B20数据口为P3^7 数码管数据口为 ********/ sbit DQ=P3^7;//ds18b20 端口 sfr dataled=0x80;//显示数据端口 /**********************************************************************/ uchar temp; uchar flag_get,count,num,minute,second; uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,/*9*/};//数码管段码表 共阳 uchar a,b; /***********************************************************************/ void delay1(uchar MS); unsigned char ReadTemperature(void); void Init_DS18B20(void); unsigned char ReadOneChar(void); void WriteOneChar(unsigned char dat); void delay(unsigned int i); /************************************************************************/ main() { TMOD|=0x01;//定时器设置 TH0=0xef; TL0=0xf0; IE=0x82; TR0=1;//启动定时器 P2=0x00; count=0; while(1) { a=tab[temp/10]; //十位温度 b=tab[temp%10]; //个位温度 if(flag_get==1) //定时读取当前温度 { temp=ReadTemperature()-1;/*********(括号后面的数字为温度校准,根据自己系统的误差,自己调节温度误差即可.现在默认-1)********/ flag_get=0; } } } void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔 { TH0=0xef;//定时器重装值 TL0=0xf0; num++; if (num==50) {num=0; flag_get=1;//标志位有效 second++; if(second>=60) {second=0; minute++; } } count++; if(count==1) {P2=0xbf; dataled=a;}//数码管扫描 if(count==2) {P2=0x7f; dataled=b;count=0;} /*if(count==3) { P1=2; dataled=str[2]; count=0;}*/ } /*************************************************************************************/ void delay(unsigned int i)//延时函数 { while(i--); } /***************************************************************************************/ //18b20初始化函数 void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(10); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); } //读一个字节 unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay(5); } return(dat); } //写一个字节 void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1; } delay(5); } //读取温度 unsigned char ReadTemperature(void) { unsigned char a=0; unsigned char b=0; unsigned char t=0; //float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay(200); Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); b=ReadOneChar(); b<<=4; b+=(a&0xf0)>>4; t=b; return(t); } 六、参考文献 《单片机原理与应用》第2版 编著 赵德安 《单片机原理及应用》 编著 韩俊峰、海涛、陈文辉机械工业出版社 机械工业出版社 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务