久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7374|回復: 9
打印 上一主題 下一主題
收起左側

基于51單片機的ST7920芯片lcd12864液晶顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
有助新人學習12864液晶的資料

ST7920驅動程序:
  1. /*********************************************************************************
  2. * 【編寫時間】: 2017年3月19日
  3. * 【作    者】: 清翔電子:03
  4. * 【版    本】: 1.0
  5. * 【實驗平臺】: QX-MCS51 單片機開發板
  6. * 【外部晶振】: 11.0592mhz       
  7. * 【主控芯片】: STC89C52RC
  8. * 【編譯環境】: Keil μVisio4       
  9. * 【程序功能】: 12864液晶顯示測試                                                                                           
  10. * 【使用說明】: 使用液晶前拔下數碼管J6跳帽
  11. 12864屏幕向板子外插,插在L1排母上
  12. **********************************************************************************/

  13. #include <reg52.h>
  14. #include <string.h>

  15. #define uchar unsigned char
  16. #define uint  unsigned int

  17. uchar code IC_DAT[];
  18. uchar code pic1[];
  19. uchar code pic2[];
  20. uchar code pic3[];

  21. sbit RS  = P0^7;
  22. sbit WRD = P0^6;
  23. sbit E   = P0^5;
  24. sbit PSB = P0^4;
  25. sbit RES = P0^3;

  26. void TransferData(char data1,bit DI);
  27. void display(void);
  28. void display_grapic(void);
  29. void delayms(uint n);
  30. void DisplayLine(uchar line1,uchar line2);
  31. void DisplayGraphic(uchar code *adder);
  32. void delay(uint m);
  33. void lcd_mesg(uchar code *adder1);

  34. uchar code IC_DAT[]={
  35. "    智能小車    "  
  36. "    俱樂部      "
  37. "    QQ 群號:     "
  38. "   12933307    "
  39. };

  40. uchar code IC_DAT2[]={
  41. "  床前明月光,  "                        //0x80
  42. "  疑是地上霜,  "                        //0x90
  43. "  舉頭望明月。  "                        //0x88
  44. "  低頭思故鄉。  "                        //0x98
  45. };

  46. /********************************************************************
  47. * 名稱 : Convert(uchar In_Date)
  48. * 功能 : 因為電路設計時,P0.0--P0.7接法剛好了資料中的相反,所以設計該函數。
  49. * 輸入 : 1602資料上的值
  50. * 輸出 : 送到1602的值
  51. ***********************************************************************/
  52. unsigned char Convert(unsigned char In_Date)
  53. {
  54.     unsigned char i, Out_Date = 0, temp = 0;
  55.     for(i=0; i<8; i++)
  56.     {
  57.         //temp = (In_Date >> i) & 0x01;
  58.         //Out_Date |= (temp << (7 - i));
  59.                 Out_Date=  In_Date;

  60.     }
  61.     return Out_Date;
  62. }

  63. void initinal(void)           //LCD字庫初始化程序
  64. {
  65.            delay(40);             //大于40MS的延時程序
  66.            PSB=1;                 //設置為8BIT并口工作模式
  67.            delay(1);              //延時
  68.            RES=0;                 //復位
  69.            delay(1);              //延時
  70.            RES=1;                 //復位置高
  71.            delay(10);
  72.            TransferData(0x30,0);  //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF
  73.            delay(100);            //大于100uS的延時程序
  74.            TransferData(0x30,0);  //Function Set
  75.            delay(37);             ////大于37uS的延時程序
  76.            TransferData(0x08,0);  //Display on Control
  77.            delay(100);            //大于100uS的延時程序
  78.            TransferData(0x10,0);  //Cursor Display Control光標設置
  79.            delay(100);            //大于100uS的延時程序
  80.            TransferData(0x0C,0);  //Display Control,D=1,顯示開
  81.            delay(100);            //大于100uS的延時程序
  82.            TransferData(0x01,0);  //Display Clear
  83.            delay(10);             //大于10mS的延時程序
  84.            TransferData(0x06,0);  //Enry Mode Set,光標從右向左加1位移動
  85.            delay(100);            //大于100uS的延時程序
  86.           }

  87. /********************************************************************
  88. * 名稱 : Main()
  89. * 功能 : 主函數
  90. * 輸入 : 無
  91. * 輸出 : 無
  92. ***********************************************************************/
  93. void     initina2(void)           //LCD顯示圖片(擴展)初始化程序
  94.           {
  95.            delay(40);             //大于40MS的延時程序
  96.            PSB=1;                 //設置為8BIT并口工作模式
  97.            delay(1);              //延時
  98.            RES=0;                 //復位
  99.            delay(1);              //延時
  100.            RES=1;                 //復位置高
  101.            delay(10);

  102.            TransferData(0x36,0);  //Extended Function Set RE=1: extended instruction
  103.            delay(100);            //大于100uS的延時程序
  104.            TransferData(0x36,0);  //Extended Function Set:RE=1: extended instruction set
  105.            delay(37);             ////大于37uS的延時程序
  106.            TransferData(0x3E,0);  //EXFUNCTION(DL=8BITS,RE=1,G=1)
  107.            delay(100);            //大于100uS的延時程序
  108.            TransferData(0x01,0);  //CLEAR SCREEN
  109.            delay(100);            //大于100uS的延時程序
  110.           }

  111. /********************************************************************
  112. * 名稱 : Main()
  113. * 功能 : 主函數
  114. * 輸入 : 無
  115. * 輸出 : 無
  116. ***********************************************************************/
  117. void    main(void)
  118.      {
  119.          while(1)
  120.             {
  121.                   initina2();            //調用LCD顯示圖片(擴展)初始化程序
  122.   
  123.           DisplayGraphic(pic2);  //顯示圖片2
  124.           delayms(200);                          

  125.           initinal();                    //調用LCD字庫初始化程序
  126.           delay(100);            //大于100uS的延時程序
  127.           lcd_mesg(IC_DAT);      //顯示中文漢字1
  128.           delayms(240);
  129.           delayms(240);
  130.           
  131.           initinal();                    //調用LCD字庫初始化程序
  132.           delay(100);            //大于100uS的延時程序
  133.           lcd_mesg(IC_DAT2);     //顯示中文漢字2
  134.           delayms(240);
  135.                   delayms(240);
  136.                   initinal();  
  137.         }
  138.       }

  139. /********************************************************************
  140. * 名稱 : Main()
  141. * 功能 : 主函數
  142. * 輸入 : 無
  143. * 輸出 : 無
  144. ***********************************************************************/
  145. void   lcd_mesg(unsigned char code *adder1)
  146. {
  147.         unsigned char i;
  148.         TransferData(0x80,0);  //Set Graphic Display RAM Address
  149.         delay(100);
  150.         for(i=0;i<32;i++)
  151.                 {
  152.                           TransferData(*adder1,1);
  153.                            adder1++;
  154.                 }

  155.         TransferData(0x90,0);  //Set Graphic Display RAM Address
  156.         delay(100);
  157.         for(i=32;i<64;i++)
  158.                 {
  159.                           TransferData(*adder1,1);
  160.                            adder1++;
  161.                 }
  162. }

  163. /********************************************************************
  164. * 名稱 : Main()
  165. * 功能 : 主函數
  166. * 輸入 : 無
  167. * 輸出 : 無
  168. ***********************************************************************/
  169. void    TransferData(char data1,bit DI)  //傳送數據或者命令,當DI=0是,傳送命令,當DI=1,傳送數據.
  170.           {
  171.             WRD=0;
  172.             RS=DI;
  173.             delay(1);
  174.             P2=Convert(data1);
  175.             E=1;
  176.             delay(1);
  177.             E=0;
  178.            }

  179. /********************************************************************
  180. * 名稱 : Main()
  181. * 功能 : 主函數
  182. * 輸入 : 無
  183. * 輸出 : 無
  184. ***********************************************************************/
  185. void    delayms(unsigned int n)            //延時10×n毫秒程序
  186.                    {
  187.                       unsigned int i,j;
  188.                       for(i=0;i<n;i++)
  189.                          for(j=0;j<2000;j++);
  190.                    }

  191. /********************************************************************
  192. * 名稱 : Main()
  193. * 功能 : 主函數
  194. * 輸入 : 無
  195. * 輸出 : 無
  196. ***********************************************************************/
  197. void    delay(unsigned int m)            //延時程序
  198.                    {
  199.                       unsigned int i,j;
  200.                       for(i=0;i<m;i++)
  201.                          for(j=0;j<10;j++);
  202.                    }

  203. /********************************************************************
  204. * 名稱 : Main()
  205. * 功能 : 主函數
  206. * 輸入 : 無
  207. * 輸出 : 無
  208. ***********************************************************************/
  209. void DisplayGraphic(unsigned char code *adder)
  210. {

  211.    int i,j;
  212. //*******顯示上半屏內容設置
  213.    for(i=0;i<32;i++)              //
  214.     {
  215.       TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD
  216.       TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD
  217.       for(j=0;j<16;j++)
  218.        {
  219.          TransferData(*adder,1);
  220.          adder++;
  221.        }
  222.     }          
  223. //*******顯示下半屏內容設置
  224.    for(i=0;i<32;i++)              //
  225.     {
  226.       TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
  227.       TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD
  228.       for(j=0;j<16;j++)
  229.        {
  230.          TransferData(*adder,1);
  231.          

  232. …………余下代碼請下載附件…………
復制代碼

下載:
實驗23 12864液晶測試程序.rar (40.5 KB, 下載次數: 117)

評分

參與人數 1黑幣 +3 收起 理由
cxl1994 + 3 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:189835 發表于 2018-8-10 09:13 | 只看該作者
這個程序LCD讀寫不會出錯嗎?TransferData(char data1,bit DI) ,我看時序圖,
回復

使用道具 舉報

板凳
ID:189835 發表于 2018-8-10 09:15 | 只看該作者
void    TransferData(char data1,bit DI)  //傳送數據或者命令,當DI=0是,傳送命令,當DI=1,傳送數據.           {             WRD=0;             RS=DI;             delay(1);             P2=Convert(data1);             E=1;             delay(1);             E=0;            },,感覺應該是先 E=1;P2=Convert(data1); delay(1);             E=0;
回復

使用道具 舉報

地板
ID:135635 發表于 2018-11-28 15:02 | 只看該作者
太好了,支持!謝謝樓主!
回復

使用道具 舉報

5#
ID:451441 發表于 2018-12-26 08:23 | 只看該作者
好資料,正在學12864,太及時了,謝謝LZ
回復

使用道具 舉報

6#
ID:458251 發表于 2018-12-29 20:30 | 只看該作者
你們有花屏的情況嗎
回復

使用道具 舉報

7#
ID:385135 發表于 2019-4-7 22:36 來自觸屏版 | 只看該作者
感謝分享
回復

使用道具 舉報

8#
ID:406814 發表于 2024-6-5 00:11 | 只看該作者
這個驗證過了嗎?
回復

使用道具 舉報

9#
ID:406814 發表于 2024-6-5 00:16 | 只看該作者
void Ini_Lcd( void )
{
Port_init_12864(); /*  液晶控制端口設置為輸出 */
LCD_write_com( 0x30 ); /*  基本指令集 */
Delay_1ms();
LCD_write_com( 0x02 ); /*  地址歸位 */
Delay_1ms();
LCD_write_com( 0x0c ); /*  整體顯示打開 , 游標關閉 */
Delay_1ms();
LCD_write_com( 0x01 ); /*  清除顯示 */
Delay_1ms();
LCD_write_com( 0x06 ); /*  游標右移 */
Delay_1ms();
LCD_write_com( 0x80 ); /*  設定顯示的起始地址 */
}
你的初始化和別人的差異好大,這個有影響嗎?
回復

使用道具 舉報

10#
ID:406814 發表于 2024-6-9 01:13 | 只看該作者
感謝樓主分享。這個我試過了,可以使用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品一区二区 | 亚洲视频一区在线观看 | 国产一级视屏 | 天天干天天爽 | 欧美一级视频免费看 | 色综合一区二区 | 欧美成人二区 | 成人国产精品 | 久久黄网 | 玖操| 国产美女自拍视频 | 成人免费视频 | 免费观看黄a一级视频 | 久久久久国产一区二区三区 | 国产精品一区二区三区在线播放 | 国产亚洲一区二区三区在线 | 日本一区二区三区精品视频 | 99亚洲精品| 欧美中文字幕一区 | 亚洲国产精品99久久久久久久久 | 日本 欧美 国产 | 婷婷91| 久久精品福利视频 | 国产精品成人av | 国产一区二区影院 | 欧美日韩视频一区二区 | 亚洲综合一区二区三区 | 精品视频久久久 | 亚洲人成一区二区三区性色 | 九九精品网 | 中文字幕一区二区三区四区不卡 | 中文字幕av网 | 免费成人国产 | 中文字幕日韩专区 | 国产一区二区三区欧美 | 综合精品在线 | 国产乱码精品一区二区三区忘忧草 | 中文字幕视频在线观看 | 日本精品视频在线 | 久久不卡区 | 粉色午夜视频 |