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

標(biāo)題: 單片機(jī)驅(qū)動(dòng)lcd12864 [打印本頁]

作者: 0901    時(shí)間: 2021-8-9 14:24
標(biāo)題: 單片機(jī)驅(qū)動(dòng)lcd12864
lcd12864對(duì)于許多小白來說是很困難的,尤其是他的時(shí)序圖,更讓人頭大,相信對(duì)剛接觸單片機(jī)的人來說更是煎熬,因而在這里我要分享一下lcd12864的資料,這是我做的用C51單片機(jī)驅(qū)動(dòng)12864的程序,12864是一個(gè)很重要的顯示模塊,有顯示清晰,利于人機(jī)交互,操作簡(jiǎn)單等優(yōu)點(diǎn),它相比lcd1602能顯示更多的文字,還能顯示圖片,操作指令簡(jiǎn)單,使用很方便,是不少工程師設(shè)計(jì)開發(fā)的首選,因而我整理了一下我之前的項(xiàng)目,把12864的資料特別地整理一下,方便更多的人學(xué)習(xí)和使用。

單片機(jī)源程序如下:
  1. #include "reg52.h"
  2. #include <intrins.h>
  3. #include "12864mokuai.h"
  4. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  5. uchar IRDIS[2];
  6. uchar IRCOM[4];
  7. void delay0(uchar x);  //x*0.14MS
  8. void beep();
  9. void  dataconv();
  10. void lcd_pos(uchar X,uchar Y);  //確定顯示位置
  11. /*******************************************************************/
  12. /*                                                                 */
  13. /*  延時(shí)函數(shù)                                                       */
  14. /*                                                                 */
  15. /*******************************************************************/
  16. void delay(int ms)
  17. {
  18.     while(ms--)
  19.         {
  20.       uchar i;
  21.           for(i=0;i<250;i++)  
  22.            {
  23.             _nop_();                           
  24.                 _nop_();
  25.                 _nop_();
  26.                 _nop_();
  27.            }
  28.         }
  29. }               
  30. /*******************************************************************/
  31. /*                                                                 */
  32. /*檢查L(zhǎng)CD忙狀態(tài)                                                    */
  33. /*lcd_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫指令與數(shù)據(jù)。      */
  34. /*                                                                 */
  35. /*******************************************************************/
  36. bit lcd_busy()
  37. {                          
  38.     bit result;
  39.     LCD_RS = 0;
  40.     LCD_RW = 1;
  41.     LCD_EN = 1;
  42.     delayNOP();
  43.     result = (bit)(P0&0x80);
  44.     LCD_EN = 0;
  45.     return(result);
  46. }
  47. /*******************************************************************/
  48. /*                                                                 */
  49. /*寫指令數(shù)據(jù)到LCD                                                  */
  50. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  51. /*                                                                 */
  52. /*******************************************************************/
  53. void lcd_wcmd(uchar cmd)
  54. {                          
  55.    while(lcd_busy());
  56.     LCD_RS = 0;
  57.     LCD_RW = 0;
  58.     LCD_EN = 0;
  59.     _nop_();
  60.     _nop_();
  61.     P0 = cmd;
  62.     delayNOP();
  63.     LCD_EN = 1;
  64. //    delayNOP();
  65.     LCD_EN = 0;  
  66. }
  67. /*******************************************************************/
  68. /*                                                                 */
  69. /*寫顯示數(shù)據(jù)到LCD                                                  */
  70. /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。                               */
  71. /*                                                                 */
  72. /*******************************************************************/
  73. void lcd_wdat(uchar dat)
  74. {                          
  75.    while(lcd_busy());
  76.     LCD_RS = 1;
  77.     LCD_RW = 0;
  78.     LCD_EN = 0;
  79.     P0 = dat;
  80.     delayNOP();
  81.     LCD_EN = 1;
  82.     delayNOP();
  83.     LCD_EN = 0;
  84. }
  85. /*******************************************************************/
  86. /*                                                                 */
  87. /*  LCD初始化設(shè)定                                                  */
  88. /*                                                                 */
  89. /*******************************************************************/
  90. void lcd_init()
  91. {

  92.     LCD_PSB    = 1;         //并口方式
  93.     lcd_wcmd(0x34);      //擴(kuò)充指令操作
  94.     delay(5);
  95.     lcd_wcmd(0x30);      //基本指令操作
  96.     delay(5);
  97.     lcd_wcmd(0x0C);      //顯示開,關(guān)光標(biāo)
  98.     delay(5);
  99.     lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容
  100.     delay(5);
  101. }


  102. void delay0(uchar x)    //x*0.14MS
  103. {
  104.   uchar i;
  105.   while(x--)
  106. {
  107.   for (i = 0; i<13; i++) {}
  108. }
  109. }
  110. /*********************************************************/
  111. /*                                                       */
  112. /* 設(shè)定顯示位置                                          */
  113. /*                                                       */
  114. /*********************************************************/
  115. void lcd_pos(uchar X,uchar Y)
  116. {                          
  117.    uchar  pos;
  118.    if (X==0)
  119.      {X=0x80;}
  120.    else if (X==1)
  121.      {X=0x90;}
  122.    else if (X==2)
  123.      {X=0x88;}
  124.    else if (X==3)
  125.      {X=0x98;}
  126.    pos = X+Y ;  
  127.    lcd_wcmd(pos);     //顯示地址
  128. }


