单片机温度采集程序.doc

单片机温度采集程序.doc

ID:55971682

大小:293.00 KB

页数:9页

时间:2020-06-18

单片机温度采集程序.doc_第1页
单片机温度采集程序.doc_第2页
单片机温度采集程序.doc_第3页
单片机温度采集程序.doc_第4页
单片机温度采集程序.doc_第5页
资源描述:

《单片机温度采集程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、单片机温度采集程序用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的读时序对于DS18B

2、20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。本程序实现温度的采集并且实时在数码管上显示出来。具体程序如下:/----

3、-------------------------------------------名称:18B20温度传感器日期:2009.5修改:无内容:18B20单线温度检测的应用样例程序,请将18b20插紧,然后在数码管可以显示XX.XC,C表示摄氏度,如显示25.3C表示当前温度25.3度------------------------------------------------/#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#include#defineucharunsignedcha

4、r#defineuintunsignedint;///定义端口///sbitseg1=P2^0;sbitseg2=P2^1;sbitseg3=P2^2;sbitDQ=P1^3;//ds18b20端口sfrdataled=0x80;//显示数据端口///全局变量///uinttemp;ucharflag_get,count,num,minute,second;ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数码管段码表共阳ucharstr[6];///函数声明///voiddelay1(ucharMS)

5、;unsignedintReadTemperature(void);voidInit_DS18B20(void);unsignedcharReadOneChar(void);voidWriteOneChar(unsignedchardat);voiddelay(unsignedinti);///主函数///main(){unsignedcharTempH,TempL;TMOD=0x01;//定时器设置TH0=0xef;TL0=0xf0;IE=0x82;TR0=1;P2=0x00;count=0;while(1){str[5]=0x39;//显示C符号str[1]=tab[TempH/100];

6、//十位温度str[2]=tab[(TempH%100)/10];//十位温度str[3]=tab[(TempH%100)%10]0x80;//个位温度,带小数点str[4]=tab[TempL];if(flag_get==1)//定时读取当前温度{temp=ReadTemperature();if(temp&0x8000){str[0]=0x40;//负号标志temp=~temp;//取反加1temp+=1;}elsestr[0]=0;TempH=temp>>4;TempL=temp&0x0F;TempL=TempL6/10;//小数近似处理flag_get=0;}}}///定时器中断///

7、voidtim(void)interrupt1using1//中断,用于数码管扫描和温度检测间隔{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=0;dataled=str[0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。