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

QQ登錄

只需一步,快速開始

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

LCD12864(KS0108)驅(qū)動(dòng)程序 顯示漢字-字符

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

  1. #include <reg52.h>
  2. #include<intrins.h>
  3. #include<string.h>
  4. #include "hanzi.h"  //漢字庫頭文件
  5. #include "shuzi.h"  //字符庫頭文件
  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. //   lcd12864(ks0108)
  9. #define LCD_DATA P2  //LCD8位并行數(shù)據(jù)口   
  10. sbit LCD_RS=P0^5;          //寄存器選擇
  11. sbit LCD_RW=P0^6;          //讀/寫選擇
  12. sbit LCD_EN=P0^7;          //讀寫使能
  13. sbit LCD_CS1=P0^2;          //右半屏選擇,1有效
  14. sbit LCD_CS2=P0^3;          //左半屏選擇,1有效
  15. sbit LCD_RST=P0^4;          //復(fù)位信號(hào)
  16. //*********************************************//
  17. // 函數(shù)聲明
  18. void init_lcd(void);
  19. void lcd_delay(uint time);            //延時(shí)
  20. void lcd_write_com(uchar cmdcode);    //寫命令
  21. void lcd_write_data(uchar Rsspdata);  //寫數(shù)據(jù)
  22. void lcd_Clr_Scr(void);               //清屏
  23. void lcd_werite_x_y(uchar x,uchar y); //寫地址
  24. void lcd_write_chinese(uchar x,uchar y, uchar hz,uchar *dat); //任意位置顯示任意漢字
  25. void lcd_write_english(uchar x,uchar y, uchar en,uchar *dat); //任意位置顯示任意字符
  26. //****************************************************************************//
  27. //---------------------------------------
  28. //    主函數(shù)
  29. //---------------------------------------
  30. void main(void)
  31. {
  32.           init_lcd();     //初始化
  33.           lcd_Clr_Scr();  //清屏
  34.         while(1)
  35.         {
  36.                 lcd_write_english(0,0,0,SHUZI);
  37.                 lcd_write_english(0,8,1,SHUZI);
  38.                 lcd_write_english(0,16,2,SHUZI);
  39.                 lcd_write_english(0,24,3,SHUZI);
  40.                 lcd_write_english(0,32,4,SHUZI);
  41.                 lcd_write_english(0,40,5,SHUZI);
  42.                 lcd_write_english(0,48,6,SHUZI);
  43.                 lcd_write_english(0,56,7,SHUZI);
  44.                 lcd_write_english(0,64,8,SHUZI);
  45.                 lcd_write_english(0,72,9,SHUZI);
  46.                
  47.                 lcd_write_chinese(2,0,0,HANZI);
  48.                 lcd_write_chinese(2,16,1,HANZI);
  49.                 lcd_write_chinese(4,0,2,HANZI);
  50.                 lcd_write_chinese(4,16,3,HANZI);
  51.                 lcd_write_chinese(4,32,4,HANZI);
  52.                 lcd_write_chinese(4,48,5,HANZI);
  53.                 lcd_write_chinese(4,64,6,HANZI);
  54.                 lcd_write_chinese(4,80,7,HANZI);
  55.                 lcd_write_chinese(4,96,8,HANZI);
  56.                 while(1);
  57.         }
  58. }
  59. //---------------------------------------
  60. //   延時(shí)函數(shù)
  61. //---------------------------------------
  62. void lcd_delay(uint time)
  63. {
  64.           uint i;
  65.           for(i=0;i<time;i++);
  66. }
  67. //---------------------------------------
  68. //   12864初始化函數(shù)
  69. //---------------------------------------
  70. void init_lcd(void)
  71. {           
  72.           LCD_RST=0;              //液晶復(fù)位
  73.           lcd_delay(250);         //適當(dāng)延時(shí)
  74.           LCD_RST=1;              //復(fù)位結(jié)束
  75.           LCD_CS1=1;                         //左半屏選通
  76.           LCD_CS2=1;                             //右半屏選通        
  77.           lcd_delay(250);         //適當(dāng)延時(shí)
  78.           lcd_write_com(0x3f);    //顯示開
  79. }
  80. //---------------------------------------
  81. //   寫命令函數(shù)
  82. //---------------------------------------
  83. void lcd_write_com(uchar cmdcode)
  84. {                                          
  85.           LCD_RS=0;                        //選擇命令寄存器
  86.           LCD_RW=0;                         //寫選通
  87.           LCD_DATA=cmdcode;   //將命令寫入總線
  88.           _nop_();            //空操作,做短暫的延時(shí)
  89.           LCD_EN=1;           //E的下降沿,數(shù)據(jù)寫入
  90.           _nop_();            //空操作,做短暫的延時(shí)
  91.           LCD_EN=0;           //E的下降沿,數(shù)據(jù)寫入
  92. }
  93. //---------------------------------------
  94. //   寫數(shù)據(jù)函數(shù)
  95. //---------------------------------------
  96. void lcd_write_data(uchar Rsspdata)
  97. {

  98.           LCD_RS=1;                        //選擇數(shù)據(jù)寄存器
  99.           LCD_RW=0;                         //寫選通
  100.           LCD_DATA=Rsspdata;  //將數(shù)據(jù)寫入總線
  101.           _nop_();            //空操作,做短暫的延時(shí)
  102.           LCD_EN=1;           //E的下降沿,數(shù)據(jù)寫入
  103.           _nop_();            //空操作,做短暫的延時(shí)
  104.           LCD_EN=0;           //E的下降沿,數(shù)據(jù)寫入
  105. }
  106. //---------------------------------------
  107. //   清屏函數(shù)
  108. //---------------------------------------
  109. void lcd_Clr_Scr(void)
  110. {
  111.           uchar j,k;
  112.           LCD_CS1=1;                                           //左半屏選通
  113.           LCD_CS2=1;                                           //右半屏選通
  114.           lcd_write_com(0x40+0);        //將列地址寫入  
  115.           for(k=0;k<8;k++)
  116.           {
  117.                     lcd_write_com(0xb8+k);    //將行地址寫入        
  118.                     for(j=0;j<64;j++)               //每行的64列都寫0,因?yàn)檫x了左右兩屏,
  119.                     {
  120.                               lcd_write_data(0x00); //64列同時(shí)寫0
  121.                     }
  122.           }
  123. }
  124. //---------------------------------------
  125. //    地址寫入函數(shù)
  126. //---------------------------------------
  127. void lcd_werite_x_y(uchar x,uchar y)
  128. {
  129.           y=y&0x7f;                                 //限定范圍,列不能超過128
  130.           x=x&0x07;                             //限定范圍,行不能超過8
  131.           if(y<64)                    //如果列小于64
  132.           {
  133.                     LCD_CS1=1;                  //選通左半屏
  134.                     LCD_CS2=0;                  //關(guān)閉右半屏
  135.                     lcd_write_com(0x40+y);  //將列地址寫入  
  136.           }
  137.           else
  138.           {
  139.                     LCD_CS1=0;                  //關(guān)閉左半屏
  140.                     LCD_CS2=1;                  //選通右半屏
  141.                     y&=0x3f;
  142.                     lcd_write_com(0x40+y);  //將列地址寫入         
  143.           }
  144.           lcd_write_com(0xb8+x);      //將行地址寫入        
  145. }
  146. //---------------------------------------
  147. //     指定位置寫16*16漢字函數(shù)
  148. //---------------------------------------
  149. void lcd_write_chinese(uchar x,uchar y, uchar hz,uchar *dat)
  150. {
  151.           uchar i=0;        
  152.           lcd_werite_x_y(x,y);             //設(shè)定起始地址
  153.           for(i=0;i<16;i++)
  154.           lcd_write_data(dat[hz*32+i]);    //先寫上半個(gè)字,共16個(gè)字節(jié)
  155.           lcd_werite_x_y(x+1,y);           //設(shè)定起始地址,此次將行地址加1,以便寫下行
  156.           for(i=0;i<16;i++)
  157.           lcd_write_data(dat[hz*32+16+i]); //再寫下半個(gè)字,共16個(gè)字節(jié)
  158. }        
  159. //---------------------------------------
  160. //     指定位置寫8*16字符函數(shù)
  161. //---------------------------------------
  162. void lcd_write_english(uchar x,uchar y, uchar en,uchar *dat)
  163. {
  164.     uchar i=0;        
  165.           lcd_werite_x_y(x,y);            //設(shè)定起始地址
  166.           for(i=0;i<8;i++)
  167.           lcd_write_data(dat[en*16+i]);   //先寫上半個(gè)字,共8個(gè)字節(jié)
  168.           lcd_werite_x_y(x+1,y);          //設(shè)定起始地址,此次將行地址加1,以便寫下行
  169.           for(i=0;i<8;i++)
  170.           lcd_write_data(dat[en*16+8+i]); //再寫下半個(gè)字,共8個(gè)字節(jié)
  171. }
