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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6930|回復: 4
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
//這是一個用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)//寫數據
{  
         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()  //讀一位數據     
{
   u16 i;
   bit dat;
   dq=0;
         i++;    //拉低大約1us左右      
   dq=1;
          i++;
          i++;
   dat=dq;                  //讀回數據
   i=8;
        while(i>0)
                i--; //延時45ms左右
   return (dat);
}

u8 read_byte()   //18b20讀一個字節函數
{
  u8 i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=read_dat();//讀一位數據給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寫一個字節函數   
{
  u8 j;
  bit ceb;
  for(j=1;j<=8;j++)
  {
    ceb=dat&0x01;
    dat=dat>>1;
    if(ceb)     
    {
     write1();
    }
    else
    {
     write0();
    }

  }
        }

void wenduzh()          //18b20溫度轉換函數
{                                               
        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字節ram
  a=read_byte();//讀第一個字節存于a
  b=read_byte();
  t=b;  //將整數部分賦給t
  t<<=8;            
  t=t|a;//整數小數合并
  t1=t*0.0625;
  t=t1*10+0.5;  //加0.5四舍五入
  return t;
}

void display(u16 dat,u8 m)
{
  u8 x,y,z;//定義溫度顯示數值的百位十位個位百分位
         
        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使得讀出來的溫度的數值放在:后面
                delay(100);
        }         
}


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

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

地板
ID:381035 發表于 2019-1-2 09:46 | 只看該作者
現在經過調節對比度可以顯示左半屏了,但是右半屏不能顯示,調節調不出來
回復

使用道具 舉報

5#
ID:767762 發表于 2020-6-28 14:13 | 只看該作者
Robust 發表于 2019-1-2 09:46
現在經過調節對比度可以顯示左半屏了,但是右半屏不能顯示,調節調不出來

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线观看 | 精品国产乱码一区二区三 | 日韩欧美在线观看视频网站 | 欧美精选一区二区 | 久久一区 | 久久国产精品视频 | 国产中文在线观看 | 91porn成人精品| 欧美一区二区免费在线 | 亚洲精品久久久 | 精品国模一区二区三区欧美 | 最新国产精品视频 | 日日夜夜精品 | 精品中文字幕一区二区 | 免费高清av | 日韩电影一区二区三区 | 日韩欧美在线一区 | 精品久久久久久久久久久久久久 | 在线观看www视频 | 中文字幕综合 | 视频在线观看一区 | 亚洲一区欧美 | 日韩精品久久久久久 | 日批日韩在线观看 | 久久成人国产 | 亚洲精品一区二三区不卡 | 免费激情网站 | 国产精品1区2区 | 国内精品免费久久久久软件老师 | 成人影院在线视频 | 国产高清区 | 亚洲成人精品国产 | 久久久国产视频 | 天天躁日日躁aaaa视频 | 九九久久国产 | 国产精品99久久久久久久vr | 国产精品99久 | 亚洲毛片在线 | 欧洲亚洲视频 | 免费观看黄网站 | 欧美综合一区二区三区 |