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

標題: LCD12864(KS0108)驅動程序 顯示漢字-字符 [打印本頁]

作者: 51llf    時間: 2017-11-2 08:25
標題: LCD12864(KS0108)驅動程序 顯示漢字-字符
仿真原理圖如下(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位并行數據口   
  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;          //復位信號
  16. //*********************************************//
  17. // 函數聲明
  18. void init_lcd(void);
  19. void lcd_delay(uint time);            //延時
  20. void lcd_write_com(uchar cmdcode);    //寫命令
  21. void lcd_write_data(uchar Rsspdata);  //寫數據
  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. //    主函數
  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. //   延時函數
  61. //---------------------------------------
  62. void lcd_delay(uint time)
  63. {
  64.           uint i;
  65.           for(i=0;i<time;i++);
  66. }
  67. //---------------------------------------
  68. //   12864初始化函數
  69. //---------------------------------------
  70. void init_lcd(void)
  71. {           
  72.           LCD_RST=0;              //液晶復位
  73.           lcd_delay(250);         //適當延時
  74.           LCD_RST=1;              //復位結束
  75.           LCD_CS1=1;                         //左半屏選通
  76.           LCD_CS2=1;                             //右半屏選通        
  77.           lcd_delay(250);         //適當延時
  78.           lcd_write_com(0x3f);    //顯示開
  79. }
  80. //---------------------------------------
  81. //   寫命令函數
  82. //---------------------------------------
  83. void lcd_write_com(uchar cmdcode)
  84. {                                          
  85.           LCD_RS=0;                        //選擇命令寄存器
  86.           LCD_RW=0;                         //寫選通
  87.           LCD_DATA=cmdcode;   //將命令寫入總線
  88.           _nop_();            //空操作,做短暫的延時
  89.           LCD_EN=1;           //E的下降沿,數據寫入
  90.           _nop_();            //空操作,做短暫的延時
  91.           LCD_EN=0;           //E的下降沿,數據寫入
  92. }
  93. //---------------------------------------
  94. //   寫數據函數
  95. //---------------------------------------
  96. void lcd_write_data(uchar Rsspdata)
  97. {

  98.           LCD_RS=1;                        //選擇數據寄存器
  99.           LCD_RW=0;                         //寫選通
  100.           LCD_DATA=Rsspdata;  //將數據寫入總線
  101.           _nop_();            //空操作,做短暫的延時
  102.           LCD_EN=1;           //E的下降沿,數據寫入
  103.           _nop_();            //空操作,做短暫的延時
  104.           LCD_EN=0;           //E的下降沿,數據寫入
  105. }
  106. //---------------------------------------
  107. //   清屏函數
  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,因為選了左右兩屏,
  119.                     {
  120.                               lcd_write_data(0x00); //64列同時寫0
  121.                     }
  122.           }
  123. }
  124. //---------------------------------------
  125. //    地址寫入函數
  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;                  //關閉右半屏
  135.                     lcd_write_com(0x40+y);  //將列地址寫入  
  136.           }
  137.           else
  138.           {
  139.                     LCD_CS1=0;                  //關閉左半屏
  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漢字函數
  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);             //設定起始地址
  153.           for(i=0;i<16;i++)
  154.           lcd_write_data(dat[hz*32+i]);    //先寫上半個字,共16個字節
  155.           lcd_werite_x_y(x+1,y);           //設定起始地址,此次將行地址加1,以便寫下行
  156.           for(i=0;i<16;i++)
  157.           lcd_write_data(dat[hz*32+16+i]); //再寫下半個字,共16個字節
  158. }        
  159. //---------------------------------------
  160. //     指定位置寫8*16字符函數
  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);            //設定起始地址
  166.           for(i=0;i<8;i++)
  167.           lcd_write_data(dat[en*16+i]);   //先寫上半個字,共8個字節
  168.           lcd_werite_x_y(x+1,y);          //設定起始地址,此次將行地址加1,以便寫下行
  169.           for(i=0;i<8;i++)
  170.           lcd_write_data(dat[en*16+8+i]); //再寫下半個字,共8個字節
  171. }
