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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

st7565芯片1.32英寸SO12864帶字庫芯片W25X16單片機驅動程序

  [復制鏈接]
跳轉到指定樓層
樓主
感謝別人的分享,提供給需要的人方便。


引腳圖:


還提供這些資料:
W25X16中文手冊.pdf
W25X40BL—字庫芯片資料.pdf
st7565中文參考資料.pdf

51單片機st7565源程序如下:
  1. /*STC89C52 3.3v小屏12864 串口 測試STC12C5A60S2能用,延時時間有差別
  2.   字符0-9=203-212,A-Z=220-245,a-z=252-277
  3.   GB漢字編碼和字符地址公式:芯片地址*32=GB高8位*256+GB低8位-43807-((GB高8位-0xb0)*162)
  4.   全格數字字母地址公式:芯片地址*32=GB高8位*256+GB低8位-41701
  5.   半格數字字母地址公式:芯片地址*32=ISCII碼+155
  6.   注:字符芯片參考的是W25X16中文手冊,芯片用的是3.3v電壓,與5v電壓的C52連接的I/O口都串接了1.3K的電阻*/
  7. #include<reg52.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10.                                                                                
  11. sbit Z_DO=P3^1;                                        //字符芯片串行數據輸出端 (MOSI)       
  12. sbit Z_CS=P3^2;                                        //字符芯片串行片選端
  13. sbit L_CS=P3^3;                                        //LCD片選端
  14. sbit L_RST=P3^4;                                //LCD復位端
  15. sbit L_A0=P3^5;                                        //LCD數據/命令(H/L)選擇端
  16. sbit CLK=P3^6;                                        //LCD和字符芯片串行時鐘端                         (共用)
  17. sbit SI=P3^7;                                        //LCD和字符芯片共用串行數據端 (MISO) (共用)

  18. code uchar t123[]="0123456789ABCDEF";

  19. void delay(uint XMS)                        //延時
  20. {
  21.         uint i;
  22.         for(;XMS>0;XMS--)
  23.                 for(i=123;i>0;i--);
  24. }
  25. void write_byte(uchar dat)                //LCD和字符芯片串口寫入1個字節(8位)
  26. {
  27.         uchar i;
  28.         for(i=0;i<8;i++)
  29.         {
  30.                 if(dat&0x80) SI=1;
  31.                 else SI=0;
  32.                 dat<<=1;
  33.                 CLK=0;
  34.                 CLK=1;
  35.         }
  36. }
  37. void lcd_write_cmd(uchar cmd)        //LCD寫入命令
  38. {
  39.         L_A0=0;                                                        //命令                                                  
  40.         L_CS=0;                                                        //片選
  41.         write_byte(cmd);
  42.         L_CS=1;
  43. }
  44. void lcd_write_dat(uchar dat)        //LCD寫入數據
  45. {
  46.         L_A0=1;                                                        //數據                                                  
  47.         L_CS=0;                                                        //片選
  48.         write_byte(dat);
  49.         L_CS=1;
  50. }
  51. void clr_lcd()                                        //LCD清屏
  52. {
  53.         uchar i,j;
  54.         for(i=0;i<8;i++)
  55.         {
  56.                 lcd_write_cmd(0xb0+i);
  57.                 lcd_write_cmd(0x10+0);
  58.                 lcd_write_cmd(0x00+0);
  59.                 for(j=132;j>0;j--)
  60.                         lcd_write_dat(0x00);
  61.         }
  62. }
  63. void lcd_init()                                        //LCD初始化
  64. {
  65.         L_RST=0;
  66.         L_RST=1;
  67.         lcd_write_cmd(0xaf);                                //0xaf開顯示;0xae關顯示

  68.         lcd_write_cmd(0x40);                                //起始行顯示地址(0-63)(設置哪一行顯示為首行)

  69.         lcd_write_cmd(0xa1);                                //開ADC=0xa1,顯示從下往上0-127;關ADC=0xa0,顯示由上往下3-131  

  70.         lcd_write_cmd(0xa6);                                //0xa6關反白,0xa7開反白

  71.     lcd_write_cmd(0xa4);                                //0xa4正常顯示,0xa5顯示所有點
  72.   
  73.         lcd_write_cmd(0xa2);                                //LCD的偏壓比 1/9BIAS

  74.         lcd_write_cmd(0xc8);                                //0xc8正常輸出方向(上為首行);0x80反向輸出(下為首行)

  75.         lcd_write_cmd(0x2f);                                //內部電源選擇(0x28-0x2f,應設0x2f)

  76.         lcd_write_cmd(0x24);                                //LCD驅動電壓的電阻比(0x20-0x27,5v可設0x24)

  77.         lcd_write_cmd(0x81);                                //進入設置對比度輸出電壓V0

  78.         lcd_write_cmd(0x24);                                //為對比度的第二條指令,對比度電壓的等級(0x00-0x3f)

  79.         clr_lcd();
  80. }
  81. /*void z_write_byte(uchar dat)        //字符芯片寫入1個字節
  82. {
  83.         Z_CS=0;                                                //片選
  84.         write_byte(dat);
  85.         Z_CS=1;
  86. }*/
  87. uchar z_read_byte()                                //字符芯片讀出1個字節
  88. {
  89.         uchar val=0,i;
  90.         Z_DO=1;
  91.         for(i=8;i>0;i--)
  92.         {                       
  93.                 val<<=1;          
  94.                 CLK=0;
  95.                 CLK=1;
  96.                 if(Z_DO) val++;
  97.         }
  98.         return val;
  99. }
  100. /*uchar z_read_add(uchar h,uchar z,uchar l)                                //讀字符芯片相應地址的單個數據
  101. {
  102.         uchar val;
  103.         Z_CS=0;                                                //片選
  104.         write_byte(0x03);
  105.         write_byte(h);
  106.         write_byte(z);
  107.         write_byte(l);
  108.         val=z_read_byte();
  109.         Z_CS=1;
  110.         return val;
  111. }*/
  112. void z_init()                                        //字符芯片初始化
  113. {
  114.         Z_CS=1;
  115. }
  116. void init()                                                //程序初始化
  117. {
  118.         delay(100);
  119.         lcd_init();
  120.         z_init();
  121.         delay(100);
  122. }
  123. void lcd_out_spot(uchar y,uchar x,uchar dat)        //X軸(左0-127右),Y軸(上0-7下),8位數(8個點,左低-右高)
  124. {
  125.         y&=0x07; x&=127;                                                //數值限制
  126.         lcd_write_cmd(0xb0+y);                                        //頁地址(0-7)
  127.         lcd_write_cmd(0x10|(x>>4));                                //列地址高4位(0-131)
  128.         lcd_write_cmd(0x00+(x&0x0f));                        //列地址低4位(0-131)
  129.         lcd_write_dat(dat);
  130. }
  131. void lcd_typeface(uchar y,uchar x,uint zt)                //在xy坐標地址顯示字符
  132. {
  133.         uchar temp[32];
  134.         uchar i;
  135.         Z_CS=0;                                                                                //片選
  136.         write_byte(0x03);
  137.         write_byte((zt>>11)&0xff);
  138.         write_byte((zt>>3)&0xff);
  139.         write_byte((zt<<5)&0xff);
  140.         for(i=0;i<32;i++)
  141.                 temp[i]=z_read_byte();
  142.         Z_CS=1;
  143.         y%=7;                                                                                //因一個字占兩個頁(行,16點),所以限制只能到6
  144.         x%=113;                                                                                //因一個字占16(列點),所以限制只能到112
  145.         lcd_write_cmd(0xb0+y);                                                //頁地址(0-7)
  146.         lcd_write_cmd(0x10|(x>>4));                                        //列地址高4位(0-131)
  147.         lcd_write_cmd(0x00+(x&0x0f));                                //列地址低4位(0-131)
  148.         for(i=0;i<16;i++)
  149.                 lcd_write_dat(temp[i]);
  150.         lcd_write_cmd(0xb0+y+1);                                        //頁地址(0-7)
  151.         lcd_write_cmd(0x10|(x>>4));                                        //列地址高4位(0-131)
  152.         lcd_write_cmd(0x00+(x&0x0f));                                //列地址低4位(0-131)
  153.         for(i=0;i<16;i++)
  154.                 lcd_write_dat(temp[i+16]);
  155. }
  156. uint GB_ZT(uchar *p)                //漢字GB碼轉換成字體芯片對應漢字地址(只適用中文)
  157. {
  158.         uchar m,n;
  159.         uint val=0;
  160.         m=*p;
  161.         p++;
  162.         n=*p;
  163.         val=m<<8|n;
  164.         val=val-43807-((m-0xb0)*162);
  165.         return val;
  166. }
  167. uint GB_ZF_WORD(uchar *p)                //GB碼表轉換成字體芯片地址(只適用全格數字和字母)
  168. {
  169.         uchar m,n;
  170.         uint val=0;
  171.         m=*p;
  172.         p++;
  173.         n=*p;
  174.         val=m<<8|n;
  175.         val=val-41701;
  176.         return val;       
  177. }
  178. uint GB_ZF_BYTE(uchar *p)                //GB碼表轉換成字體芯片地址(只適用半格數字和字母)(適用于ASCII數字查表)
  179. {
  180.         uint val;
  181.         val=*p+155;
  182.         return val;
  183. }
  184. void out_lcd()                                //輸出到LCD
  185. {
  186.         uint i;                                                                        
  187.         lcd_out_spot(0,0,0x00);                                        //畫點
  188.         lcd_typeface(0,0,78);                                        //星 符號
  189. ……………………

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

所有資料51hei提供下載:
20170508 小屏12860串口.rar (1.98 MB, 下載次數: 133)

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

使用道具 舉報

沙發
ID:216379 發表于 2017-7-2 10:26 | 只看該作者
所有資料51hei提供下載:
回復

使用道具 舉報

板凳
ID:44037 發表于 2017-7-3 11:43 | 只看該作者
謝謝分享  正好有個液晶模塊   試一下
回復

使用道具 舉報

地板
ID:713797 發表于 2020-3-23 08:52 | 只看該作者
thank you share data
回復

使用道具 舉報

5#
ID:975756 發表于 2022-6-24 22:41 | 只看該作者
想問一下,如何讓屏幕豎屏顯示字體,是有什么指令嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一二区视频 | 久久专区 | 亚洲高清一区二区三区 | 国产亚洲成av人片在线观看桃 | 欧美在线资源 | 精品久久久久久亚洲综合网 | 亚洲精品一区二区在线观看 | 国产精品国产三级国产aⅴ无密码 | 91久久精品国产免费一区 | 亚洲一区二区在线播放 | 请别相信他免费喜剧电影在线观看 | 国产蜜臀| 婷婷去俺也去 | 亚洲成人精 | 日本免费小视频 | 国产一级片久久久 | 每日更新av | 欧美一区二区三区久久精品 | 精品一二三区在线观看 | 亚洲444kkkk在线观看最新 | 国产有码| 色吧色综合 | 国产精品久久久久久久久污网站 | 国产精品亚洲一区二区三区在线 | 亚洲免费人成在线视频观看 | 欧美专区在线 | 久久综合欧美 | 中文字幕一区二区三区乱码在线 | 成人精品一区二区三区中文字幕 | 亚洲成网站 | 国产精品久久久久久久久久免费看 | 久久久久久久一区 | 性做久久久久久免费观看欧美 | 亚洲精品电影网在线观看 | 精品日韩一区二区三区av动图 | 成人中文字幕在线 | 夜夜骑首页 | 亚洲精品1| 国产精品美女久久久久aⅴ国产馆 | 欧美成人激情 | 99精品国产在热久久 |