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

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

QQ登錄

只需一步,快速開始

搜索
查看: 2993|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)LCD12864顯示屏圖片中文英文顯示仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
出于愛(ài)好,喜歡單片機(jī)而進(jìn)行的學(xué)習(xí),將學(xué)習(xí)過(guò)程發(fā)出來(lái)進(jìn)行交流。如有不妥的地方,也希望大家可以指正,多謝。軟件版本:proteus8.9,keil uvision5
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)




顯示結(jié)果:






圖片及字體取模





附件中含詳細(xì)的代碼及C源文件,及顯示的控制芯片的手冊(cè)及個(gè)人記錄的相應(yīng)芯片操作指令。

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. //定義端口
  7. sbit A0=P2^0;  //定義端口是傳輸命令還是數(shù)據(jù),
  8. sbit RW=P2^1;//定義端口是讀取還是寫入,
  9. sbit LCDEN=P2^2;//芯片使能啟動(dòng)
  10. sbit RST=P2^3;//復(fù)位鍵

  11. uchar code dis1[]={/*--  文字:  我  --*/
  12. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  13. 0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
  14. 0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00};



  15. uchar code dis2[]={
  16. /*--  文字:  愛(ài)  --*/
  17. /*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
  18. 0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
  19. 0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00};
  20.         中間省略 見附件
  21. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
  22. };



  23. /*******************************************************************************
  24. * 函 數(shù) 名         : delay_ms,
  25. * 函數(shù)功能         : 毫秒延時(shí)程序
  26. * 輸    入         : 輸入延時(shí)時(shí)間長(zhǎng)度,單位為毫秒
  27. * 輸    出         : 無(wú)
  28. *******************************************************************************/


  29. void delay_ms(uint x)
  30. {
  31.         uint i,j;
  32.         for (j=0;j<x;j++)
  33.                 for(i=0;i<110;i++);
  34. }


  35. /*******************************************************************************
  36. * 函 數(shù) 名         : write_com
  37. * 函數(shù)功能         : LCD寫指令程序
  38. * 輸    入         : 輸入LCD對(duì)應(yīng)的設(shè)置指令代碼
  39. * 輸    出         : 對(duì)LCD進(jìn)行相應(yīng)的設(shè)置
  40. *******************************************************************************/
  41. void write_com(uchar cmd)
  42. {
  43.         A0=0;
  44.         RW=0;
  45.         LCDEN=1;
  46.         P0=cmd;
  47.         _nop_();
  48.         LCDEN=0;
  49.         RW=1;

  50. }
  51. /*******************************************************************************
  52. * 函 數(shù) 名         : write_dat
  53. * 函數(shù)功能         : LCD寫數(shù)據(jù)程序
  54. * 輸    入         : 向LCD寫入對(duì)應(yīng)的數(shù)據(jù)或代碼
  55. * 輸    出         : 對(duì)LCD數(shù)據(jù)輸入顯示
  56. *******************************************************************************/
  57. void write_dat(uchar dat)
  58. {
  59.         A0=1;
  60.         RW=0;
  61.         LCDEN=1;
  62.         P0=dat;
  63.         _nop_();
  64.         LCDEN=0;
  65.         RW=1;
  66. }

  67. /*******************************************************************************
  68. * 函 數(shù) 名         : LCD_Initial
  69. * 函數(shù)功能         : 對(duì)LCD進(jìn)行初始化
  70. * 輸    入         : 對(duì)LCD的初始狀態(tài)進(jìn)行配置
  71. * 輸    出         : 無(wú)
  72. *******************************************************************************/


  73. /*LCD初始化*/
  74. void LCD_Initial()
  75. {
  76.         RST=0;
  77.         delay_ms(10);
  78.         RST=1;
  79.         delay_ms(10);
  80.          write_com(0xa2); //1/9 bias set
  81.         write_com(0xa1);    //adc=0,正常從左到右顯示
  82. write_com(0xc8);    //COM顛倒輸出,,Startline0在上側(cè),Com0 在上側(cè)
  83.                 write_com(0xae);    //Display_Hanzi 0ff
  84.                     write_com(0xaf);    //Display_Hanzi on
  85.       
  86.         }
  87. /*******************************************************************************
  88. * 函 數(shù) 名         : Display_Hanzi
  89. * 函數(shù)功能         : 在指定的行與列寫入對(duì)應(yīng)的漢字
  90. * 輸    入         : a對(duì)應(yīng)的是寫入位置的頁(yè),b對(duì)應(yīng)寫入字符的列,c為寫入的漢字代碼數(shù)組,漢字的寬度為16,
  91.                                                                                 則在對(duì)高四位來(lái)進(jìn)行設(shè)定的時(shí)候,直接用0x10與其列數(shù)進(jìn)行與操作,高四位的變化范圍只能
  92.                                                                                 為0-7,滿足128列的范圍。
  93. * 輸    出         : 在屏幕上顯示要輸出的內(nèi)容
  94. *******************************************************************************/
  95.         void Display_Hanzi(int a,int b,uchar *c)
  96. {
  97.         int n;
  98.         for(n=0;n<=15;n++)
  99.         {
  100.          write_com(a);                                //選擇a頁(yè)
  101.          _nop_();       
  102.          write_com(0x10|b);   //由于字符特征,直接選取對(duì)應(yīng)的高位進(jìn)行設(shè)置。
  103.          _nop_();       
  104.          write_com(0x00|n);
  105.          _nop_();       
  106.          write_dat(c[n]);
  107.          _nop_();       
  108.                
  109.          write_com(1+a);                                //選擇a+1頁(yè)
  110.          _nop_();       
  111.          write_com(0x10|b);//列的高四位
  112.          _nop_();       
  113.          write_com(0x00|n);//列的低四位
  114.          _nop_();       
  115.          write_dat(c[n+16]);
  116.          _nop_();
  117.                 }
  118.        
  119.         }

  120.        
  121.         /*******************************************************************************
  122. * 函 數(shù) 名         : Display_SC
  123. * 函數(shù)功能         : 在指定的行與列寫入對(duì)應(yīng)的單字節(jié)字符
  124. * 輸    入         : a對(duì)應(yīng)的是寫入位置的頁(yè),b對(duì)應(yīng)寫入字符的列,c為寫入的漢字代碼數(shù)組
  125. * 輸    出         : 在屏幕上顯示要輸出的內(nèi)容
  126. *******************************************************************************/
  127.         void Display_SC(int a,int b,uchar *c)
  128. {
  129.         int n;
  130.         int C_high,C_low;
  131.         C_high = (b&0xF0)>>4;//選擇列的高四位
  132.         C_low = (b&0x0F);  //列的低四位
  133.         for(n=0;n<=7;n++)
  134.         {
  135.          write_com(a);                                //選擇a頁(yè)
  136.        
  137.          write_com(0x10|C_high);//列的高四位
  138.          write_com((0x00|C_low)+n);//列的低四位
  139.          write_dat(c[n]);
  140.                
  141.          write_com(1+a);                                //選擇a+1頁(yè)
  142.          write_com(0x10|C_high);//列的高四位
  143.          write_com((0x00|C_low)+n);//列的低四位
  144.          write_dat(c[n+8]);
  145.                 }
  146.        
  147.         }

  148.         /*******************************************************************************
  149. * 函 數(shù) 名         : Display_BMP
  150. * 函數(shù)功能         : 顯示圖片的內(nèi)容,圖片大小為128*64
  151. * 輸    入         : 輸入對(duì)應(yīng)的代碼數(shù)組
  152. * 輸    出         : 在屏幕上顯示要輸出的圖片內(nèi)容
  153. *******************************************************************************/
  154.         void Display_BMP(uchar *bmp)
  155.         {
  156.                 int i=0;        //頁(yè)碼,0-7頁(yè)
  157.                 int j=0;        //列數(shù),0-127列,對(duì)應(yīng)一行的像素?cái)?shù)
  158.                         int C_high,C_low,C_COLUMN;

  159.                 {
  160.                 for(i=0;i<8;i++)
  161.                         {
  162.                         write_com(0xb0+i);//寫入頁(yè)數(shù)
  163.                        
  164.                                 C_COLUMN=0x00;
  165.                                
  166.                         for (j=0;j<128;j++)
  167.                                 {
  168.                                         if(j<128)
  169.                                         {
  170.                                
  171.                                         C_high = ((C_COLUMN+j)&0xF0)>>4;//選擇列的高四位
  172.                                         C_low = ((C_COLUMN+j)&0x0F);  //列的低四位
  173.                                         write_com(0x10|C_high);//列的高四位
  174.                                         write_com(0x00|C_low);//列的低四位
  175.                                        
  176.                                         write_dat(bmp[i*128+j]);}
  177.                                 else
  178.                                         {
  179.                                                 C_COLUMN=0X00;
  180.                                                
  181.                                         }
  182.                                        
  183.                                  }
  184.                         }
  185.                
  186.         }
  187. }
  188.        
  189.        
  190. main()
  191. {
  192.                 LCD_Initial();
  193.        
  194.        
  195. while(1)
  196.                
  197.         {
  198.        
  199.                 Display_Hanzi(0xb0,0x00,dis1);
  200.                 Display_Hanzi(0xb0,0x01,dis2);
  201.                 Display_Hanzi(0xb0,0x02,dis3);
  202.           Display_Hanzi(0xb0,0x03,dis4);
  203.                 Display_Hanzi(0xb0,0x04,dis5);
  204.                 Display_Hanzi(0xb0,0x05,dis6);
  205.                 Display_Hanzi(0xb0,0x06,dis7);
  206.                                
  207.                 Display_Hanzi(0xb2,0x00,dis21);
  208.                 Display_Hanzi(0xb2,0x01,dis22);
  209.                 Display_Hanzi(0xb2,0x02,dis23);
  210.                
  211.                 Display_SC(0xb4,0x00,dis30);
  212.                 Display_SC(0xb4,0x08,dis31);
  213.           Display_SC(0xb4,16,dis32);
  214.                 Display_SC(0xb4,24,dis33);
  215.                 Display_SC(0xb6,0,dis40);
  216.                 Display_SC(0xb6,8,dis41);
  217.                 Display_SC(0xb6,16,dis42);
  218.                 Display_SC(0xb6,24,dis43);
  219.                
  220.                 delay_ms(2000);
  221.        
  222.                 Display_BMP(img);
  223.                
  224.                
  225.                 delay_ms(2000);
  226.                 Display_BMP(C_Clear);
  227.                

  228.         }
  229.        
  230.        
  231. }
復(fù)制代碼

所有資料51hei提供下載:
12864 Display.zip (1.82 MB, 下載次數(shù): 66)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色橹橹欧美在线观看视频高清 | 久久33| 久久r免费视频 | 国产乱码精品一区二区三区av | 国产欧美视频一区二区 | 成人影院一区二区三区 | 亚洲国产成人精品女人 | 久久久久国产一区二区 | 中文字幕伊人 | 国产亚洲精品久久久久久豆腐 | 欧美色欧美亚洲另类七区 | 国产精品久久久久久久午夜片 | 精品视频一区二区三区在线观看 | 羞羞网站在线免费观看 | 成人性生交大免费 | 人人叉| 日韩精品一区二区三区高清免费 | 一级片网址 | 国产大片一区 | 欧美日韩久久精品 | 欧美日韩一区二区三区在线观看 | 日韩av在线一区二区 | 国产精品久久久久久久久久不蜜臀 | 亚洲精品短视频 | 狠狠干天天干 | 8x国产精品视频一区二区 | www.99re| 亚洲精品欧美一区二区三区 | 蜜桃免费av | 亚洲欧美中文日韩在线v日本 | a级大毛片| 国产98色在线 | 日韩 | 99热在这里只有精品 | 在线看国产 | 在线视频国产一区 | 国产美女久久 | 亚洲三区在线观看 | 久久夜视频 | 欧美激情久久久 | 免费看黄色国产 | 亚洲综合中文字幕在线观看 |