求助1602显示18B20

2019-07-16 05:05发布

之前做了一个数码管显示的,想放液晶上看看,结果就悲剧了。
STC89C52+DS18B20+1602难道就坑死我了?
请大家帮忙检查一下那里有错误,为什么显示一直是0000
tica, Arial, sans-serif">#include <REG52.H>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;
uchar  a,b,c,d; //定义变量
uchar k;

sbit lcden=P3^4;
sbit lcdrs=P3^5;

sbit dula=P2^6;
sbit wela=P2^7;
sbit DATA=P2^2; //DS18B20接入口


//uchar table2[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
uint disdata[4]={0,0,0,0};




// 毫秒延时

void delay(uint tt)
{

uchar i;

while(tt--)

for(i=110;i>0;i--);
}

//短延时

//系统初始化


//按键扫描


//温度检测
void Init_DS18B20()
  //传感器初始化
{

uchar x=0;

DATA = 1;    //DQ复位

delay(10);  //稍做延时

DATA = 0;    //单片机将DQ拉低

delay(80); //精确延时 大于 480us    //450

DATA = 1;    //拉高总线

delay(20);

x=DATA;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delay(30);
}

//读一个字节
ReadOneChar(void)
{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{
  
DATA = 0; // 给脉冲信号
  
dat>>=1;
  
DATA = 1; // 给脉冲信号
  
if(DATA)
   
dat|=0x80;
  
delay(8);

}

return(dat);
}

//写一个字节
void WriteOneChar(unsigned char dat)
{

uchar i=0;

for (i=8; i>0; i--)

{
  
DATA = 0;
  
DATA = dat&0x01;
  
delay(10);
  
DATA = 1;
  
dat>>=1;

}

delay(8);
}

//读取温度
int ReadTemperature(void)
{

uchar a=0;

uchar b=0;

int t=0;

float tt=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar();//低位

b=ReadOneChar();//高位

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

t= tt*10+0.5;

return(t);
}

void init_com(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;
     TH1 = 0xFd;
     TL1 = 0xFd;
     TR1 = 1;
}

void write_com(uchar com)
{


lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar dat)
{

lcdrs=1;

P0=dat;

delay(5);

lcden=1;

delay(5);

lcden=0;
}
void init()
{

dula=0;

wela=0;

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

}

void display(int x)
{

disdata[0]=x/1000+0x30;

disdata[1]=x%1000/100+0x30;

disdata[2]=x%100/10+0x30;

disdata[3]=x%10+0x30;

write_com(0x80);

write_data(disdata[0]);

delay(200);


write_data(disdata[1]);

delay(200);


write_data(disdata[2]);

delay(200);

write_data(disdata[3]);

delay(200);
}
/*-------------------------------------------------------------------*/
//主函数
void main()
{


init();

init_com();
    while(1)
    {

int  temp;

temp = ReadTemperature();//读温度

display(temp);
    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。