找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 8082|回復(fù): 12
收起左側(cè)

STC89系列單片機(jī)LCD12864液晶顯示,液晶屏亮了什么都沒(méi)有顯示

[復(fù)制鏈接]
ID:299493 發(fā)表于 2018-8-23 15:28 | 顯示全部樓層 |閱讀模式
  1. /* ***************************************************** */
  2. /* ***************************************************** */
  3. // 工  程   : 51單片機(jī)開(kāi)發(fā)板
  4. // 文件名   : LCD12864.c
  5. // 處理器   : STC89C52RC
  6. // 編譯環(huán)境 : Keil5 C51
  7. // 系統(tǒng)時(shí)鐘 : 11.0592MHZ
  8. // 簡(jiǎn)單描述 : 本文件是帶字庫(kù)LCD12864顯示程序
  9. /* ***************************************************** */
  10. #include <reg52.h>
  11. #define uint unsigned int
  12. #define uchar unsigned char
  13. #define Lcd_Bus P2 //數(shù)據(jù)總線
  14. /* ***************************************************** */
  15. // 位定義
  16. /* ***************************************************** */
  17. sbit RS=P1^2;     //數(shù)據(jù)/命令選擇端(H/L)
  18. sbit RW=P1^1;    //數(shù)/寫(xiě)選擇端(H/L)
  19. sbit E=P1^0;     //使能信號(hào)
  20. /* ***************************************************** */
  21. // 函數(shù)名稱(chēng):DelayMS()
  22. // 函數(shù)功能:延時(shí)毫秒數(shù)(ValMS)
  23. // 入口參數(shù):無(wú)
  24. // 出口參數(shù):無(wú)
  25. /* ***************************************************** */
  26. void DelayMS(uint ValMS)
  27. {
  28.         uint uiVal,ujVal;
  29.         for(uiVal = 0; uiVal < ValMS; uiVal++)
  30.                 for(ujVal = 0; ujVal < 121; ujVal++);
  31. }
  32. /* ***************************************************** */
  33. // 函數(shù)名稱(chēng)hk_busy()
  34. // 函數(shù)功能:檢測(cè)狀態(tài)標(biāo)志位(判斷是忙/閑)
  35. // 入口參數(shù):無(wú)
  36. // 出口參數(shù):無(wú)
  37. /* ***************************************************** */
  38. void chk_busy()
  39. {  
  40.           Lcd_Bus=0x00;
  41.     RS=0;
  42.     RW=1;
  43.     E=1;  
  44.           DelayMS(1);
  45.     while(Lcd_Bus & 0x80);   // 若LCD忙,停止到這里,否則走起
  46.     E=0;                // 之后將EN初始化為低電平
  47. }

  48. /* ***************************************************** */
  49. // 函數(shù)名稱(chēng)rite_com()
  50. // 函數(shù)功能:LCD寫(xiě)指令
  51. // 入口參數(shù):指令(cmdcode)
  52. // 出口參數(shù):無(wú)
  53. /* ***************************************************** */
  54. void write_com(unsigned char cmdcode)
  55. {
  56.         chk_busy();     //忙檢查
  57.         RS=0;
  58.         RW=0;      //RS=0,RW=0;表示MCU寫(xiě)指令到暫存器IR
  59.         E=1;
  60.         Lcd_Bus=cmdcode;   //Lcd_Bus=P0;
  61.         E=0;      //E由高到低變化配合W進(jìn)行寫(xiě)指令或?qū)憯?shù)據(jù)

  62. }
  63. /* ***************************************************** */
  64. // 函數(shù)名稱(chēng)rite_data()
  65. // 函數(shù)功能:LCD寫(xiě)數(shù)據(jù)
  66. // 入口參數(shù):數(shù)據(jù)(Dispdata)
  67. // 出口參數(shù):無(wú)
  68. /* ***************************************************** */
  69. void write_data(unsigned char Dispdata)
  70. {  
  71.   chk_busy();     //忙檢查
  72.         RS=1;
  73.         RW=0;      //RS=1;RW=0;表示MCU寫(xiě)數(shù)據(jù)到暫存器IR
  74.         E=1;
  75.         Lcd_Bus=Dispdata;  //Lcd_Bus=P0;
  76.         E=0;      //E由高到低變化配合W進(jìn)行寫(xiě)指令或?qū)憯?shù)據(jù)
  77. }
  78. /* ***************************************************** */
  79. // 函數(shù)名稱(chēng):lcm_init()
  80. // 函數(shù)功能:LCD初始化
  81. // 入口參數(shù):無(wú)
  82. // 出口參數(shù):無(wú)
  83. /* ***************************************************** */
  84. void lcm_init()
  85. {
  86.    write_com(0x30);    //選擇8bit數(shù)據(jù)流 0X30=0011,0000
  87.          DelayMS(10);
  88.    write_com(0x0C);    //開(kāi)顯示(無(wú)游標(biāo),不反白)
  89.          DelayMS(10);
  90.    write_com(0x01);    //清除顯示,并且設(shè)定地址指針為00H
  91.          DelayMS(10);
  92. }
  93. //============================================================//寫(xiě)數(shù)據(jù)或指令(被調(diào)用層)
  94. void lcm_w_test(bit i,unsigned char word)
  95. {
  96.    if(i == 0)   //根據(jù)i的狀態(tài)區(qū)分指令或數(shù)據(jù)
  97.          {   
  98.       write_com(word);//寫(xiě)數(shù)據(jù)或指令(0,指令)
  99.    }
  100.    else
  101.         {
  102.    write_data(word);//寫(xiě)指令或數(shù)據(jù)(1,數(shù)據(jù))
  103.   }
  104. }
  105. //-----------------------------------------------------------//清屏函數(shù)
  106. void lcm_clr(void){
  107.    lcm_w_test(0,0x01);
  108. }
  109. //===========================================================//向LCM發(fā)送一個(gè)字符串,長(zhǎng)度64字符之內(nèi)(被調(diào)用層),
  110. void lcm_w_word(unsigned char *s)
  111. {
  112.     while(*s>0)  //*s指針
  113.          {     
  114.       write_data(*s);//用指針顯示數(shù)據(jù)地址
  115.       s++;      //自加顯示下一個(gè)數(shù)據(jù)地址
  116.     }
  117. }
  118. void welcome(void)        //初始化開(kāi)機(jī)顯示
  119. {
  120.     lcm_w_test(0,0x81);   //寫(xiě)指令和地址
  121.     lcm_w_word ("空山新雨后,"); //寫(xiě)顯示數(shù)據(jù)
  122.     lcm_w_test(0,0x91);
  123.     lcm_w_word ("天氣晚來(lái)秋.");
  124.     lcm_w_test(0,0x89);
  125.     lcm_w_word ("明月松間照,");
  126.     lcm_w_test(0,0x99);
  127.     lcm_w_word ("清泉石上流.");
  128. }

  129. void main()
  130. {
  131.     lcm_init();//初始化液晶顯示屏
  132.     lcm_clr();//清屏
  133.     welcome(); //初始化開(kāi)機(jī)顯示畫(huà)面,顯示信息
  134.     DelayMS(3000); //顯示停留3秒
  135.     while(1);
  136. }

