久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6953|回復: 4
收起左側

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

[復制鏈接]
ID:381035 發(fā)表于 2018-12-29 18:07 | 顯示全部樓層 |閱讀模式
//這是一個用ds18b20測溫并用1602來顯示的一個程序,仿真可以正常顯示出來,但是就是實物出不來,調了對比度也還是這樣
#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)//寫指令
{  
        rs=0;
        P1=com;
        delay(5);
         rw=0;
         e=1;
         delay(5);
         e=0;
}

void write_dat(u8 dat)//寫數(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--; //延時大約480us~960us
  dq=1;
  i=4;
  while(i>0)
                i--; //延時大約60us~240us
}

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

u8 read_byte()   //18b20讀一個字節(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寫入1
{          u16 i;
      dq=0;
      i++;
            i++;        //延時15us左右
      dq=1;
      i=8;
            while(i>0)
                                i--;
}

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

void write_byte(u8 dat)//18b20寫一個字節(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溫度轉換函數(shù)
{                                               
        ds_init();                        //1、初始化
  delay(1);                               
  write_byte(0xcc);          //跳過rom操作指令
  write_byte(0x44);          //溫度轉換命令
}

u16 cewendu()               
{
  u16 t;
  float t1;
  u8 a,b;
  ds_init();
  delay(1);
  write_byte(0xcc);//跳過ROM
  write_byte(0xbe);//讀暫存器第9字節(jié)ram
  a=read_byte();//讀第一個字節(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ù)值的百位十位個位百分位
         
        x=dat/100+'0';   //百位
  y=(dat%100)/10;//十位
  z=dat%10;                 //個位               
  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使得讀出來的溫度的數(shù)值放在:后面
                delay(100);
        }         
}


IMG_20181229_173043.jpg
回復

使用道具 舉報

ID:239611 發(fā)表于 2018-12-30 09:08 | 顯示全部樓層
void write_com(u8 com)//寫指令
void write_dat(u8 dat)//寫數(shù)據(jù)
這兩個函數(shù)延時加長試試,先都加到30,不行加到50試試。
回復

使用道具 舉報

ID:381035 發(fā)表于 2019-1-2 09:29 | 顯示全部樓層
botgs 發(fā)表于 2018-12-30 09:08
void write_com(u8 com)//寫指令
void write_dat(u8 dat)//寫數(shù)據(jù)
這兩個函數(shù)延時加長試試,先都加到30, ...

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

使用道具 舉報

ID:381035 發(fā)表于 2019-1-2 09:46 | 顯示全部樓層
現(xiàn)在經過調節(jié)對比度可以顯示左半屏了,但是右半屏不能顯示,調節(jié)調不出來
回復

使用道具 舉報

ID:767762 發(fā)表于 2020-6-28 14:13 | 顯示全部樓層
Robust 發(fā)表于 2019-1-2 09:46
現(xiàn)在經過調節(jié)對比度可以顯示左半屏了,但是右半屏不能顯示,調節(jié)調不出來

請問下樓主的解決方法是什么我也遇到了這樣的問題,麻煩告訴我下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成视频 | 亚洲成人第一页 | 欧美性受xxx | 国产成人免费 | 99久久久久久99国产精品免 | 99资源 | 亚洲欧美日韩系列 | 国产一二三视频在线观看 | 国产一级视频在线观看 | 天堂成人国产精品一区 | 亚洲第一视频网站 | 久久大陆| 国产成人精品一区二 | 中文字幕av第一页 | 久久婷婷国产 | 亚洲精品一二三区 | 一区二区三区在线免费观看视频 | www.日本国产 | 中文字幕在线网 | 99这里只有精品 | 精品成人佐山爱一区二区 | 电影午夜精品一区二区三区 | 黄网免费看 | 毛片99| 天天狠狠 | 欧美福利在线 | 亚洲视频在线免费观看 | 欧洲国产精品视频 | 精品亚洲一区二区三区四区五区 | 欧美国产激情二区三区 | 亚洲成av人影片在线观看 | 国产视频第一页 | 国产精品五月天 | 欧美一级免费 | 欧美日韩视频在线第一区 | 欧美一二三区 | 美女二区 | 国产精品视频网 | 精品视频免费 | 精品一区二区三区免费毛片 | 日韩亚洲视频 |