程序::#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
sbit DQ=P1^0;
bdata uchar dat;
sbit dat0=dat^0;
sbit dat7=dat^7;
uchar dp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xef,0xbf};
uchar dbuf[4]={0,0,0,0};
void disp(void)
{ uchar i,n,wx;
wx=0xfe;
for(n=0;n<4;n++)
{ P2=wx;
P0=segtab[dbuf[n]];
if(n==1) P0=P0&0x7f;
wx=(wx<<1)+1;
for(i=1;1<200;i++);
P0=0xff;
}
}
void delay(unsigned int i)
{ unsigned int j;
for(j=i;j>0;j--);
}
bit reset(void)
{ bit flag;
DQ=0;
delay(60);
DQ=1;
delay(3);
flag=DQ;
delay(25);
return(flag);
}
void ds18b20_init(void)
{
while(1)
{
if(!reset())
{
DQ=1;
delay(30);
break;
}
else
reset();
}
}
void wrbyte(uchar t)
{
uchar i,dat;
dat=t;
for(i=8;i>0;i--)
{
DQ=0;
_nop_();
DQ=dat&0x01;
dat=dat>>1;
delay(5);
DQ=1;
delay(1);
}
}
uchar rdbyte(void)
{ uchar i;
uchar dat=0;
DQ=1;_nop_();
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;_nop_();_nop_();
if(DQ) dat|=0x80;
delay(30);
DQ=1;
_nop_();
}
return(dat);
}
void convert(void)
{
ds18b20_init();
wrbyte(0xcc);
wrbyte(0x44);
delay(40);
}
int readt(void)
{ uchar h,l;
ds18b20_init();
wrbyte(0xcc);
wrbyte(0x44);
l=rdbyte();
h=rdbyte();
return(h*256+l);
}
void tdatacl(int x)
{
bit zf;
zf=0;
if(x<0)
{zf=1;
x=-x;
}
dbuf[0]=dp[x&0x0f];
x=x>>4;
dbuf[3]=x/100;
x=x%100;
dbuf[2]=x/10;
dbuf[1]=x%10;
if(zf==1)
{ if(dbuf[2]==0)
{ dbuf[3]=0xff;
dbuf[2]=0xbf;
}
else
dbuf[3]=0xbf;
}
else
{ if(dbuf[3]==0)
if(dbuf[2]==0)
{dbuf[2]=0xff;
dbuf[3]=0xff;
}
else dbuf[3]=0xff;
}
}
void main()
{
int t;
uchar i;
while(1)
{ convert();
t=rdbyte();
tdatacl(t);
for(i=50;i>0;i--)
disp();
}
仿真图搞不上来!!下楼继续
共4条
1/1 1 跳转至页
求助关于ds18b20温度显示的问题恳求个位人士帮忙解决
只看楼主 1楼
关键词: 求助 关于 ds18b20 温度 显示 问题 恳求
2楼
仿真时数码管只亮不显示数字!一直停留在0000!仿真图搞不上来!!帮忙看看程序有没有错误!!如有帮忙改正一下万分感谢!!!
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |