找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 832|回复: 6
收起左侧

帮帮忙看一下这个温度为什么显示不出来,是我的程序写漏了吗?

[复制链接]
ID:981824 发表于 2021-11-17 14:24 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
sbit RS=P2^0;   
sbit RW=P2^1;
sbit E=P1^2;
sbit DQ=P1^4;

sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
sbit buzz=P0^6;

unsigned char a,b,c,d,e,f,g,h;
static int readtemp=0;
unsigned char s[]={"Temp:"};
unsigned char str[]={"0123456789"};

//************************************************************************
void delay(unsigned int n)//Ñó3ùoˉêy
{
  unsigned i=0,j=0;
    for(i=0;i<n;i++)
    {
      for(j=0;j<120;j++);
    }
}
//*************************ds18b20****************************************
void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ = 0;
                DQ = dat&0x01;
                delay(5);
                DQ = 1;
                dat >>= 1;
        }
        delay(5);
}
unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;

        for(i=0;i<8;i++)
        {
                DQ = 0;
                dat >>= 1;
                DQ = 1;
                if(DQ)  
                {
                        dat |= 0x80;
                }            
                delay(5);
        }
        return dat;
}
bit init_ds18b20(void)
{
          bit initflag = 0;
         
          DQ = 1;
          delay(12);
          DQ = 0;
          delay(80);
          DQ = 1;
          delay(10);
          initflag = DQ;     
          delay(5);

          return initflag;
}
unsigned char Readtemp(void)
{
          char temp;  

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0x44);
          delay(100);

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0xBE);
    delay(100);
          a = Read_DS18B20();
          b = Read_DS18B20();
          temp = ((b*256+a)>>4);   

          return temp;
       
}

//*********************1602************************************
void writedat(unsigned char dat)
{
  RS=1;
    RW=0;  
    E=0;   
    P0=dat;
    delay(5);
    E=1;
    E=0;
}

void writecom(unsigned char com)
{
  RS=0;
    RW=0;  
    E=0;  
    P0=com;
    delay(5);
    E=1;
    E=0;
}
void initlcd()
{
  writecom(0x38);  
    writecom(0x0c);  
    writecom(0x06);  
    writecom(0x01);  
}



//*************oˉêy********************************************
void display()//ÏÔê¾oˉêy
{
        unsigned int temp0=0,temp1=0,temp2=0,i=0;
        temp0=readtemp/100+'0';
        temp1=(readtemp%100)/10+'0';
        temp2=readtemp%10+'0';
        writecom(0x80);  
        delay(5);           
        while(s[i]!='\0')
        {
          writedat(s[i]);
                delay(5);
                i++;
        }
       
        writecom(0x80+6);  
        delay(5);
        writedat(' ');
        delay(5);
        writedat(str[temp0]);
        delay(5);           
        writedat(str[temp1]);
        delay(5);            
        writedat(str[temp2]);
        delay(5);   
  writedat('.');
        delay(5);       
        writedat('0');
        delay(5);
        writedat(0xDF);
        delay(5);         
        writedat('C');
        delay(5);           
}
void displayfu()
{
        unsigned int temp0=0,temp1=0,temp2=0,i=0;
        temp0=~readtemp/100+'0';
        temp1=(~readtemp%100)/10+'0';
        temp2=~readtemp%10+'0';
        writecom(0x80);  
        delay(5);           
        while(s[i]!='\0')
        {
          writedat(s[i]);
                delay(5);
                i++;
        }
       
        writecom(0x80+6);  
        delay(5);
        writedat('-');
        delay(5);
        writedat(str[temp0]);
        delay(5);           
        writedat(str[temp1]);
        delay(5);            
        writedat(str[temp2]);
        delay(5);   
  writedat('.');
        delay(5);       
        writedat('0');
        delay(5);
        writedat(0xDF);
        delay(5);         
        writedat('C');
        delay(5);   
}
//************************Ö÷oˉêy******************************
void main()
{
          int i;
        initlcd();/*
        void disply18b20Rom(char Rom);
Write_DS18B20(0x33);
        delay(1);
a =Read_DS18B20();
        b =Read_DS18B20();
        c=Read_DS18B20();
        d =Read_DS18B20();
        e=Read_DS18B20();
        f=Read_DS18B20();
        g =Read_DS18B20();
        h = Read_DS18B20();
        writecom(0x80+0x40);
        display18b20Rom(h);
display18b20Rom(g);
display18b20Rom(f);
display18b20Rom(e);
display18b20Rom(d);
display18b20Rom(c);
display18b20Rom(b);
display18b20Rom(a);*/

        while(1)
        {
                if(Readtemp()==0)
                {
                        writecom(0x01);
                        readtemp=0;
                        display();
                }
                else if(Readtemp()<150)
                {
                        readtemp=Readtemp();
                        display();
                }
                else
                {
                        int a=0;
                        a=Readtemp();
                        readtemp=a-257;
                        displayfu();
                }
        if((readtemp>=20)||(readtemp<=10))
                {
                        for(i=0;1>0;i++)
                {
                        led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;
                buzz=1;
                delay(500);
                        led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;
                buzz=0;
                        delay(500);
                }
        }
        }
}


