单片机lcd,ds18b20

2019-07-15 12:47发布

请我我分别写了一个lcd1602的显示程序和ds18b20的程序融合的时候怎么办啊为什么我这个什么都不显示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dq=P3^7;//18b20数据端
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
void delay(uint z);
void delay(uint z)
{
        uint a,b;
        for(a=z;a>0;a--)
        for(b=110;b>0;b--);
}
uchar ds18b20init()//初始化
{
        uchar i;
        dq=0;

        i=70;
        while(i--);
        dq=1;
        i=0;
        while(dq)
        {
                i++;
                if(i>5000)
                return 0;
        }
        return 1;
}
void ds18b20tempxie(uchar dat)//写命令
{
        uint i,j;
        for(i=0;i<8;i++)
        {
                dq=0;
                j++;
                dq=dat&0x01;
                i=6;
                while(i--)
                dq=1;
                dat>>=1;
        }


}
uchar ds18b20read()//读命令
{
        uchar byte,bi;
        uchar i,j;
        for(j=0;j<8;j++)
        {
        dq=0;
        i++;
        dq=1;
        bi=dq;
        byte=(byte>>1)|(bi<<7);
        i=4;
        while(i--);
        }
   return byte;
}
void ds18b20change()//温度转化
{
        ds18b20init();
        delay(1);
        ds18b20tempxie(0xcc);
        ds18b20tempxie(0x44);

       
}
void  ds18b20readtemp()
{       

        ds18b20init();
        delay(1);
        ds18b20tempxie(0xcc);         
        ds18b20tempxie(0xbe);         
}
int ds18b20zhuang()//读取温度
{

        int temp=0;
        uchar tmh,tml;
        ds18b20change();
        ds18b20readtemp();
        tmh=ds18b20read();
        tml=ds18b20read();
        temp=tmh;
        temp<<=8;
        temp|=tml;

        return temp;
}
void dizhi(uchar dz)//1602写命令
{
        rs=0;
        rw=0;
        P0=dz;

        delay(10);
        en=1;
        delay(10);
        en=0 ;
}
void shuju(uchar shu)//1602写数据
{          
        rs=1;
        rw=0;
        P0=shu;
        delay(10);
        en=1;
        delay(10);
        en=0 ;
}
void init()//1602初始化
{
         en=0;
        dizhi(0x38);
        dizhi(0x0c);
        dizhi(0x06);
        dizhi(0x01);
               


}
void main()
{
        init();
        dizhi(0x80);//设置显示地址

        while(1)
        {
       
                shuju(ds18b20zhuang());

        }
       
}

麻烦各位大神了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Doveove
1楼-- · 2019-07-15 15:26
 精彩回答 2  元偷偷看……
第一行代码
2楼-- · 2019-07-15 21:25
光贴代码也看不出有什么问题,实际使用的时候还要看你的电路以及调试信息~

一周热门 更多>