文件名称:
DS18B20+数字温度计使用-数码管
开发工具:
文件大小: 40kb
下载次数: 0
上传时间: 2010-04-03
详细说明:
#include #include #define uchar unsigned char bit Tflag;//温度正负标志 sbit DQ = P3^7; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00,0x40}; //0x40 负 unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char dispbuf[8]={0,0,0,0,0,0,0,0}; void digitalshow(unsigned char a2,unsigned char a1,unsigned char a0) { unsigned char i; dispbuf[0]=a0; dispbuf[1]=a1; dispbuf [2]=a2; for(i=0;i<3;i++) { P2=0xff; //关闭所有显示 P0=dispcode[dispbuf[i]]; P2=dispbitcode[i]; } } /********** 该程序为总线上只有一个器件 **********/ //毫秒延时 11.0592 Mhz void dmsec (unsigned int count) { unsigned int i; // 1ms延时 while (count--) { for (i=0;i<125;i++){} } } void Delay(unsigned int num)// 延时函数 { while( --num ); } //复位脉冲 void tmreset (void) { DQ = 0; Delay(90); // 精确延时 大于 480us DQ = 1; Delay(4); // 90,4 可以小范围变化 } //存在脉冲 void tmpre (void) { while (DQ); while (~DQ); Delay(4); } //读一个位 bit tmrbit (void) { unsigned int i; bit dat; DQ = 0; i++; // i++;大概1us DQ = 1; i++; i++; dat = DQ; Delay(8); return (dat); } //读一个比特 unsigned char tmrbyte (void) { unsigned char i,j,dat; dat = 0; for (i=1;i<=8;i++) { j = tmrbit (); dat = (j << 7) | (dat >> 1); } return (dat); } //写一个比特 void tmwbyte (unsigned char dat) { unsigned int i; unsigned char j; bit testb; for (j=1;j<=8;j++) { testb = dat & 0x01; dat = dat >> 1; // 从低位开始? if (testb) {// Write 1 DQ = 0; // 先拉低 i++; i++; // >1us DQ = 1; Delay(4); } else {// Write 0 DQ = 0; Delay(4); // 大一点 没影响,但不能太大,写一个位在30us内 DQ = 1; i++; i++; // 再拉高 } } } //ds1820开始转换 void tmstart (void) { dmsec(1); tmreset (); tmpre (); dmsec (1); tmwbyte (0xcc); // skip rom tmwbyte (0x44); // 转换 } //读取温度 unsigned char tmrtemp (void) { unsigned char a,b,y1,y2,y3; tmreset (); tmpre (); dmsec (1); tmwbyte (0xcc); // skip rom tmwbyte (0xbe); // 转换 a = tmrbyte (); // LSB低8位 b = tmrbyte (); // MSB高8位 if((b & 0x80)==0x80) //判断温度正负 { b=~b;a=~a+1; //负温度处理(DS18B20的负温度是正的反码,即将它取反+1,就得到正的温度) y1=a>>4; //降低精度(去掉小数点) y2=b<<4; //减小测量范围(-55°C---99°C) y3=y1 | y2; Tflag=0; } else { y1=a>>4; y2=b<<4; y3=y1 | y2; Tflag=1; } return(y3); } /********** MAIN **********/ void main (void) { uchar last; uchar lsb,msb; uchar i; tmstart(); dmsec(450); // 初始化ds18b20 while(1) { tmstart(); // ds1820开始转换 dmsec(2); last=tmrtemp(); // 读取温度 msb=last/10; lsb=last%10; for(i=255;i>0;i--) { if(Tflag==1) {digitalshow(16,msb,lsb);} else {digitalshow(17,msb,lsb);} } } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.