找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4666|回復: 13
收起左側

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

[復制鏈接]
ID:316073 發(fā)表于 2018-5-20 16:31 | 顯示全部樓層 |閱讀模式
  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. /* 設置LCD1602光標位置 */
  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. }

復制代碼
回復

使用道具 舉報

ID:316073 發(fā)表于 2018-5-20 16:31 | 顯示全部樓層
請問是哪里得問題呢
回復

使用道具 舉報

ID:334285 發(fā)表于 2018-5-20 16:45 | 顯示全部樓層
檢查有無虛焊,有無短路情況

評分

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

查看全部評分

回復

使用道具 舉報

ID:213173 發(fā)表于 2018-5-20 21:03 | 顯示全部樓層
13067071271 發(fā)表于 2018-5-20 16:31
請問是哪里得問題呢

查延時程序是否與所用單片機適配
回復

使用道具 舉報

ID:329561 發(fā)表于 2018-5-21 09:04 | 顯示全部樓層
你的程序的有問題,你應該根據(jù)LCD的DataSheet來寫程序,根據(jù)LCD的時序圖來對應程序。

評分

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

查看全部評分

回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

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

評分

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

查看全部評分

回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

ID:296970 發(fā)表于 2018-5-23 20:46 | 顯示全部樓層
調一下電位器試試
回復

使用道具 舉報

ID:316073 發(fā)表于 2018-6-4 18:40 | 顯示全部樓層
小黑不黑 發(fā)表于 2018-5-20 16:45
檢查有無虛焊,有無短路情況

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

回復

使用道具 舉報

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

使用道具 舉報

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

是的 我就是沒有建立時間的要求 在adc0832這個芯片上吃了虧
這個lcd是為了做一個做單片機測電壓的
回復

使用道具 舉報

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

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

使用道具 舉報

ID:344884 發(fā)表于 2018-6-4 19:07 | 顯示全部樓層
硬件本身有問題嗎
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表