ds18b20共阴数码管显示一直是00.00 求问为什么 15
我的程序#include<reg51.H>#include<absacc.H>#include<intrins.h>#include<stdio.h>#defineuch...
我的程序
#include<reg51.H>#include<absacc.H>#include <intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intuchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code TAB1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; sbit DQ=P3^3;void delay(uint i){ while(i--);}void DelayMS(uint ms){uchar i;while(ms--)for(i=0;i<120;i++);}void display(int k){P2=0xf7;P0=TAB[k%10];DelayMS(5);P2=0xfb;P0=TAB[k/10%10];DelayMS(5);P2=0xfd;P0=TAB1[k/100%10];DelayMS(5);P2=0xfe;P0=TAB[k/1000];DelayMS(5);} void init_DS(void){uchar x=0;DQ=1;delay(8);DQ=0;delay(85);DQ=1;delay(14);x=DQ;delay(20);}Read(void){uchar i=0;uchar dat=0;for(i=8;i>0;i--){DQ=1;delay(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}void write(uchar dat){ uchar i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}Readtem(void){uchar a=0;uchar b=0;uchar t=0,t1;init_DS(); write(0xcc);write(0x44);delay(125);init_DS();write(0xcc);write(0xbe);a=Read();b=Read();t1=(a&0x0f)*0.0625;t=((b<<4)|(a>>4));if(t>128){t=~t+1;}t=t+t1;return(t); }void main(){float tp; while(1){ tp=Readtem();tp=tp*100; display(tp); }} 展开
#include<reg51.H>#include<absacc.H>#include <intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intuchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code TAB1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; sbit DQ=P3^3;void delay(uint i){ while(i--);}void DelayMS(uint ms){uchar i;while(ms--)for(i=0;i<120;i++);}void display(int k){P2=0xf7;P0=TAB[k%10];DelayMS(5);P2=0xfb;P0=TAB[k/10%10];DelayMS(5);P2=0xfd;P0=TAB1[k/100%10];DelayMS(5);P2=0xfe;P0=TAB[k/1000];DelayMS(5);} void init_DS(void){uchar x=0;DQ=1;delay(8);DQ=0;delay(85);DQ=1;delay(14);x=DQ;delay(20);}Read(void){uchar i=0;uchar dat=0;for(i=8;i>0;i--){DQ=1;delay(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}void write(uchar dat){ uchar i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}Readtem(void){uchar a=0;uchar b=0;uchar t=0,t1;init_DS(); write(0xcc);write(0x44);delay(125);init_DS();write(0xcc);write(0xbe);a=Read();b=Read();t1=(a&0x0f)*0.0625;t=((b<<4)|(a>>4));if(t>128){t=~t+1;}t=t+t1;return(t); }void main(){float tp; while(1){ tp=Readtem();tp=tp*100; display(tp); }} 展开
2个回答
展开全部
应该延时不够精确引起,不知道你用的是什么型号单片机,DS18B20延时要求很严格,不同单片机执行后延时不同的,而DS18B20要求的延时差一点点就会出现各种奇怪问题,慢慢调整延时试试吧
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
东莞市友贸实业有限公司_
2023-11-22 广告
2023-11-22 广告
第五代双倍数据速率DDR5双列直插式内存模块是一种高速、高性能的内存模块,适用于需要高带宽和低延迟的应用场景。与前几代内存模块相比,DDR5双列直插式内存模块具有更高的数据传输速率和更低的功耗,同时提供了更大的内存容量和更高的可靠性。在数据...
点击进入详情页
本回答由东莞市友贸实业有限公司_提供
展开全部
你好!问题解决了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询