找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 47551|回復: 43
收起左側

用51單片機控制LCD12864顯示屏源程序

  [復制鏈接]
ID:381653 發(fā)表于 2018-8-1 17:35 | 顯示全部樓層 |閱讀模式
12864液晶在出廠時其對比度已經(jīng)調(diào)好,所以用戶在使用的時候第三管腳可不用接任何東西,本實驗板上為了兼容多家12864液晶所以加了液晶對比度調(diào)節(jié)電位器,若用戶使用我們配套的12864液晶可不用管它,液晶的第三管腳懸空就可以。有些液晶功耗比較大,用戶在使用的時候可將液晶的第19、20引腳的背光不接,這樣字體會很清楚。

P80801-165957.jpg

單片機源程序如下:
  1. /**********************BST-V51實驗開發(fā)板例程************************
  2. *  平臺:BST-V51 + Keil U3 + STC89C52
  3. *  名稱:
  4. *  晶振:11.0592MHZ
  5. *  說明:免費開源,不提供源代碼分析.
  6. ******************************************************************/
  7. /*******************************************************************/
  8. /*                                                                 */
  9. /* 單片機開發(fā)系統(tǒng)演示程序 - 128*64LCD顯示顯示  */
  10. /*                                                                 */
  11. //;*  LCD型號:TS12864A-3(帶漢字庫)或兼容型號    控制器ST7920      */
  12. //;*  MCU:AT89S52 ,晶體頻率:11.0592MHz                              */
  13. /*                                                                 */
  14. /*******************************************************************/

  15. #include <reg51.h>
  16. #include <intrins.h>
  17.        
  18. #define uchar unsigned char
  19. #define uint  unsigned int
  20. /*12864端口定義*/
  21. #define LCD_data  P0             //數(shù)據(jù)口
  22. sbit LCD_RS  =  P2^6;            //寄存器選擇輸入
  23. sbit LCD_RW  =  P2^5;            //液晶讀/寫控制
  24. sbit LCD_EN  =  P2^7;            //液晶使能控制
  25. sbit LCD_PSB =  P1^2;            //串/并方式控制
  26. sbit wela    =  P2^6;
  27. sbit dula    =  P2^7;

  28. uchar code dis1[] = {"看什么看!"};
  29. uchar code dis2[] = {"顯示屏而已!"};
  30. uchar code dis3[] = {"少見多怪!"};
  31. uchar code dis4[] = {"那涼哪呆著!"};                  

  32. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  33. uchar IRDIS[2];
  34. uchar IRCOM[4];
  35. void delay0(uchar x);  //x*0.14MS
  36. void beep();
  37. void  dataconv();
  38. void lcd_pos(uchar X,uchar Y);  //確定顯示位置
  39. /*******************************************************************/
  40. /*                                                                 */
  41. /*  延時函數(shù)                                                       */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void delay(int ms)
  45. {
  46.     while(ms--)
  47.         {
  48.       uchar i;
  49.           for(i=0;i<250;i++)  
  50.            {
  51.             _nop_();                          
  52.                 _nop_();
  53.                 _nop_();
  54.                 _nop_();
  55.            }
  56.         }
  57. }               
  58. /*******************************************************************/
  59. /*                                                                 */
  60. /*檢查LCD忙狀態(tài)                                                    */
  61. /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。      */
  62. /*                                                                 */
  63. /*******************************************************************/
  64. bit lcd_busy()
  65. {                          
  66.     bit result;
  67.     LCD_RS = 0;
  68.     LCD_RW = 1;
  69.     LCD_EN = 1;
  70.     delayNOP();
  71.     result = (bit)(P0&0x80);
  72.     LCD_EN = 0;
  73.     return(result);
  74. }
  75. /*******************************************************************/
  76. /*                                                                 */
  77. /*寫指令數(shù)據(jù)到LCD                                                  */
  78. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  79. /*                                                                 */
  80. /*******************************************************************/
  81. void lcd_wcmd(uchar cmd)
  82. {                          
  83.    while(lcd_busy());
  84.     LCD_RS = 0;
  85.     LCD_RW = 0;
  86.     LCD_EN = 0;
  87.     _nop_();
  88.     _nop_();
  89.     P0 = cmd;
  90.     delayNOP();
  91.     LCD_EN = 1;
  92.     delayNOP();
  93.     LCD_EN = 0;  
  94. }
  95. /*******************************************************************/
  96. /*                                                                 */
  97. /*寫顯示數(shù)據(jù)到LCD                                                  */
  98. /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。                               */
  99. /*                                                                 */
  100. /*******************************************************************/
  101. void lcd_wdat(uchar dat)
  102. {                          
  103.    while(lcd_busy());
  104.     LCD_RS = 1;
  105.     LCD_RW = 0;
  106.     LCD_EN = 0;
  107.     P0 = dat;
  108.     delayNOP();
  109.     LCD_EN = 1;
  110.     delayNOP();
  111.     LCD_EN = 0;
  112. }
  113. /*******************************************************************/
  114. /*                                                                 */
  115. /*  LCD初始化設定                                                  */
  116. /*                                                                 */
  117. /*******************************************************************/
  118. void lcd_init()
  119. {

  120.     LCD_PSB = 1;         //并口方式
  121.    
  122.     lcd_wcmd(0x34);      //擴充指令操作
  123.     delay(5);
  124.     lcd_wcmd(0x30);      //基本指令操作
  125.     delay(5);
  126.     lcd_wcmd(0x0C);      //顯示開,關光標
  127.     delay(5);
  128.     lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容
  129.     delay(5);
  130. }
  131. /*********************************************************/
  132. /*                                                                                                                 */
  133. /* 主程序                                                                                    */
  134. /*                                                       */
  135. /*********************************************************/
  136.   main()
  137. {
  138.     uchar i;
  139.     delay(10);                 //延時
  140.     wela=0;
  141.         dula=0;
  142.     lcd_init();                //初始化LCD            
  143.   
  144.     lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
  145.      i = 0;
  146.     while(dis1[i] != '\0')
  147.      {                         //顯示字符
  148.        lcd_wdat(dis1[i]);
  149.        i++;
  150.      }
  151.     lcd_pos(1,0);             //設置顯示位置為第二行的第1個字符
  152.      i = 0;
  153.     while(dis2[i] != '\0')
  154.      {
  155.        lcd_wdat(dis2[i]);      //顯示字符
  156.        i++;
  157.      }
  158.          lcd_pos(2,0);             //設置顯示位置為第三行的第1個字符
  159.      i = 0;
  160.     while(dis3[i] != '\0')
  161.      {
  162.        lcd_wdat(dis3[i]);      //顯示字符
  163.        i++;
  164.      }
  165.          lcd_pos(3,0);             //設置顯示位置為第四行的第1個字符
  166.      i = 0;
  167.     while(dis4[i] != '\0')
  168.      {
  169.        lcd_wdat(dis4[i]);      //顯示字符
  170.        i++;
  171.      }
  172.      while(1);
  173. }



  174. /*********************************************************/
  175. /*                                                                                                                 */
  176. /* 延時x*0.14ms子程序                                                                         */
  177. /*                                                       */
  178. /*********************************************************/

  179. void delay0(uchar x)    //x*0.14MS
  180. {
  181.   uchar i;
  182. ……………………

  183. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
12864顯示字符.rar (19.33 KB, 下載次數(shù): 1635)


回復

使用道具 舉報

ID:1053568 發(fā)表于 2022-11-26 17:02 | 顯示全部樓層
很好,有用
回復

使用道具 舉報

ID:986562 發(fā)表于 2021-12-4 19:31 來自手機 | 顯示全部樓層
獨帥 發(fā)表于 2021-1-25 15:42
額!我人傻了,我自己沒搞清楚開發(fā)板上接口的位置順序,導致顯示不出來,還以為是程序的問題。樓主的程序是 ...

請問最后怎么顯示出來呢!我就是顯示不出來!
回復

使用道具 舉報

ID:608849 發(fā)表于 2021-10-3 14:05 | 顯示全部樓層
收藏了,自己做小玩具的時候一定用得到
回復

使用道具 舉報

ID:894722 發(fā)表于 2021-4-21 20:51 | 顯示全部樓層
藍琪 發(fā)表于 2018-12-23 10:13
sbit wela    =  P2^6;
sbit dula    =  P2^7;這兩個是定義啥

dula 段選  wela  位選
回復

使用道具 舉報

ID:784221 發(fā)表于 2021-1-25 15:42 | 顯示全部樓層
額!我人傻了,我自己沒搞清楚開發(fā)板上接口的位置順序,導致顯示不出來,還以為是程序的問題。樓主的程序是對的,感謝樓主大大,這對我非常有用,救我于水火之中!
回復

使用道具 舉報

ID:784221 發(fā)表于 2021-1-25 15:25 | 顯示全部樓層
運行不成功,屏上什么也沒有
回復

使用道具 舉報

ID:870548 發(fā)表于 2021-1-12 20:35 | 顯示全部樓層
請問有仿真圖嗎?
回復

使用道具 舉報

ID:807159 發(fā)表于 2020-12-8 13:54 | 顯示全部樓層
用譜中的沒運行成功
回復

使用道具 舉報

ID:775487 發(fā)表于 2020-6-26 13:38 | 顯示全部樓層
用來測試新買的屏,非常好用!謝謝分享!
回復

使用道具 舉報

ID:750087 發(fā)表于 2020-5-19 21:24 來自手機 | 顯示全部樓層
這跟劉清翔51單片機的教程源碼一樣
回復

使用道具 舉報

ID:560981 發(fā)表于 2020-5-11 16:22 | 顯示全部樓層
感謝樓主,頭文件要自己編寫嗎?
回復

使用道具 舉報

ID:617947 發(fā)表于 2020-5-9 00:13 | 顯示全部樓層
感謝樓主,。。。。
回復

使用道具 舉報

ID:742667 發(fā)表于 2020-5-2 09:56 | 顯示全部樓層
壓縮包里有原理圖嗎?
回復

使用道具 舉報

ID:231831 發(fā)表于 2020-4-30 09:58 | 顯示全部樓層
我要二維碼的,正在到處找!
回復

使用道具 舉報

ID:698810 發(fā)表于 2020-4-29 15:12 | 顯示全部樓層

頭文件是自己編寫的嗎
回復

使用道具 舉報

ID:419529 發(fā)表于 2020-4-14 08:42 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:423533 發(fā)表于 2020-4-3 19:37 | 顯示全部樓層
回帖是一種美德~~~~感謝分享
回復

使用道具 舉報

ID:421783 發(fā)表于 2020-3-10 20:46 | 顯示全部樓層
藍琪 發(fā)表于 2018-12-23 10:13
sbit wela    =  P2^6;
sbit dula    =  P2^7;這兩個是定義啥

數(shù)碼管位選 段選
回復

使用道具 舉報

ID:136189 發(fā)表于 2020-2-12 22:31 | 顯示全部樓層
好好學習,日后有用之處
回復

使用道具 舉報

ID:648008 發(fā)表于 2019-12-3 01:27 | 顯示全部樓層
求仿真電路圖
回復

使用道具 舉報

ID:649789 發(fā)表于 2019-11-26 11:26 | 顯示全部樓層
原理圖啥樣呀
回復

使用道具 舉報

ID:643991 發(fā)表于 2019-11-19 23:28 來自手機 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:294754 發(fā)表于 2019-11-19 19:29 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:198286 發(fā)表于 2019-10-22 17:15 | 顯示全部樓層
學習一下,注釋比較詳細,適合初學者
回復

使用道具 舉報

ID:470696 發(fā)表于 2019-10-21 00:01 來自手機 | 顯示全部樓層
感謝樓主分享,小白我拿去研究一下
回復

使用道具 舉報

ID:620768 發(fā)表于 2019-10-8 22:00 | 顯示全部樓層
有下載的嗎,求一份1273176424@qq.com
回復

使用道具 舉報

ID:581801 發(fā)表于 2019-10-6 23:54 | 顯示全部樓層
藍琪 發(fā)表于 2018-12-23 10:13
sbit wela    =  P2^6;
sbit dula    =  P2^7;這兩個是定義啥

樓主的開發(fā)板上P2^6,P2^7.有與數(shù)碼管鏈接,所以需要定義這兩個引腳,然后在初始化中關閉數(shù)碼管。
回復

使用道具 舉報

ID:234544 發(fā)表于 2019-10-3 21:31 | 顯示全部樓層
下載對話框總是一閃而過,怎么回事
回復

使用道具 舉報

ID:319288 發(fā)表于 2019-9-18 10:30 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:470493 發(fā)表于 2019-7-30 10:20 | 顯示全部樓層
非常好用,感謝分享
回復

使用道具 舉報

ID:480412 發(fā)表于 2019-5-13 23:04 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:490330 發(fā)表于 2019-4-3 08:47 | 顯示全部樓層
十分感謝
回復

使用道具 舉報

ID:490006 發(fā)表于 2019-3-14 16:39 | 顯示全部樓層
感謝樓主大大,好人一生平安!!!
回復

使用道具 舉報

ID:473264 發(fā)表于 2019-1-27 00:10 | 顯示全部樓層
收藏
回復

使用道具 舉報

ID:213280 發(fā)表于 2018-12-23 10:13 | 顯示全部樓層
sbit wela    =  P2^6;
sbit dula    =  P2^7;這兩個是定義啥
回復

使用道具 舉報

ID:451363 發(fā)表于 2018-12-21 14:04 來自手機 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:451217 發(fā)表于 2018-12-21 10:26 | 顯示全部樓層
這文件好像在哪見過
回復

使用道具 舉報

ID:436579 發(fā)表于 2018-11-30 15:40 | 顯示全部樓層
厲害。
回復

使用道具 舉報

ID:147492 發(fā)表于 2018-11-14 14:56 | 顯示全部樓層
學習前輩~~~
回復

使用道具 舉報

ID:241700 發(fā)表于 2018-10-27 17:55 | 顯示全部樓層
好東西,收藏了,自己做小玩具的時候一定用得到。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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