復(fù)制代碼

全部資料51hei下載地址:
LCD12864顯示漢字-字符程序.zip (114.98 KB, 下載次數(shù): 558)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:228939 發(fā)表于 2018-1-23 12:38 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

板凳
ID:62743 發(fā)表于 2018-4-26 17:10 | 只看該作者
牛人,好好拜讀了
回復(fù)

使用道具 舉報(bào)

地板
ID:326163 發(fā)表于 2018-5-9 22:10 來自手機(jī) | 只看該作者
我的怎么不能用?
回復(fù)

使用道具 舉報(bào)

5#
ID:53978 發(fā)表于 2018-5-10 09:54 | 只看該作者
慢慢學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

6#
ID:27031 發(fā)表于 2018-6-1 19:00 | 只看該作者
謝謝分享好的資源~
回復(fù)

使用道具 舉報(bào)

7#
ID:75806 發(fā)表于 2018-6-21 22:46 | 只看該作者
正需要這個(gè)程序,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

8#
ID:142383 發(fā)表于 2018-8-1 08:26 | 只看該作者
正在弄這個(gè)不帶字庫的屏,先學(xué)習(xí)學(xué)習(xí)樓主的程序。
回復(fù)

使用道具 舉報(bào)

9#
ID:387860 發(fā)表于 2018-8-25 14:39 | 只看該作者
下了,顯示不了啊
回復(fù)

