找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6961|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

為什么lcd1602只顯示一行白方塊和一行暗方塊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:381035 發(fā)表于 2018-12-29 18:07 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//這是一個(gè)用ds18b20測(cè)溫并用1602來(lái)顯示的一個(gè)程序,仿真可以正常顯示出來(lái),但是就是實(shí)物出不來(lái),調(diào)了對(duì)比度也還是這樣
#include <reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit rs=P3^0;
sbit rw=P3^6;
sbit e=P3^7;
sbit dq=P3^4;
u8 code tab1[]={"temperature show"};
u8 code tab2[]={" Temp Now:  . C "};

void delay(u16 t)
{ u16 x,y;
        for(x=t;x>0;x--)
           for(y=110;y>0;y--);
}

//--------------------------lcd1602----------------------------
void write_com(u8 com)//寫(xiě)指令
{  
        rs=0;
        P1=com;
        delay(5);
         rw=0;
         e=1;
         delay(5);
         e=0;
}

void write_dat(u8 dat)//寫(xiě)數(shù)據(jù)
{  
         rs=1;
        P1=dat;
        delay(5);
         rw=0;
         e=1;
         delay(5);
         e=0;
}

void lcd_init()//LCD初始化
{  u8 i;
         e=0;
         rw=0;
         write_com(0x38);
         delay(5);
         //write_com(0x08);
         write_com(0x0C);
         write_com(0x06);
         write_com(0x01);
         write_com(0x80);
         for(i=0;i<16;i++)
   {
                        write_dat(tab1[i]);
                 delay(20);
                }
         write_com(0xc0);
                for(i=0;i<16;i++)
        {
                write_dat(tab2[i]);
                delay(50);
        }
}
       
//-------------------------ds18b20-----------------------------
void ds_init()     
{
  u16 i;
  dq=0;
  i=103;
  while(i>0)
          i--; //延時(shí)大約480us~960us
  dq=1;
  i=4;
  while(i>0)
                i--; //延時(shí)大約60us~240us
}

bit read_dat()  //讀一位數(shù)據(jù)     
{
   u16 i;
   bit dat;
   dq=0;
         i++;    //拉低大約1us左右      
   dq=1;
          i++;
          i++;
   dat=dq;                  //讀回?cái)?shù)據(jù)
   i=8;
        while(i>0)
                i--; //延時(shí)45ms左右
   return (dat);
}

u8 read_byte()   //18b20讀一個(gè)字節(jié)函數(shù)
{
  u8 i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=read_dat();//讀一位數(shù)據(jù)給j
    dat=(j<<7)|(dat>>1);   
  }
  return (dat);
        }

void write1()  //向18b20寫(xiě)入1
{          u16 i;
      dq=0;
      i++;
            i++;        //延時(shí)15us左右
      dq=1;
      i=8;
            while(i>0)
                                i--;
}

void write0()  //向18b20寫(xiě)入0
{            u16 i;
      dq=0;      
      i=8;
            while(i>0)
                           i--; //延時(shí)60us左右
      dq=1;
      i++;
                        i++;
}

void write_byte(u8 dat)//18b20寫(xiě)一個(gè)字節(jié)函數(shù)   
{
  u8 j;
  bit ceb;
  for(j=1;j<=8;j++)
  {
    ceb=dat&0x01;
    dat=dat>>1;
    if(ceb)     
    {
     write1();
    }
    else
    {
     write0();
    }

  }
        }

void wenduzh()          //18b20溫度轉(zhuǎn)換函數(shù)
{                                               
        ds_init();                        //1、初始化
  delay(1);                               
  write_byte(0xcc);          //跳過(guò)rom操作指令
  write_byte(0x44);          //溫度轉(zhuǎn)換命令
}

u16 cewendu()               
{
  u16 t;
  float t1;
  u8 a,b;
  ds_init();
  delay(1);
  write_byte(0xcc);//跳過(guò)ROM
  write_byte(0xbe);//讀暫存器第9字節(jié)ram
  a=read_byte();//讀第一個(gè)字節(jié)存于a
  b=read_byte();
  t=b;  //將整數(shù)部分賦給t
  t<<=8;            
  t=t|a;//整數(shù)小數(shù)合并
  t1=t*0.0625;
  t=t1*10+0.5;  //加0.5四舍五入
  return t;
}

void display(u16 dat,u8 m)
{
  u8 x,y,z;//定義溫度顯示數(shù)值的百位十位個(gè)位百分位
         
        x=dat/100+'0';   //百位
  y=(dat%100)/10;//十位
  z=dat%10;                 //個(gè)位               
  write_com(m);       
  write_dat(x);
  write_dat(y+0x30);
          write_com(m+3);
  write_dat(z+0x30);       

}
void main()
{ u16 tt1=0;
        lcd_init();       
        while(1)
        {        wenduzh();
                tt1=cewendu();
          display(tt1,0xca);//0xca使得讀出來(lái)的溫度的數(shù)值放在:后面
                delay(100);
        }         
}


IMG_20181229_173043.jpg (3.49 MB, 下載次數(shù): 67)

IMG_20181229_173043.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:239611 發(fā)表于 2018-12-30 09:08 | 只看該作者
void write_com(u8 com)//寫(xiě)指令
void write_dat(u8 dat)//寫(xiě)數(shù)據(jù)
這兩個(gè)函數(shù)延時(shí)加長(zhǎng)試試,先都加到30,不行加到50試試。
回復(fù)

使用道具 舉報(bào)

板凳
ID:381035 發(fā)表于 2019-1-2 09:29 | 只看該作者
botgs 發(fā)表于 2018-12-30 09:08
void write_com(u8 com)//寫(xiě)指令
void write_dat(u8 dat)//寫(xiě)數(shù)據(jù)
這兩個(gè)函數(shù)延時(shí)加長(zhǎng)試試,先都加到30, ...

沒(méi)有用,我之前在別人調(diào)試好的板子上能夠顯示,但是到了自己的板子上就不行,現(xiàn)在是怎么都調(diào)不出來(lái)方塊了
回復(fù)

使用道具 舉報(bào)

地板
ID:381035 發(fā)表于 2019-1-2 09:46 | 只看該作者
現(xiàn)在經(jīng)過(guò)調(diào)節(jié)對(duì)比度可以顯示左半屏了,但是右半屏不能顯示,調(diào)節(jié)調(diào)不出來(lái)
回復(fù)

使用道具 舉報(bào)

5#
ID:767762 發(fā)表于 2020-6-28 14:13 | 只看該作者
Robust 發(fā)表于 2019-1-2 09:46
現(xiàn)在經(jīng)過(guò)調(diào)節(jié)對(duì)比度可以顯示左半屏了,但是右半屏不能顯示,調(diào)節(jié)調(diào)不出來(lái)

請(qǐng)問(wèn)下樓主的解決方法是什么我也遇到了這樣的問(wèn)題,麻煩告訴我下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表