找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602可以在仿真顯示出來,插到我的單片機(jī)上就只亮,不顯示字符

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:316073 發(fā)表于 2018-5-20 16:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<reg52.h>

  2. #define LCD1602_DB P0

  3. sbit LCD1602_RS = P2^6;
  4. sbit LCD1602_RW = P2^5;
  5. sbit LCD1602_E  = P2^7;

  6. typedef unsigned int uint;
  7. typedef unsigned char uchar;

  8. void Delay10us(uint i)         
  9. {
  10.         while(i--);
  11. }

  12. /* lcd1602寫入數(shù)據(jù)/命令(i=1/i=0) */
  13. void Write_Cmd_Dat(uchar i,uchar dat)   
  14. {
  15.         LCD1602_RS = i;
  16.         LCD1602_RW = 0;        
  17.         LCD1602_E  = 1;
  18.         LCD1602_DB = dat;
  19.         Delay10us(500);                 //不能少!!
  20.         LCD1602_E  = 0;
  21. }


  22. void LCD1602Init()
  23. {
  24.         Write_Cmd_Dat(0,0x38);
  25.         Write_Cmd_Dat(0,0x0c);
  26.         Write_Cmd_Dat(0,0x06);
  27.         Write_Cmd_Dat(0,0x01);
  28. }


  29. /* 設(shè)置LCD1602光標(biāo)位置 */
  30. void LcdSetCursor(uchar x,uchar y)
  31. {
  32.         uchar addr;

  33.         if(y==0)
  34.                 addr = 0x00 + x;
  35.         else
  36.                 addr = 0x40 + x;

  37.         Write_Cmd_Dat(0,addr |0x80);
  38. }

  39. /* LCD1602顯示字符串 */
  40. void DisplayString(uchar *s)
  41. {
  42.         while(*s>0)
  43.         {
  44.                 Write_Cmd_Dat(1,*s);
  45.                 s++;
  46.         }
  47. }



  48. void main()
  49. {

  50.         char code string_1[] = "sadfsadf";
  51.         char code string_2[] = "   23";
  52.         LCD1602Init();
  53.         LcdSetCursor(0,0);
  54.         DisplayString(string_1);

  55.         LcdSetCursor(0,1);
  56.         DisplayString(string_2);

  57.         while(1);               
  58. }

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

使用道具 舉報(bào)

沙發(fā)
ID:316073 發(fā)表于 2018-5-20 16:31 | 只看該作者
請問是哪里得問題呢
回復(fù)

使用道具 舉報(bào)

板凳
ID:334285 發(fā)表于 2018-5-20 16:45 | 只看該作者
檢查有無虛焊,有無短路情況

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2018-5-20 21:03 | 只看該作者
13067071271 發(fā)表于 2018-5-20 16:31
請問是哪里得問題呢

查延時(shí)程序是否與所用單片機(jī)適配
回復(fù)

使用道具 舉報(bào)

5#
ID:329561 發(fā)表于 2018-5-21 09:04 | 只看該作者
你的程序的有問題,你應(yīng)該根據(jù)LCD的DataSheet來寫程序,根據(jù)LCD的時(shí)序圖來對應(yīng)程序。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

6#
ID:319019 發(fā)表于 2018-5-21 09:16 | 只看該作者
我老是看到有人寫1602的程序總是沒‘’檢查是否忙碌“”這個(gè)函數(shù),我還以為不寫也可以,就特地去刪除這個(gè)函數(shù)試試,結(jié)果出現(xiàn)一排方塊。我是真的服,我看到?jīng)]加的不止三次了。還有你的
/* LCD1602顯示字符串 */while(*s>0)這樣寫不是死循環(huán)嗎,能顯示出嗎?DisplayString(string_1);沒加&編譯沒報(bào)錯(cuò),我沒寫立刻報(bào)錯(cuò).
        
  

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

7#
ID:329561 發(fā)表于 2018-5-23 16:53 | 只看該作者
zhdp 發(fā)表于 2018-5-21 09:16
我老是看到有人寫1602的程序總是沒‘’檢查是否忙碌“”這個(gè)函數(shù),我還以為不寫也可以,就特地去刪除這個(gè)函 ...