復制代碼

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




作者: 孤獨求敗    時間: 2018-1-23 12:38
學習學習
作者: 372645389    時間: 2018-4-26 17:10
牛人,好好拜讀了
作者: 丑啊    時間: 2018-5-9 22:10
我的怎么不能用?
作者: smartphone    時間: 2018-5-10 09:54
慢慢學習
作者: yangxf0120    時間: 2018-6-1 19:00
謝謝分享好的資源~
作者: shinegentleman    時間: 2018-6-21 22:46
正需要這個程序,學習一下

作者: htzsz    時間: 2018-8-1 08:26
正在弄這個不帶字庫的屏,先學習學習樓主的程序。
作者: yekai_yh    時間: 2018-8-25 14:39
下了,顯示不了啊
作者: szzxl10    時間: 2018-8-26 11:51
謝謝分享好的資源~
作者: youxianke    時間: 2018-10-13 21:08
這個的確不多,中文字庫,很方便
作者: ruan3082002    時間: 2018-10-24 10:57
本人是新手,剛在學習此部分;太感謝了
這個的確不多,中文字庫,很方便;
作者: ruan3082002    時間: 2018-10-24 11:49
學習學習啊~~~謝謝
作者: zhangzhong215    時間: 2018-12-6 07:44
感謝樓主 收藏啦
作者: gsjzyc    時間: 2018-12-6 10:44
bucuo.
作者: jinsheng7533967    時間: 2018-12-6 11:21
yekai_yh 發表于 2018-8-25 14:39
下了,顯示不了啊

從代碼上看,應該字庫的代碼與數字的數組沒放進去,版主將放入的位置與顯示函數都做好了,你只要用字模軟件取好字碼放到一個數組里面,運行時將你定義好的數組放入顯示函數中就OK了
作者: LFSLY    時間: 2019-2-23 11:04
丑啊 發表于 2018-5-9 22:10
我的怎么不能用?

我也用不了
作者: LFSLY    時間: 2019-2-23 11:07
jinsheng7533967 發表于 2018-12-6 11:21
從代碼上看,應該字庫的代碼與數字的數組沒放進去,版主將放入的位置與顯示函數都做好了,你只要用字模軟 ...

已經都有了
作者: hellohaitong    時間: 2019-5-27 22:19
正好需要   學習學習
作者: ztb096001    時間: 2019-5-28 08:57
謝謝,找時間好好學習一下。
作者: mobicity    時間: 2019-10-5 21:34
最近在網上淘了塊3.8寸的屏,查了下是ks0108。抄襲下,感謝。
作者: man1234567    時間: 2019-10-11 15:32
mobicity 發表于 2019-10-5 21:34
最近在網上淘了塊3.8寸的屏,查了下是ks0108。抄襲下,感謝。

請問是否抄襲成功 ?
作者: 單片機愛好者223    時間: 2019-10-19 10:23
仿真在哪里?
作者: zxy2266    時間: 2019-10-19 17:14
新手先看代碼學習
作者: wellf    時間: 2019-12-14 21:40
新手過來學習下。謝謝分享!
作者: fkeguh    時間: 2020-2-26 09:13
用不了
作者: 神出沒    時間: 2020-2-26 10:12
工業上這種屏用的還挺多,學習一下
作者: myemcu    時間: 2020-2-26 11:20
單片機愛好者223 發表于 2019-10-19 10:23
仿真在哪里?

下下來,自己畫。
作者: laodan    時間: 2020-3-22 14:49
dalao
學習了

作者: 吾演讀上琴漏    時間: 2020-4-28 12:38
請問排阻接在db0-db7還是接在RSRWECS1CS2,,,,
作者: 米花卷    時間: 2021-5-16 20:15
可以點亮顯示,但是移動字的位置的時候,比如一個字剛好在左右屏中間的時候字會斷開半個顯示到行首,不知道怎么解決

作者: dd2dd    時間: 2022-9-5 21:23
不錯,謝謝分享,萬分感謝





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