欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機lcd1602只顯示第一排黑色方塊 [打印本頁]

作者: dislsqq    時間: 2020-4-30 22:47
標題: 單片機lcd1602只顯示第一排黑色方塊
麻煩大佬幫忙看一下是什么問題

#include "LCD1602.h"
#ifdef P25_DRIV_RW
//讀操作,RS=1讀數據;RS=0讀指令
unsigned char Read_LCD1602(bit RS)  
{      
unsigned char temp;
LCD1602_RS = RS;//數據寄存器
LCD1602_RW = 1;//讀操作
LCD1602_EN = 1;//上升沿,LCD準備數據
_nop_();
_nop_();
_nop_();
_nop_();
temp =  LCD1602_DATA;//讀取DB7~0
LCD1602_EN = 0;//下降沿,LCD鎖存數據
return temp;
}
//讀忙操作,高電平表示忙
bit LCD_Busy(void)
{
   unsigned char temp;
   temp = Read_LCD1602(COMMAND);//讀指令
   return (bit)(temp & 0x80);//返回BF(bit7)位
}
//寫操作,RS=1寫數據;RS=0寫指令
void Write_LCD1602(unsigned char dat,bit RS)
{      
while(LCD_Busy());
  LCD1602_EN = 0; //使能清零
LCD1602_RS = 1; //選擇輸入數據
LCD1602_RW = 0; //選擇寫入
LCD1602_DATA = dat; //寫入數據
Delay_ms(1);
LCD1602_EN= 1;   //寫入時序
Delay_ms(5);   //保持時間
LCD1602_EN= 0;

}

#else
void Write_LCD1602(unsigned char dat,bit RS)
{
  LCD1602_EN = 0;   //使能清零
LCD1602_RS = 1;   //選擇寫入數據

LCD1602_DATA= dat; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  Delay_ms(1);
LCD1602_EN= 1;   //寫入時序
  Delay_ms(5);;
LCD1602_EN = 0;
LCD1602_DATA = dat << 4; //寫入低四位
  Delay_ms(1);
LCD1602_EN = 1;   //寫入時序
  Delay_ms(5);
LCD1602_EN=0;
}
#endif
void LCD_WrCmd(unsigned char dat)
{
Write_LCD1602(dat,COMMAND);
}
void LCD_WrDat(unsigned char dat)
{
Write_LCD1602(dat,DATA);
}
void St_LCD1602_Pos(unsigned char pos)
{      
LCD_WrCmd(pos | 0x80);
}
void LCD1602_Init(void)  
{      
unsigned char empty = ' ';
LCD1602_EN = 0;
LCD_WrCmd(0x38);   
LCD_WrCmd(0x0c);  
LCD_WrCmd(0x06);  
LCD_WrCmd(0x01);
  LCD_WrCmd(0x80);
Wr_LCD1602_Num(0x00,0);
Wr_LCD1602_Str(0x00,"t");
Wr_LCD1602_Byt(0x00,'t');
St_LCD1602_Cur(0);
St_LCD1602_Clr();
}

void Wr_LCD1602_Str(unsigned char pos,unsigned char *Pwdata)
{
St_LCD1602_Pos(pos);
while(*Pwdata != '\0')
  LCD_WrDat(*Pwdata++);
}
void Wr_LCD1602_Byt(unsigned char pos,unsigned char _data)
{
St_LCD1602_Pos(pos);
LCD_WrDat(_data);
}
void Wr_LCD1602_Num(unsigned char pos,unsigned char _data)
{
St_LCD1602_Pos(pos);
if((0<=_data)&&(_data<=9))
  LCD_WrDat((_data+'0'));
else
  LCD_WrDat('E');
}
void St_LCD1602_Clr(void)
{
    LCD_WrCmd(0x01);//清顯示
}
void St_LCD1602_Cur(bit OpnClose)
{
if(OpnClose)
  LCD_WrCmd(0x0f);
else
  LCD_WrCmd(0x0c);
}


作者: xxpp2011    時間: 2020-5-1 09:51
先考慮線有沒有接錯,對比度調好沒有
作者: 楊雪飛    時間: 2020-5-1 10:58
RS   RW   EN三根線有沒有對應程序,D0 -  D7線序有沒有接反。
作者: 濫情    時間: 2020-5-1 11:26
調節電位器,對比度要調好
作者: dislsqq    時間: 2020-5-1 14:47
xxpp2011 發表于 2020-5-1 09:51
先考慮線有沒有接錯,對比度調好沒有

這些都沒問題,燒例程可以顯示
作者: dislsqq    時間: 2020-5-1 14:49
楊雪飛 發表于 2020-5-1 10:58
RS   RW   EN三根線有沒有對應程序,D0 -  D7線序有沒有接反。

#define LCD1602_DATA P0
sbit LCD1602_EN = P2^7;
sbit LCD1602_RS        = P2^6;
#ifdef P25_DRIV_RW
sbit LCD1602_RW = P2^5;
#endif
作者: 楊雪飛    時間: 2020-5-1 15:29
dislsqq 發表于 2020-5-1 14:49
#define LCD1602_DATA P0
sbit LCD1602_EN = P2^7;
sbit LCD1602_RS        = P2^6;

燒例程可以的話你就把這個程序對照例程的初始化、寫命令、寫數據函數,看看哪里時序不對吧。開發板這玩意難伺候,所以我就覺得初學者用開發板學是個坑。比如我們驅動1602,我用P0口不解上拉電阻都可以直接驅動1602正常顯示。但是在開發板上就不行。我有塊普中開發板,用的1602就跟一般的不一樣,之前因為這個繞了不少彎路。

對于1602的顯示按以下幾塊分解了學就好了。

void main()   主函數
{
lcd init();   先初始化液晶
while()      循環

{
delay();
wrt_com();    寫命令函數,定義位置
delay();
wrt_dat()   ;  寫數據函數,顯示內容。
}

}


lcd_init()    初始化子程序
{
內容
}

wrt_com()    寫命令子程序
{
內容
}

wrt_dat()   寫數據子程序
{
內容
}


delay()    延時子程序
{
內容
}
作者: dislsqq    時間: 2020-5-2 10:21
楊雪飛 發表于 2020-5-1 15:29
燒例程可以的話你就把這個程序對照例程的初始化、寫命令、寫數據函數,看看哪里時序不對吧。開發板這玩意 ...

好的,謝謝
作者: xianming    時間: 2020-5-2 13:01
濫情 發表于 2020-5-1 11:26
調節電位器,對比度要調好

只有一行黑色不是對比度的問題,應該和初始化有關系




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1