ds18b20温度程序,求大神指导,哪里错了?要求只是显示整...

2019-07-15 23:38发布

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar table1[]="tempature: ";
uchar temp0[]={0x00,0x00};
uint display[]={0,0,0,0}; //ζÈÕûÊý´æ´¢Çø
uchar display_buffer[]={"temp:      "}; //ÏÔʾ»º³åÇø
                                          //µÃµ½µÄζÈÕûÊýÊýÖµ
//sbit dula=P2^6;
//sbit wela=P2^7;
sbit lcden=P3^4;
sbit rs=P3^5;
sbit rw=P3^7;
sbit dq=P2^2;
uchar num,a=0,b=0;
int temp;
float f_temp;
void delay_ms(uint z)
{
        uchar i,j;
         for(i=z;i>0;i--)
           for(j=110;j>0;j--);
}

void write_com(uchar com)
{
       
        rs=0;
        P0=com;
        delay_ms(5);
        lcden=1;
        delay_ms(5);
        lcden=0;
}
void write_data(uchar date)
{
       
        rs=1;
        P0=date;
        delay_ms(5);
        lcden=1;
        delay_ms(5);
        lcden=0;
}
void init()
{
        //dula=0;
        //wela=0;
        lcden=0;
        rw=0;
        write_com(0x38);
        write_com(0x0f);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
}
// void dereset()  ÌìÏé³ÌÐò
//{
//        uint i;
//        dq=1;  
//        delay_ms(1);
//        dq=0;  
//        i=90;
//        while(i>0)i--;
//        dq=1;      
//        delay_ms(1);
//       
//       
//}
void delay(uint x)
{
        while(--x);
}
void dereset(void)
{
        char status=0;
        dq=1;
        delay(8);
        dq=0;
        delay(100);
        dq=1;
        delay(20);
        status=dq;
        delay(30);
        dq=1;
        //return status;
}
//bit tempreadbit(void) //Óдí
//{
//        uint i;
//        bit dat;
//        dq=0;i++;   
//        dq=1;i++;i++;
//        dat=dq;      
//        i=8;while(i>0);i--;
//        return(dat);
//}
//uchar tempread(void)
//{
//        uchar i,j,dat;
//        dat=0;
//        for(i=1;i<=8;i++)
//        {
//                j=tempreadbit();
//    dat=(j<<7)|(dat>>1);
//        }                     
//        return(dat);   
//}

void tempwritebyte(uchar wdata)
{
        uchar i=0;
        for(i=8;i>0;i--)
        {  
                dq=0;
                delay(15);
                dq=wdata&0x01;
                delay(45);
                dq=1;
                wdata>>=1;
        }
        delay(8);
}
uchar tempread(void)//¶ÁÈ¡DSÐÅÏ¢×Ö½Ú
{
        uchar i,dat=0;
        //dq=1;
        delay(1);
        for(i=0;i<8;i++)
        {
                dq=0;
                dat>>=1;
                dq=1;
                delay(15);
                if(dq)
                dat|=0x80;
                delay(30);
                dq=1;
  }
        return (dat);
}
int read(void)//ζȶÁÈ¡º¯Êý
{  //if(dereset!=1)
        //{
        //int temp;
        dereset();
        tempwritebyte(0xcc);
        tempwritebyte(0x44);//Æô¶¯Î¶Èת»»
        dereset();
               
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);//¶ÁȡζȼĴæÆ÷
        delay(50);
        a=tempread();
  b=tempread();
        temp=((a>>4)|((b&0x07)<<4));
        return (temp);
// }        
}



void display1()
{   int num,current;
          current=read();
//   current=(a>>4)|(b<<4)&0x3f;
//        current=((a>>4)|((b&0x07)<<4));
        //current=((a&0xf0)>>4)|((b&0x07)<<4);
//        f_temp=current*0.0625;
//        current=f_temp*10+0.5;
//        display[4]=current/1000;
        display[3]=current/100;//°ÑζȵİٷÖλ´æ´¢µ½ÕûÊý´æ´¢Çø
  display[2]=current%100/10;//°ÑζȵÄÊ®·Öλ´æ´¢µ½ÕûÊý´æ´¢Çø
  display[1]=current%10;//°Ñζȵĸöλ´æ´¢µ½ÕûÊý´æ´¢Çø
        display_buffer[8]=display[1]+'0';//ÔÙ°Ñ´æ´¢ÇøµÄÄÚÈÝ·¢Ë͵½»º´æÇø£¬×¼±¸ÏÔʾ
  display_buffer[7]=display[2]+'0';       
        display_buffer[6]=display[3]+'0';
//        display_buffer[5]=display[4]+'0';
        if(display[6]==0)
        display_buffer[6]=' ';
        write_com(0x80);
           for(num=0;num<10;num++)
                        {
                                write_data(table1[num]);
                                delay_ms(1);
                        }
        write_com(0x80+0x40);               
        for(num=0;num<10;num++)
                        {
                                write_data(display_buffer[num]);
                                delay_ms();
      }
}
void main()
{   
       
          init();
         while(1)
         {
                 
                 read();
                 delay_ms(10);
                 display1();
       
                }
            
}
       
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。