使用道具 舉報(bào)

10#
ID:243394 發(fā)表于 2018-8-26 11:51 | 只看該作者
謝謝分享好的資源~
回復(fù)

使用道具 舉報(bào)

11#
ID:399899 發(fā)表于 2018-10-13 21:08 | 只看該作者
這個(gè)的確不多,中文字庫,很方便
回復(fù)

使用道具 舉報(bào)

12#
ID:414506 發(fā)表于 2018-10-24 10:57 | 只看該作者
本人是新手,剛在學(xué)習(xí)此部分;太感謝了
這個(gè)的確不多,中文字庫,很方便;
回復(fù)

使用道具 舉報(bào)

13#
ID:414506 發(fā)表于 2018-10-24 11:49 | 只看該作者
學(xué)習(xí)學(xué)習(xí)啊~~~謝謝
回復(fù)

使用道具 舉報(bào)

14#
ID:58583 發(fā)表于 2018-12-6 07:44 | 只看該作者
感謝樓主 收藏啦
回復(fù)

使用道具 舉報(bào)

15#
ID:440725 發(fā)表于 2018-12-6 10:44 | 只看該作者
bucuo.
回復(fù)

使用道具 舉報(bào)

16#
ID:21069 發(fā)表于 2018-12-6 11:21 | 只看該作者
yekai_yh 發(fā)表于 2018-8-25 14:39
下了,顯示不了啊