回复

使用道具 举报

ID:446156 发表于 2021-11-17 15:33 | 显示全部楼层
我记得你发过一遍了怎么删了重发
回复

使用道具 举报

ID:981824 发表于 2021-11-17 17:36 | 显示全部楼层
qinlu123 发表于 2021-11-17 15:33
我记得你发过一遍了怎么删了重发

不是我删的
回复

使用道具 举报

ID:213173 发表于 2021-11-17 21:22 | 显示全部楼层
无标题.jpg
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit RS=P2^0;   
  4. sbit RW=P2^1;
  5. sbit E=P1^2;
  6. sbit DQ=P1^4;

  7. sbit led1=P0^0;
  8. sbit led2=P0^1;
  9. sbit led3=P0^2;
  10. sbit led4=P0^3;
  11. sbit led5=P0^4;
  12. sbit led6=P0^5;
  13. sbit led7=P0^6;
  14. sbit led8=P0^7;
  15. //sbit buzz=P0^6;

  16. //unsigned char a,b,c,d,e,f,g,h;
  17. //static int readtemp=0;
  18. unsigned char s[]="Temp:000  ";
  19. unsigned char str[]={"0123456789"};

  20. //************************************************************************
  21. void delay(unsigned int n)//?ó3ùoˉêy
  22. {
  23.         while(--n);
  24. }
  25. //*************************ds18b20****************************************
  26. void Write_DS18B20(unsigned char dat)
  27. {
  28.         unsigned char i;
  29.         for(i=8;i>0;i--)
  30.         {
  31.                 DQ = 0;
  32.                 DQ = dat&0x01;
  33.                 delay(6);
  34.                 DQ = 1;
  35.                 dat >>= 1;
  36.         }
  37.         delay(6);
  38. }
  39. unsigned char Read_DS18B20(void)
  40. {
  41.         unsigned char i;
  42.         unsigned char dat;       
  43.         for(i=8;i>0;i--)
  44.         {
  45.                 DQ = 0;
  46.                 dat >>= 1;
  47.                 DQ = 1;
  48.                 if(DQ)  
  49.                 dat|=0x80;         
  50.                 delay(6);
  51.         }
  52.         return dat;
  53. }
  54. bit init_ds18b20(void)
  55. {
  56.         bit initflag = 0;        
  57.         DQ = 1;
  58.         delay(2);
  59.         DQ = 0;
  60.         delay(60);
  61.         DQ = 1;
  62.         delay(12);
  63.         initflag = DQ;     
  64.         delay(6);
  65.         return initflag;
  66. }
  67. unsigned int Readtemp(void)
  68. {
  69.         unsigned char a,b;  
  70.         unsigned int temp;
  71.         init_ds18b20();
  72.         Write_DS18B20(0xCC);
  73.         Write_DS18B20(0x44);
  74.         init_ds18b20();
  75.         Write_DS18B20(0xCC);
  76.         Write_DS18B20(0xBE);
  77.         a = Read_DS18B20();
  78.         b = Read_DS18B20();
  79.         temp=b<<8|a;
  80.         return temp;
  81. }

  82. //*********************1602************************************
  83. void writedat(unsigned char dat)
  84. {
  85.         RS=1;
  86.         RW=0;  
  87.         E=0;   
  88.         P0=dat;
  89.         delay(5);
  90.         E=1;
  91.         E=0;
  92. }
  93. void writecom(unsigned char com)
  94. {
  95.         RS=0;
  96.         RW=0;  
  97.         E=0;  
  98.         P0=com;
  99.         delay(5);
  100.         E=1;
  101.         E=0;
  102. }
  103. void initlcd()
  104. {
  105.         writecom(0x38);  
  106.         writecom(0x0c);  
  107.         writecom(0x06);  
  108.         writecom(0x01);  
  109. }
  110. //*************oˉêy********************************************
  111. void display()//??ê?oˉêy
  112. {
  113.         unsigned int tempH;
  114.         unsigned char i;
  115.         tempH=Readtemp()>>4;
  116.         if(tempH<100)
  117.                 s[5]=' ';
  118.         else
  119.                 s[5]=tempH/100%10+'0';
  120.         s[6]=tempH/10%10+'0';
  121.         s[7]=tempH%10+'0';
  122.         s[8]=0xdf;
  123.         s[9]='C';
  124.         writecom(0x80);  
  125.         for(i=0;i<10;i++)
  126.                 writedat(s[i]);
  127. }

  128. //************************?÷oˉêy******************************
  129. void main()
  130. {
  131.         initlcd();
  132.         while(1)
  133.         {
  134.                 display();
  135.                 delay(1000);
  136.         }
  137. }
复制代码



回复

使用道具 举报

ID:123289 发表于 2021-11-18 13:49 | 显示全部楼层
先认真读通传感器的手册
回复

使用道具 举报

ID:981824 发表于 2021-11-18 23:17 | 显示全部楼层
yzwzfyz 发表于 2021-11-18 13:49
先认真读通传感器的手册

好的,谢谢!
回复

使用道具 举报

ID:981824 发表于 2021-11-18 23:59 | 显示全部楼层

非常感谢您的帮助!谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表