復(fù)制代碼
液晶屏亮了什么都沒(méi)有顯示,求大佬告知。
QQ圖片20180823152417.png

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
dsadadsad + 5 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:299493 發(fā)表于 2018-8-23 17:21 | 顯示全部樓層
還有就是我是用的STC15系列單片機(jī)轉(zhuǎn)換板轉(zhuǎn)成STC89系列的
回復(fù)

使用道具 舉報(bào)

ID:375092 發(fā)表于 2018-8-23 21:57 | 顯示全部樓層
把你的這個(gè)welcome這個(gè)現(xiàn)實(shí)函數(shù)寫(xiě)進(jìn)while死循環(huán),否則不會(huì)現(xiàn)在文字,因?yàn)槟忝看蔚某跏蓟记迤亮�,你要�?xiě)進(jìn)while循環(huán)之后才能執(zhí)行,才不會(huì)被(0x01)這個(gè)指令清屏。還有檢查一下你的忙函數(shù),之前我在玩MSP430 的時(shí)候,就遇到這樣的問(wèn)題,然后把忙函數(shù)去掉就好了,你這些方面都試著檢查看看,盡量自己找出問(wèn)題才有進(jìn)步。

評(píng)分

參與人數(shù) 2黑幣 +60 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!
yousunny + 10 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-8-23 16:39 | 顯示全部樓層
本帖最后由 zl2168 于 2018-8-23 22:01 編輯

