LCD1602程序一直调试出错

2019-07-15 17:19发布


#include "reg52.h"
#include "INTRINS.H"
#include "1602.c"
#define uchar unsigned char
#define uint  unsigned int
//#define CLEARSCREEN LCD_en_command(0x01)   1602清屏
/////////////低层驱动子程序///////////
void Init18B20(void); //初始化
void Write18B20(uchar ch);//写数据
unsigned char Read18B20(void);//读数据  
void Delay15(uchar n);   
void Delay10ms(uint delay_num);
void Display(void);
/////////////////////////////////////  
code uchar decimalH[]={00,06,12,18,25,31,37,43,50,56,62,68,75,81,87,93};
code uchar decimalL[]={00,25,50,75,00,25,50,75,00,25,50,75,00,25,50,75};


uint ResultTemperatureH ,ResultTemperatureLH,ResultTemperatureLL;//整数,小数高位,小数低位
uint  ResultSignal;//符号位




main()
{  uint TemH,TemL,delay,k=0;
   for(; ; )
{
   Init18B20();

   Write18B20(0xCC);//跳过ROM
   _nop_();
   //Write18B20(0x4E);//写EEPROM
  // Write18B20(0x00);//Th
   //Write18B20(0x00);//Tl
   Write18B20(0x7f);//12 bits温度分辨率
   Init18B20();

   Write18B20(0xCC);//跳过ROM
   _nop_();


   Write18B20(0x44);//发送温度转换指令
   Delay10ms(25);
   Delay10ms(25);
   Delay10ms(25);
   Delay10ms(25);//等待1s转换
  Init18B20();
   Write18B20(0xcc);//跳过ROM
   Write18B20(0xbe);//发送温度转换指令
   TemL="Read18B20"[];//读低位温度值
   TemH="Read18B20"[];//读高位温度值                                                      

   Delay10ms(2);

  TemH=(TemH<<4)|(TemL>>4);
   TemL="TemL"&0x0f;   //取低4位
   if(TemH&0x80)
    {  TemH=~TemH;
    TemL=~TemL+1;
       ResultSignal="1";     //负
    }
     else  ResultSignal="0";   //正

   ResultTemperatureLH="decimalH"[TemL];
   ResultTemperatureLL="decimalL"[TemL];
   ResultTemperatureH="TemH";
   Display();

  for(delay=0;delay<60000;delay++);
  for(delay=0;delay<20000;delay++);

  }   
}

void  Display(void)
{  uint i,j,q;
   LCD_init();
     CLEARSCREEN;
  LCD_en_command(0x01);
  delay_nms(2);

     q="ResultTemperatureH/100";
     i=(ResultTemperatureH%100)/10;
     j="ResultTemperatureH-"(i*10+q*100);
  LCD_write_string(0,LINE1," Jaq1217 18B20  ");
if(ResultSignal)   
   { LCD_write_string(0,LINE2," T is:-   .     ");  }
   else {LCD_write_string(0,LINE2," T is:+   .     ");}
    LCD_write_char(0x07,LINE2,q|0x30);
    LCD_write_char(0x08,LINE2,i|0x30);
    LCD_write_char(0x09,LINE2,j|0x30);
    LCD_write_char(0x0b,LINE2,(ResultTemperatureLH/10)|0x30);
LCD_write_char(0x0c,LINE2,(ResultTemperatureLH%10)|0x30);
LCD_write_char(0x0d,LINE2,(ResultTemperatureLL/10)|0x30);
LCD_write_char(0x0e,LINE2,(ResultTemperatureLL%10)|0x30);
   }

unsigned char Read18B20(void)
{ unsigned char ch;
   unsigned char q ;

   for(q=0;q<8;q++)
    {ch=ch>>1;
     DQ="0";
     _nop_();
     DQ="1";
     _nop_();_nop_();_nop_();_nop_();
     if(DQ==1)  
        {ch="ch|0x80";}

   else     {ch="ch"&0x7f;}
     Delay15(3);
   DQ="1";

     }  
return (ch);
   }


void Write18B20(uchar ch)
{ uchar i;
   for(i=0;i<8;i++)
   { DQ="0";
  Delay15(1);
  DQ="ch"&0x01;
  Delay15(3);
  DQ="1";
  ch="ch">>1;
  _nop_();
    }
}

void Init18B20(void)
{ DQ="0";
   Delay15(33);//至少延时480us
   DQ="1";
   Delay15(10);//至少延时100us
   /*if(DQ==1)  return 0;   //初始化失败
    else  return 1;
DQ=1; Delay15(18);  */
   }

void Delay15(uchar n)
{  do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
  n--;

       }while(n);
  }
void Delay10ms(uint delay_num)
{
uchar i;
while(delay_num--)
{
  for(i=0;i<125;i++)
   {;}
}
}

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