復(fù)制代碼




  1. #ifndef __lcd12864mokuai_H
  2. #define __lcd12864mokuai_H

  3. #include "reg52.h"
  4. #ifndef uchar
  5. #define uchar unsigned char
  6. #endif

  7. #ifndef uint
  8. #define uint unsigned int
  9. #endif
  10. #define LCD_data  P0             //數(shù)據(jù)口



  11. //開發(fā)板引腳配置
  12. sbit LCD_RS  =  P2^6;             //(數(shù)據(jù)命令)寄存器選擇輸入
  13. sbit LCD_RW  =  P2^5;             //液晶讀/寫控制
  14. sbit LCD_EN  =  P2^7;             //液晶使能控制
  15. sbit LCD_PSB =  P2^2;             //串/并方式控制
  16. sbit LCD_RST =  P2^1;        


  17. void delay0(uchar x);  //x*0.14MS
  18. void beep();
  19. void  dataconv();
  20. void lcd_pos(uchar X,uchar Y);  //確定顯示位置
  21. void lcd_init();
  22. void lcd_wdat(uchar dat);
  23. void LCD_ShowNum(uchar X,uchar Y,uint Number,uchar Length);
  24. #endif

復(fù)制代碼


  1. #include "reg52.h"
  2. #include "12864mokuai.h"
  3. unsigned char code dis1[] = {"中國(guó)加油!"};
  4. unsigned char code dis2[] = {"中國(guó)必勝!"};
  5. unsigned char i;

  6. void main()
  7. {
  8.         lcd_init();
  9.         lcd_pos(0,0);
  10.                         i = 0;
  11.         while(1)
  12.         {
  13.                
  14.         
  15.                 while(dis1[i] != '\0')
  16.                 {                         //顯示字符
  17.                         lcd_wdat(dis1[i]);
  18.                         i++;
  19.                 }
  20.                 lcd_pos(1,0);
  21.                         i = 0;
  22.                 while(dis2[i] != '\0')
  23.                 {                         //顯示字符
  24.                         lcd_wdat(dis2[i]);
  25.                         i++;
  26.                 }
  27.         }
  28. }
復(fù)制代碼


作者: 51hei團(tuán)團(tuán)    時(shí)間: 2021-8-9 15:16
樓主你好 缺少"12864mokuai.h" 無法編譯啊
作者: 0901    時(shí)間: 2021-8-9 16:02
51hei團(tuán)團(tuán) 發(fā)表于 2021-8-9 15:16
樓主你好 缺少"12864mokuai.h" 無法編譯啊

里面有的,我是按模塊化編程的
作者: 0901    時(shí)間: 2021-8-9 16:05
51hei團(tuán)團(tuán) 發(fā)表于 2021-8-9 15:16
樓主你好 缺少"12864mokuai.h" 無法編譯啊

12864mokuai.h在程序里面呢,我用的是模塊編程
作者: 楊雪飛    時(shí)間: 2021-8-9 21:42
12864有幾種,有字庫(kù)的7920,和沒字庫(kù)的7565什么的,驅(qū)動(dòng)是不一樣的,有字庫(kù)的7920可以用一般的LCD1602的字符液晶驅(qū)動(dòng)程序,把字符改成漢字還有地址改一下就可以。而沒有字庫(kù)的幾種驅(qū)動(dòng)程序又不盡相同,所以,樓主給的程序?qū)τ诔鯇W(xué)的很可能會(huì)踩雷。
作者: 楊雪飛    時(shí)間: 2021-8-9 21:46
樓主的程序應(yīng)該是帶字庫(kù)得到12864的驅(qū)動(dòng),其實(shí)可以簡(jiǎn)化很多。這樣的程序高手用不上,新手又使用不了,樓主也沒有細(xì)說,初學(xué)的需要注意下。
作者: 已飛的鷹    時(shí)間: 2021-8-10 11:13
楊雪飛 發(fā)表于 2021-8-9 21:46
樓主的程序應(yīng)該是帶字庫(kù)得到12864的驅(qū)動(dòng),其實(shí)可以簡(jiǎn)化很多。這樣的程序高手用不上,新手又使用不了,樓主 ...