LCD12864顯示屏顯示漢字
Proteus仿真一下,確認(rèn)有效。
實(shí)驗(yàn)25 LCD12864顯示屏顯示.rar (60.48 KB, 下載次數(shù): 60)
12864.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行,可演示,可觀測(cè),程序語(yǔ)句條條有注解。
回復(fù)

使用道具 舉報(bào)

ID:375092 發(fā)表于 2018-8-23 19:11 | 顯示全部樓層
檢測(cè)是不是忙狀態(tài)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-8-24 06:09 | 顯示全部樓層
一直有個(gè)夢(mèng) 發(fā)表于 2018-8-23 17:21
還有就是我是用的STC15系列單片機(jī)轉(zhuǎn)換板轉(zhuǎn)成STC89系列的

你用STC15系列單片機(jī)轉(zhuǎn)換板轉(zhuǎn)成STC89只能使兩者管腳排列達(dá)成一致,并不能改變兩者的電特性差異。STC15系列是1T單片機(jī),速度比STC89快得多,原程序的 DelayMS 延時(shí)函數(shù)不適應(yīng)STC15系列單片機(jī),需要修改才能滿(mǎn)足LCD12864驅(qū)動(dòng)程序的時(shí)序條件。延時(shí)程序改成這樣試試。
void DelayMS(uint ValMS)
{
        uint uiVal,ujVal;
        for(uiVal = 0; uiVal < ValMS; uiVal++)
                for(ujVal = 0; ujVal < 1150; ujVal++);
}
回復(fù)

使用道具 舉報(bào)

ID:299493 發(fā)表于 2018-8-24 09:30 | 顯示全部樓層
609763691 發(fā)表于 2018-8-23 21:57
把你的這個(gè)welcome這個(gè)現(xiàn)實(shí)函數(shù)寫(xiě)進(jìn)while死循環(huán),否則不會(huì)現(xiàn)在文字,因?yàn)槟忝看蔚某跏蓟记迤亮耍阋獙?xiě)進(jìn) ...

我清屏函數(shù)是在顯示前面的,我試過(guò)了放while里面也不行。忙函數(shù)全部去掉也不行。
回復(fù)

使用道具 舉報(bào)

ID:299493 發(fā)表于 2018-8-24 09:31 | 顯示全部樓層
wulin 發(fā)表于 2018-8-24 06:09
你用STC15系列單片機(jī)轉(zhuǎn)換板轉(zhuǎn)成STC89只能使兩者管腳排列達(dá)成一致,并不能改變兩者的電特性差異。STC15系 ...

修改了也不行的。。。
回復(fù)

使用道具 舉報(bào)

ID:299493 發(fā)表于 2018-8-24 09:32 | 顯示全部樓層
zl2168 發(fā)表于 2018-8-23 16:39
LCD12864顯示屏顯示漢字
先Proteus仿真一下,確認(rèn)有效。
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教 ...

.C文件都沒(méi)有,發(fā)出來(lái)有上面用呢
回復(fù)

使用道具 舉報(bào)

ID:299493 發(fā)表于 2018-8-24 10:16 | 顯示全部樓層
問(wèn)題解決了,感謝各位大佬。I/O口電流不夠,設(shè)置成推挽輸出就能顯示了。
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-8-24 22:15 | 顯示全部樓層
一直有個(gè)夢(mèng) 發(fā)表于 2018-8-24 09:32
.C文件都沒(méi)有,發(fā)出來(lái)有上面用呢

仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書(shū)上看了。到圖書(shū)館借,或到新華書(shū)店翻閱,或到網(wǎng)上書(shū)店打折購(gòu)買(mǎi)。
回復(fù)

使用道具 舉報(bào)

ID:589584 發(fā)表于 2019-8-8 11:06 | 顯示全部樓層
一直有個(gè)夢(mèng) 發(fā)表于 2018-8-24 10:16
問(wèn)題解決了,感謝各位大佬。I/O口電流不夠,設(shè)置成推挽輸出就能顯示了。

程序怎么改的呀
回復(fù)

使用道具 舉報(bào)

ID:589584 發(fā)表于 2019-8-8 12:17 | 顯示全部樓層
一直有個(gè)夢(mèng) 發(fā)表于 2018-8-24 10:16
問(wèn)題解決了,感謝各位大佬。I/O口電流不夠,設(shè)置成推挽輸出就能顯示了。

我把P3M0=0x80;P3M1=0xf0;(我的是P3口)這樣設(shè)置還是光亮著不顯示,為什么呀
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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