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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5796|回復: 1
打印 上一主題 下一主題
收起左側(cè)

關于LCD1602顯示指定字符(教程+仿真+源碼+工具)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:280926 發(fā)表于 2018-1-30 15:52 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD1602顯示自定義字符
1.1  怎么顯示?
要想讓LCD顯示自定義字符,只需要把要顯示的字符寫入LCD的CGRAM寄存器中,再讀取出來就行了。
問題是,怎么將自定義字符寫入CGRAM呢?
根據(jù)數(shù)據(jù)手冊可知,CGRAM起始地址為0x40,那么第一個字符的CGRAM地址為0x40~0x47(一個字節(jié)占用一個地址,一個自定義字符為8個字節(jié)),依次第二個字符地址為0x48~0x4F第三個為0x50~0x57···
那么在我們將自定義的字符寫入到CGRAM后,LCD1602內(nèi)部的DDRAM(字符顯示地址數(shù)據(jù)存貯器)會給你自定義的字符分配一個顯示地址,第一個字符的顯示地址為0x00,第二個字符的顯示地址為0x01,第三個的顯示地址為0x02···
1.2  具體實現(xiàn)步驟
  • 打開取模軟件(附件)
  • 文件->新建->8*8
  • 在右5*8點陣中寫入想要顯示的字符
  • 設置
  • 生成字模(八個十六進制的數(shù))
1.3  簡短參考程序
  1. 1 code uchar User[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//自定義字符℃
  2. 2 LCD_write_com(0x40); //設定 CGRAM 地址
  3. 3 for(i=0;i<8;i++ )
  4. 4 {
  5. 5     LCD_write_data(User[i]); //寫入自定義圖形 ℃
  6. 6 }
  7. 7 LCD_write_com(0x8d); //設定屏幕上的顯示位置
  8. 8 LCD_write_data(0x00); //從 CGRAM 里取出自定義圖形顯示
復制代碼
2  LCD12864顯示漢字在真實的LCD12864中,是存在字符的。但是在proteus仿真中的12864是不支持顯示漢字的!
不支持顯示漢字,并不是不能顯示漢字!
在這里僅介紹LCD12864在仿真中的漢字取模問題。
  • 打開取模軟件(附件下載
  • 文件->新建->16*16(在中國漢字中,任何一個漢字都可以用16*16點陣表示!)
  • 在16*16點陣中畫出先要顯示的漢字
  • 設置
  • 生成字模(十六個十六進制的數(shù))
【注】12864顯示數(shù)字、字母等,也要設置取模字符串,但不再是16*16像素,而為16*8像素。但是相應的顯示程序中,也不能在用顯示漢字的for(16),而要改成for(8)。

仿真:


單片機源程序如下:
  1. #include "lcd12864.h"

  2. /*******數(shù)據(jù)口的最高位DB7==1,則busy*****************/
  3. /*void lcd_r_busy()
  4. {
  5.         P2=0x00;
  6.         RS=0;
  7.         RW=1;
  8.         EN=1;
  9.         while(P2&0x80);   
  10.         EN=0;
  11. }*/

  12. /****************LCD寫命令函數(shù)********************/
  13. void lcd_w_cmd(u8 value)
  14. {
  15.         //lcd_r_busy();        //每次讀寫操作前都要忙判斷
  16.         RS=0;
  17.         RW=0;
  18.         P2=value;
  19.         //lcd_databus=value;
  20.         EN=1;                //下降沿鎖存寫入的數(shù)據(jù)/命令
  21.         delay_ms(2);
  22.         EN=0;
  23. }

  24. /****************LCD寫數(shù)據(jù)************************/
  25. void lcd_w_data(u8 value)
  26. {
  27.         //lcd_r_busy();
  28.         RS=1;
  29.         RW=0;
  30.         P2=value;
  31.         //lcd_databus=value;
  32.         EN=1;                //下降沿鎖存寫入的數(shù)據(jù)/命令
  33.         delay_ms(2);
  34.         EN=0;
  35. }

  36. /***************頁設置:顯示在哪一頁******************/
  37. /*************共8頁,一頁是8行像素點*****************/
  38. void lcd_set_page(u8 page)
  39. {
  40.         page=0xb8 | page;     //頁的首地址為0xb8:page或上0xb8=選擇page頁
  41.         lcd_w_cmd(page);
  42. }

  43. /************行設置:起始在哪一行********************/
  44. /**********每頁共8行,一般從0行開始******************/
  45. void lcd_set_line(u8 sline)
  46. {
  47.         sline=0xc0 | sline;   //起始行地址為0xc0:sline或上0xc0=選擇行
  48.         lcd_w_cmd(sline);
  49. }

  50. /*************起始列設置+像素點選擇********************/
  51. /***********每半片共64列,列值不得大于63***************/
  52. void lcd_set_column(u8 column)
  53. {
  54.         column=0x3f & column;   //與上列的最大值63:0x3f  可得所選列值<63
  55.         column=0x40 | column;   //得列的首地址
  56.         lcd_w_cmd(column);
  57. }

  58. /*************設置顯示的開關********************/
  59. /**********0為關閉顯示;1為 開啟顯示************/
  60. void lcd_on_off(u8 set)
  61. {
  62.         set=0x3e | set;        //=0011 111x----0x3e為關閉顯示;0x3f為開啟顯示
  63.         lcd_w_cmd(set);
  64. }

  65. /*************選擇左右半屏顯示********************/
  66. /********0-全屏顯示;1-左;2-右********************/
  67. /************cs片選端低電平有效********************/
  68. void lcd_cs(u8 sel)
  69. {
  70.         switch(sel)
  71.         {
  72.                 case 0:CS1=0; CS2=0; break;     //全屏顯示
  73.                 case 1:CS1=0; CS2=1; break;     //左顯示
  74.                 case 2:CS1=1; CS2=0; break;     //右顯示
  75.                 default:break;
  76.         }
  77. }

  78. /*************清屏:選擇半屏********************/
  79. /********0-清全屏;1-清左;2-清右***************/
  80. void lcd_clear(u8 sel)
  81. {
  82.         u8 i,j;
  83.         lcd_cs(sel);
  84.         for(i=0;i<8;i++)
  85.         {
  86.                 lcd_set_page(i);
  87.                 lcd_set_column(0);
  88.                 for(j=0;j<64;j++)
  89.                 {
  90.                         lcd_w_data(0x00);   //每列全部寫0,列地址指針自動+1
  91.                 }
  92.         }
  93. }

  94. /****************LCD的初始化********************/
  95. void lcd_init()
  96. {
  97.         //lcd_r_busy();
  98.         lcd_cs(0);
  99.         lcd_on_off(0);  //關顯示
  100.         lcd_cs(0);
  101.         lcd_on_off(1);  //開顯示
  102.         lcd_cs(0);
  103.         lcd_clear(0);   //清全屏
  104.         lcd_set_line(0);    //起始行設為0
  105. }

  106. /****************16*16像素的漢字顯示程序********************/
  107. void display(u8 cs, u8 page, u8 column, u8 *p)
  108. {
  109.         u8 i;
  110. ……………………

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

所有資料51hei提供下載:
07.中文字庫.rar (2.16 MB, 下載次數(shù): 30)
12864顯示.rar (54.71 KB, 下載次數(shù): 15)
取模工具下載:http://www.zg4o1577.cn/bbs/dpj-54570-1.html

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

使用道具 舉報

沙發(fā)
ID:319331 發(fā)表于 2018-5-3 11:40 | 只看該作者
666666,完美的取模軟件
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品一区二区www | 伊人手机在线视频 | 亚洲国产成人精品久久久国产成人一区 | 嫩草国产 | 人人玩人人添人人澡欧美 | 久草资源在线视频 | 亚洲精品日韩在线观看 | 欧美综合一区二区三区 | 欧美一区二区三区 | 成人h视频在线观看 | 亚洲国产成人精品女人久久久 | 中文字幕第7页 | 日本a∨精品中文字幕在线 亚洲91视频 | 网站黄色av | 午夜精品久久久久久久久久久久久 | 一区二区三区四区免费在线观看 | 免费一区 | 一级黄色片日本 | 精品一区二区久久久久久久网站 | 久久噜| 国产一区不卡 | 久久一本 | 中文字幕99 | 亚洲啊v在线 | 特级毛片爽www免费版 | 成人一区二区三区在线观看 | 国产精品久久久久久吹潮 | 色毛片| 国产欧美一区二区精品久导航 | 日本aⅴ中文字幕 | 极品粉嫩国产48尤物在线播放 | 日韩福利视频 | 91成人精品视频 | 国产精品亚洲综合 | 亚洲一区视频 | 91观看| 久草在线 | 偷拍自拍第一页 | 午夜精品久久久 | 国产亚洲二区 | 亚洲国产一区二区三区 |