18b20测温数码管显示实验_第1页
18b20测温数码管显示实验_第2页
18b20测温数码管显示实验_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、18b20测温数码管显示实验-精确到小数点后4位/滑国虎于09.9.20完成/DS18B20的读写程序,数据脚P1.5/温度传感器18B20程序,采用器件默认的12位转化/最大转化时间750微秒,显示温度-55到+125度,显示精度/为0.1度,显示采用4位LED共阳显示测温值/P0口为段码输入,P27P21为位选/*/#include"reg51.h"#include"intrins.h"/_nop_();延时函数用#defineDisdataP0/段码输出口#definediscanP2/扫描口#defineucharunsignedchar#def

2、ineuintunsignedintsbitDQ=P1A5;/温度输入口sbitDIN=P0A7;/LED小数点控制uinth;uinttemp;/ucharcodedis_712=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮&q

3、uot;"-"ucharcodescan_con7=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd;/歹U扫描控制字读出温度暂放uchardatauchardatatemp_data2=(0x00,0x00;/显示单元数据,display7=0x00,0x00,0x00,0x00,0x00,0x00,0x00;/数据和一个运算暂用/*11us延时函数*/voiddelay(uintt)/11usfor(;t>0;t-);/*DS18B20复位函数*/ow_reset(void)charpresence=1;while(presence)while

4、(presence)DQ=1;_nop_();_nop_();/从高拉倒低DQ=0;delay(50);/550usDQ=1;delay(6);/66uspresence=DQ;/presence=0复位成功,继续下一步delay(45);/延时500uspresence=DQ;DQ=1;/拉高电平向1-/*DS18B20写命令函数*/WIRE总线上写1个字节voidwrite_byte(ucharval)uchari;for(i=8;i>0;i-)DQ=1;_nop_();_nop_();/从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();/5usDQ

5、=val&0x01;/最低位移出delay(6);/66usval=val/2;/右移1位DQ=1;delay(1);从总/*DS18B20读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_();/4usDQ=1;_nop_();_nop_();_nop_();_nop_();/4usif(DQ)value|=0x80;delay(6);/66us

6、DQ=1;return(value);/*显示扫描函数*scan()(chark;for(k=0;k<7;k+)/4位LED扫描控制(Disdata=dis_7displayk;/数据显示P0if(k=2)DIN=0;/小数点显示P0.7discan=scan_conk;/位选P2delay(150);discan=0xff;读出温度函数*/*/read_temp()(ow_reset();/总线复位delay(200);write_byte(0xcc);/发命令write_byte(0x44);/发转换命令ow_reset();delay(1);write_byte(0xcc);/发命

7、令write_byte(0xbe);temp_data0=read_byte();/读温度值的低字节temp_data1=read_byte();/读温度值的高字节temp=temp_data1;temp=temp&0x0f;/去掉符号位temp=temp<<8;/temp为16位temp=temp|temp_data0;/两字节合成一个整型变量。returntemp;/返回温度值,具体的温度数值/*温度数据处理函数*/二进制高字节的低半字节和低字节的高半字节组成一字节,这个/字节的二进制转换为十进制后,就是温度值的白、十、个位值,而剩/下的低字节的低半字节转化成十进制后,

8、就是温度值的小数部分/*/work_temp(uinttem)/显示(uinttemp_h,temp_l;ucharn=0;/n=0符号为正/*if(tem>6348)/温度值正负判断(tem=65536-tem;n=1;/负温度求补码,标志位置n=1*/if(tem&0x0800)/为负时(tem=temp+1;n=1;temp_h=tem>>4;/去掉小数temp_l=tem&0x000f;/取出小数temp_l=temp_l*625;/把小数转化为整数display0=temp_h/100;temp_h=temp_h%100;display1=temp_

9、h/10;display2=temp_h%10;display3=temp_l/1000;temp_l=temp_l%1000;display4=temp_l/100;temp_l=temp_l%100;display5=temp_l/10;/*display6=temp_l%10;符号位显示判断*/if(!display0)/display0=0display0=0xff;/最高位为0时不显示if(!display1)display1=0xff;/次高位为0时不显示if(n)/负温度n=1display0=0x0b;/负温度时最高位显示"-",10111111/*主函数*/main()Disdata=0xff;/初始化端口P0discan=0xff;/P2for(h=0;h<4;h+)/开机显示"0000"(displayh=0;ow_reset();/开机先转换一次write

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论