打印
[51单片机]

用ds18b20,LCD1602显示,可是什么都显示不了.

[复制链接]
1564|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
经历|  楼主 | 2017-8-10 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用ds18b20,LCD1602显示,可是什么都显示不了;下面是我的我的程序,帮我看看哪里错了。

#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
uchar  diplay[2];
uint temp;
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit DQ=P1^1;

uchar code tab[]="temperature:";
uchar code tab1[]="00oC";
void delay1ms(unsigned int ms)
{
  unsigned int i,j;
  for(i=0;i<ms;i++)
   for(j=0;j<100;j++);
}

void delay1us(unsigned int i)
{
        while(i--);
}

void write_com(uchar com)
{
  RS=0;
  RW=0;
  E=0;
  P2=com;
  delay1ms(5);
  E=1;
  delay1ms(5);
  E=0;
}

void write_dat(uchar dat)
{
  RS=1;
  RW=0;
  E=0;
  P2=dat;
  delay1ms(5);
  E=1;
  delay1ms(5);
  E=0;
}

void init()
{

  write_com(0x38);

  write_com(0x0c);

  write_com(0x06);

  write_com(0x01);     
}

void ds18b20init()
{
  DQ=0;
  delay1us(480);
  DQ=1;
  delay1us(80);
  DQ=0;
  delay1us(480);
}     

void ds18b20write_dat(uchar dat)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    DQ=0;
    delay1us(15);
    DQ=dat;
    dat<<=1;
    delay1us(60);
    DQ=1;
  }
}

uchar ds18b20read_dat( )
{
  uchar i,bi,byte;
  uchar dat;
  for(i=8;i>0;i--)
  {
   DQ=0;
   delay1us(1);
   DQ=1;
   delay1us(10);
   bi=dat;
   byte=(byte>>1)|(bi<<7);
   delay1us(45);
  }
return dat;
}

void ds18b20Changtemp()
{
   ds18b20init();
   ds18b20write_dat(0xcc);
   ds18b20write_dat(0x44);

}

uint ds18b20readtemp()
{  
   uchar tmh,tml;
   temp=0;
   ds18b20init();
   ds18b20write_dat(0xcc);
   ds18b20write_dat(0xbe);
   tml=ds18b20read_dat();
   tmh=ds18b20read_dat();
   temp=tmh;
   temp<<=8;
   temp=temp|tml;
   return temp;
}

void dispplay()
{
  uchar i,tp;
  tp=temp*0.625;

  diplay[0]=tp/10+0x30;
  diplay[1]=tp/1+0x30;

  write_com(0x80);  
   for(i=0;i<14;i++)  
   {
     write_dat(tab[i]);     
   }

   write_com(0x80+0x40);
   for(i=0;i<5;i++)   
   {
      write_dat(tab1[i]);
   }     
}

void main()
{
  init();
  while(1)
  {
     ds18b20readtemp();
     dispplay();
  }
}

相关帖子

沙发
Cjy_JDxy| | 2017-8-10 09:19 | 只看该作者
先把1602显示搞好,再加温度采集。

使用特权

评论回复
板凳
icecut| | 2017-8-10 10:12 | 只看该作者
先看懂别人能用的代码.一般卖给你东西的人手里都有

使用特权

评论回复
地板
ningling_21| | 2017-8-10 11:42 | 只看该作者
控制1602的8位数据线 在哪个端口? P0还是P2 ,你的程序里P2用了三根控制线,而8位数据也是发送到P2,明显严重错误

使用特权

评论回复
5
潜力变魅力| | 2017-8-10 12:44 | 只看该作者
先把DS18B20那部分屏蔽掉,直接调试LCD1602,看是否可以正常显示,然后再调试DS18B20看是否可以采集到温度,然后再和一起调试!具体思路是这样子的

使用特权

评论回复
6
yk910127| | 2017-8-13 20:19 | 只看该作者
先调试1602,可以显示了在加一些外围设备

使用特权

评论回复
7
榆林上校| | 2017-9-1 07:22 | 只看该作者
应该是1602的事,先看看吧

使用特权

评论回复
8
engineerwubin| | 2017-9-6 11:19 | 只看该作者
有经过验证的DS18B20和LCM1602程序(库和组件),请参考帖子“8051嵌入式操作系统”,附件中有下载地址和密码。使用手册中有联系方式,随时可以加QQ群技术交流。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

31

帖子

2

粉丝