現(xiàn)在非字庫(kù)的LCD12864市面上用得不多了吧,我在某1個(gè)寶買到的基本都是帶字庫(kù)的,這個(gè)程序帶字庫(kù)12864可以順利顯示,而且思路清晰,很適合初學(xué)者。!
作者: 0901    時(shí)間: 2021-8-10 21:43
楊雪飛 發(fā)表于 2021-8-9 21:42
12864有幾種,有字庫(kù)的7920,和沒字庫(kù)的7565什么的,驅(qū)動(dòng)是不一樣的,有字庫(kù)的7920可以用一般的LCD1602的字 ...

你說的沒錯(cuò),這個(gè)是帶字庫(kù)的,帶字庫(kù)的是比較常見的,用的人也比較多,無論是功能還是使用方面,帶字庫(kù)的都比不帶字庫(kù)的好很多
作者: 0901    時(shí)間: 2021-8-10 21:47
已飛的鷹 發(fā)表于 2021-8-10 11:13
現(xiàn)在非字庫(kù)的LCD12864市面上用得不多了吧,我在某1個(gè)寶買到的基本都是帶字庫(kù)的,這個(gè)程序帶字庫(kù)12864可以 ...

沒錯(cuò),一般工程項(xiàng)目還是首選帶字庫(kù)的
作者: william_wangxb    時(shí)間: 2021-9-4 12:11
不帶字庫(kù)的可以自己編字形碼,尤其是顯示特殊字體的時(shí)候就有優(yōu)勢(shì),缺點(diǎn)是會(huì)占用單片機(jī)的空間,有字庫(kù)的就沒有這個(gè)問題,兩種屏的驅(qū)動(dòng)不一樣,不通用,初學(xué)者要注意
作者: a185980800    時(shí)間: 2021-9-4 13:16
玩點(diǎn)個(gè)性化的字體還得沒字庫(kù)的。
作者: 楊雪飛    時(shí)間: 2021-9-4 18:03
已飛的鷹 發(fā)表于 2021-8-10 11:13
現(xiàn)在非字庫(kù)的LCD12864市面上用得不多了吧,我在某1個(gè)寶買到的基本都是帶字庫(kù)的,這個(gè)程序帶字庫(kù)12864可以 ...

相對(duì)來說,不帶字庫(kù)的用的多,因?yàn)轱@示更靈活。
作者: 楊雪飛    時(shí)間: 2021-9-4 18:04
0901 發(fā)表于 2021-8-10 21:43
你說的沒錯(cuò),這個(gè)是帶字庫(kù)的,帶字庫(kù)的是比較常見的,用的人也比較多,無論是功能還是使用方面,帶字庫(kù)的 ...

我倒是覺得不帶字庫(kù)的好用,畫點(diǎn)畫線任意坐標(biāo)顯示,價(jià)格便宜,從我自己拆過的電子設(shè)備來看,70
%以上用的還是不帶字庫(kù)的。
作者: 楊雪飛    時(shí)間: 2021-9-4 18:16
已飛的鷹 發(fā)表于 2021-8-10 11:13
現(xiàn)在非字庫(kù)的LCD12864市面上用得不多了吧,我在某1個(gè)寶買到的基本都是帶字庫(kù)的,這個(gè)程序帶字庫(kù)12864可以 ...

說實(shí)話帶字庫(kù)的做簡(jiǎn)單顯示尚可,復(fù)雜的顯示根本無法實(shí)現(xiàn)。所以,市面大部分設(shè)備都是不帶字庫(kù)的,比如ST7565之類的cog屏。另外你覺得樓主這貼思路清晰適合初學(xué)者,那我可以告訴你,對(duì)于7920的帶字庫(kù)屏的驅(qū)動(dòng)只需要將最簡(jiǎn)單的LCD1602字符屏的程序把字母和數(shù)字改成漢字即可顯示,四步;1、引腳定義、函數(shù)定義。2、寫命令函數(shù)、3、寫數(shù)據(jù)函數(shù) 4、主函數(shù)。就完事了,無需什么POS(0,0)什么的,只需要寫指令函數(shù)把地址寫上就行。





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