打印

大家帮我看下我这个18B20程序为什么错?

[复制链接]
1271|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superbigbaby|  楼主 | 2010-2-6 02:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
错误现象:0上正常 0下无法显示。。
如果将程序中的0下标志位去掉 则程序正常  加上 则过几秒 数码管显示乱码

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
sbit dula=P2^6;
sbit wela=P2^7;
float f_temp;
uint temp;
bit flag=0;
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,
0xbf,0xb6,0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef
};
void display(uchar num,uchar dat);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void Delayus(uint x)
{
  while(--x);
}
void dsrest()
{
ds = 1;
Delayus(8);
ds= 0;
Delayus(90);
ds = 1;
Delayus(8);
ds = 1;
}
uchar tempreadbit()
{
  uchar i,dat=0;
ds = 1;
_nop_();
for(i=0;i<8;i++)
{
   ds = 0;
  dat >>= 1;
  ds = 1;
  _nop_();
  _nop_();
  if(ds)
   dat |= 0X80;
  Delayus(30);
  ds = 1;
}
return dat;
}
void tempwritebyte(uchar dat)
{   
  uchar i;
for(i=0;i<8;i++)
{
   ds = 0;
  ds = dat& 0x01;
  Delayus(5);
  ds = 1;
  dat >>= 1;
}
}
void tempchange()
{
dsrest();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0x44);
}
uint gettemp()
{
uchar a,b;
dsrest();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempreadbit();
b=tempreadbit();
if(a&0xf8==0xf8)
{
  flag=1;
}
else
{
  flag=0;
}
temp=b;
temp<<=8;
temp=temp|a;
if(flag==1)
{
  temp=~temp+1;
  f_temp=temp*0.0625;
  temp=f_temp*10+0.5;
  display(0,0x40);
}
else
{
  f_temp=temp*0.0625;
  temp=f_temp*10+0.5;
}
return temp;
}
void display(uchar num,uchar dat)
{
uchar i;
dula=0;
P0=table[dat];
dula=1;
dula=0;
wela=0;
i=0xff;
i=i&(~((0x01)<<(num)));
P0=i;
wela=1;
wela=0;
delay(5);

}
void distemp(uint t)
{
uchar i;
i=t/100;
display(1,i);
i=t%100/10;
display(2,i+10);
i=t%10;
display(3,i);
}
void main()
{
while(1)
{
  tempchange();
  distemp(gettemp());
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

1

粉丝