從代碼上看,應(yīng)該字庫的代碼與數(shù)字的數(shù)組沒放進(jìn)去,版主將放入的位置與顯示函數(shù)都做好了,你只要用字模軟件取好字碼放到一個(gè)數(shù)組里面,運(yùn)行時(shí)將你定義好的數(shù)組放入顯示函數(shù)中就OK了
回復(fù)

使用道具 舉報(bào)

17#
ID:130157 發(fā)表于 2019-2-23 11:04 | 只看該作者
丑啊 發(fā)表于 2018-5-9 22:10
我的怎么不能用?

我也用不了
回復(fù)

使用道具 舉報(bào)

18#
ID:130157 發(fā)表于 2019-2-23 11:07 | 只看該作者
jinsheng7533967 發(fā)表于 2018-12-6 11:21
從代碼上看,應(yīng)該字庫的代碼與數(shù)字的數(shù)組沒放進(jìn)去,版主將放入的位置與顯示函數(shù)都做好了,你只要用字模軟 ...

已經(jīng)都有了
回復(fù)

使用道具 舉報(bào)

19#
ID:437013 發(fā)表于 2019-5-27 22:19 | 只看該作者
正好需要   學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

20#
ID:236699 發(fā)表于 2019-5-28 08:57 | 只看該作者
謝謝,找時(shí)間好好學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

21#
ID:521117 發(fā)表于 2019-10-5 21:34 | 只看該作者
最近在網(wǎng)上淘了塊3.8寸的屏,查了下是ks0108。抄襲下,感謝。
回復(fù)

使用道具 舉報(bào)

22#
ID:584814 發(fā)表于 2019-10-11 15:32 | 只看該作者
mobicity 發(fā)表于 2019-10-5 21:34
最近在網(wǎng)上淘了塊3.8寸的屏,查了下是ks0108。抄襲下,感謝。

請(qǐng)問是否抄襲成功 ?
回復(fù)

使用道具 舉報(bào)

23#
ID:519089 發(fā)表于 2019-10-19 10:23 | 只看該作者
仿真在哪里?
回復(fù)

使用道具 舉報(bào)

24#
ID:198286 發(fā)表于 2019-10-19 17:14 | 只看該作者
新手先看代碼學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

25#
ID:47191 發(fā)表于 2019-12-14 21:40 | 只看該作者
新手過來學(xué)習(xí)下。謝謝分享!
回復(fù)

使用道具 舉報(bào)

26#
ID:693135 發(fā)表于 2020-2-26 09:13 | 只看該作者
用不了
回復(fù)

使用道具 舉報(bào)

27#
ID:108573 發(fā)表于 2020-2-26 10:12 | 只看該作者
工業(yè)上這種屏用的還挺多,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

28#
ID:299519 發(fā)表于 2020-2-26 11:20 | 只看該作者

下下來,自己畫。
回復(fù)

使用道具 舉報(bào)

29#
ID:709111 發(fā)表于 2020-3-22 14:49 | 只看該作者
dalao
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

30#
ID:687830 發(fā)表于 2020-4-28 12:38 | 只看該作者
請(qǐng)問排阻接在db0-db7還是接在RSRWECS1CS2,,,,
回復(fù)

使用道具 舉報(bào)

31#
ID:600695 發(fā)表于 2021-5-16 20:15 | 只看該作者
可以點(diǎn)亮顯示,但是移動(dòng)字的位置的時(shí)候,比如一個(gè)字剛好在左右屏中間的時(shí)候字會(huì)斷開半個(gè)顯示到行首,不知道怎么解決
回復(fù)

使用道具 舉報(bào)

32#
ID:599561 發(fā)表于 2022-9-5 21:23 | 只看該作者
不錯(cuò),謝謝分享,萬分感謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表