這個(gè)回帖明顯有問題,忙信號(hào)檢測可以加但是沒有必要,只要加入一定的延遲即可不必那么麻煩的,忙檢測對于高速器件單片機(jī)來說是必要的,但是51單片機(jī)的最大頻率也就24MHz,我之前測試過,在兩個(gè)數(shù)據(jù)寫入不加延遲是可以正常顯示的,也不用忙檢測。
再解釋下忙檢測,是為了防止寫一個(gè)信號(hào)的時(shí)候,這一個(gè)信號(hào)沒有寫完就開始寫下一數(shù)據(jù),造成錯(cuò)誤才加入的忙檢測。
我之前回復(fù)過這個(gè)問題,程序有問題,根據(jù)LCD1602D 的DATASHEET文檔來編寫程序。
(我的正確答案只有20黑幣獎(jiǎng)勵(lì),回答有問題的竟然獎(jiǎng)勵(lì)50黑幣,我很不開心~)

評分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

8#
ID:329561 發(fā)表于 2018-5-23 17:01 | 只看該作者
本來想等著樓主回復(fù),問我怎么改程序的,發(fā)現(xiàn)樓主不見了,那我把你的問題解釋一下,你的數(shù)據(jù)輸入之前應(yīng)該滿足建立時(shí)間的要求,數(shù)據(jù)先使能再寫入數(shù)據(jù)怎么能滿足建立時(shí)間的要求呢。你應(yīng)該先把數(shù)據(jù)寫入LCD延遲一段時(shí)間之后使能EN置1,再延遲一段時(shí)間后清0 EN

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

9#
ID:296970 發(fā)表于 2018-5-23 20:46 | 只看該作者
調(diào)一下電位器試試
回復(fù)

使用道具 舉報(bào)

10#
ID:316073 發(fā)表于 2018-6-4 18:40 | 只看該作者
小黑不黑 發(fā)表于 2018-5-20 16:45
檢查有無虛焊,有無短路情況

問題已經(jīng)解決了  我發(fā)現(xiàn)我的液晶屏是4路的

回復(fù)

使用道具 舉報(bào)

11#
ID:316073 發(fā)表于 2018-6-4 18:42 | 只看該作者
謝謝打家由于我是第一次發(fā)帖沒能及時(shí)回復(fù)大家
下面是我把配置的代碼改了就沒問題了
void LcdInit()                                                  //LCD初始化子程序
{
        Write_Cmd_Dat(0,0x32);         //將8位總線轉(zhuǎn)為4位總線
        Write_Cmd_Dat(0,0x28);         //在四位線下的初始化
        Write_Cmd_Dat(0,0x0c);  //開顯示不顯示光標(biāo)
        Write_Cmd_Dat(0,0x06);  //寫一個(gè)指針加1
        Write_Cmd_Dat(0,0x01);  //清屏
        Write_Cmd_Dat(0,0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
}
回復(fù)

使用道具 舉報(bào)

12#
ID:316073 發(fā)表于 2018-6-4 18:44 | 只看該作者
xyzmk123 發(fā)表于 2018-5-23 17:01
本來想等著樓主回復(fù),問我怎么改程序的,發(fā)現(xiàn)樓主不見了,那我把你的問題解釋一下,你的數(shù)據(jù)輸入之前應(yīng)該滿 ...

是的 我就是沒有建立時(shí)間的要求 在adc0832這個(gè)芯片上吃了虧
這個(gè)lcd是為了做一個(gè)做單片機(jī)測電壓的
回復(fù)

使用道具 舉報(bào)

13#
ID:316073 發(fā)表于 2018-6-4 18:47 | 只看該作者
zhdp 發(fā)表于 2018-5-21 09:16
我老是看到有人寫1602的程序總是沒‘’檢查是否忙碌“”這個(gè)函數(shù),我還以為不寫也可以,就特地去刪除這個(gè)函 ...

謝謝你 我回去改了函數(shù)
回復(fù)

使用道具 舉報(bào)

14#
ID:344884 發(fā)表于 2018-6-4 19:07 | 只看該作者
硬件本身有問題嗎
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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