感謝別人的分享,提供給需要的人方便。
0.png (220.83 KB, 下載次數: 119)
下載附件
2017-5-12 04:25 上傳
0.png (234.8 KB, 下載次數: 103)
下載附件
2017-5-12 04:25 上傳
引腳圖:
0.png (61.67 KB, 下載次數: 117)
下載附件
2017-5-12 04:26 上傳
0.png (66.11 KB, 下載次數: 114)
下載附件
2017-5-12 04:25 上傳
還提供這些資料:
W25X16中文手冊.pdf
W25X40BL—字庫芯片資料.pdf
st7565中文參考資料.pdf
51單片機st7565源程序如下:
- /*STC89C52 3.3v小屏12864 串口 測試STC12C5A60S2能用,延時時間有差別
- 字符0-9=203-212,A-Z=220-245,a-z=252-277
- GB漢字編碼和字符地址公式:芯片地址*32=GB高8位*256+GB低8位-43807-((GB高8位-0xb0)*162)
- 全格數字字母地址公式:芯片地址*32=GB高8位*256+GB低8位-41701
- 半格數字字母地址公式:芯片地址*32=ISCII碼+155
- 注:字符芯片參考的是W25X16中文手冊,芯片用的是3.3v電壓,與5v電壓的C52連接的I/O口都串接了1.3K的電阻*/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit Z_DO=P3^1; //字符芯片串行數據輸出端 (MOSI)
- sbit Z_CS=P3^2; //字符芯片串行片選端
- sbit L_CS=P3^3; //LCD片選端
- sbit L_RST=P3^4; //LCD復位端
- sbit L_A0=P3^5; //LCD數據/命令(H/L)選擇端
- sbit CLK=P3^6; //LCD和字符芯片串行時鐘端 (共用)
- sbit SI=P3^7; //LCD和字符芯片共用串行數據端 (MISO) (共用)
- code uchar t123[]="0123456789ABCDEF";
- void delay(uint XMS) //延時
- {
- uint i;
- for(;XMS>0;XMS--)
- for(i=123;i>0;i--);
- }
- void write_byte(uchar dat) //LCD和字符芯片串口寫入1個字節(8位)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- if(dat&0x80) SI=1;
- else SI=0;
- dat<<=1;
- CLK=0;
- CLK=1;
- }
- }
- void lcd_write_cmd(uchar cmd) //LCD寫入命令
- {
- L_A0=0; //命令
- L_CS=0; //片選
- write_byte(cmd);
- L_CS=1;
- }
- void lcd_write_dat(uchar dat) //LCD寫入數據
- {
- L_A0=1; //數據
- L_CS=0; //片選
- write_byte(dat);
- L_CS=1;
- }
- void clr_lcd() //LCD清屏
- {
- uchar i,j;
- for(i=0;i<8;i++)
- {
- lcd_write_cmd(0xb0+i);
- lcd_write_cmd(0x10+0);
- lcd_write_cmd(0x00+0);
- for(j=132;j>0;j--)
- lcd_write_dat(0x00);
- }
- }
- void lcd_init() //LCD初始化
- {
- L_RST=0;
- L_RST=1;
- lcd_write_cmd(0xaf); //0xaf開顯示;0xae關顯示
- lcd_write_cmd(0x40); //起始行顯示地址(0-63)(設置哪一行顯示為首行)
-
- lcd_write_cmd(0xa1); //開ADC=0xa1,顯示從下往上0-127;關ADC=0xa0,顯示由上往下3-131
- lcd_write_cmd(0xa6); //0xa6關反白,0xa7開反白
-
- lcd_write_cmd(0xa4); //0xa4正常顯示,0xa5顯示所有點
-
- lcd_write_cmd(0xa2); //LCD的偏壓比 1/9BIAS
-
- lcd_write_cmd(0xc8); //0xc8正常輸出方向(上為首行);0x80反向輸出(下為首行)
-
- lcd_write_cmd(0x2f); //內部電源選擇(0x28-0x2f,應設0x2f)
-
- lcd_write_cmd(0x24); //LCD驅動電壓的電阻比(0x20-0x27,5v可設0x24)
-
- lcd_write_cmd(0x81); //進入設置對比度輸出電壓V0
-
- lcd_write_cmd(0x24); //為對比度的第二條指令,對比度電壓的等級(0x00-0x3f)
-
- clr_lcd();
- }
- /*void z_write_byte(uchar dat) //字符芯片寫入1個字節
- {
- Z_CS=0; //片選
- write_byte(dat);
- Z_CS=1;
- }*/
- uchar z_read_byte() //字符芯片讀出1個字節
- {
- uchar val=0,i;
- Z_DO=1;
- for(i=8;i>0;i--)
- {
- val<<=1;
- CLK=0;
- CLK=1;
- if(Z_DO) val++;
- }
- return val;
- }
- /*uchar z_read_add(uchar h,uchar z,uchar l) //讀字符芯片相應地址的單個數據
- {
- uchar val;
- Z_CS=0; //片選
- write_byte(0x03);
- write_byte(h);
- write_byte(z);
- write_byte(l);
- val=z_read_byte();
- Z_CS=1;
- return val;
- }*/
- void z_init() //字符芯片初始化
- {
- Z_CS=1;
- }
- void init() //程序初始化
- {
- delay(100);
- lcd_init();
- z_init();
- delay(100);
- }
- void lcd_out_spot(uchar y,uchar x,uchar dat) //X軸(左0-127右),Y軸(上0-7下),8位數(8個點,左低-右高)
- {
- y&=0x07; x&=127; //數值限制
- lcd_write_cmd(0xb0+y); //頁地址(0-7)
- lcd_write_cmd(0x10|(x>>4)); //列地址高4位(0-131)
- lcd_write_cmd(0x00+(x&0x0f)); //列地址低4位(0-131)
- lcd_write_dat(dat);
- }
- void lcd_typeface(uchar y,uchar x,uint zt) //在xy坐標地址顯示字符
- {
- uchar temp[32];
- uchar i;
- Z_CS=0; //片選
- write_byte(0x03);
- write_byte((zt>>11)&0xff);
- write_byte((zt>>3)&0xff);
- write_byte((zt<<5)&0xff);
- for(i=0;i<32;i++)
- temp[i]=z_read_byte();
- Z_CS=1;
- y%=7; //因一個字占兩個頁(行,16點),所以限制只能到6
- x%=113; //因一個字占16(列點),所以限制只能到112
- lcd_write_cmd(0xb0+y); //頁地址(0-7)
- lcd_write_cmd(0x10|(x>>4)); //列地址高4位(0-131)
- lcd_write_cmd(0x00+(x&0x0f)); //列地址低4位(0-131)
- for(i=0;i<16;i++)
- lcd_write_dat(temp[i]);
- lcd_write_cmd(0xb0+y+1); //頁地址(0-7)
- lcd_write_cmd(0x10|(x>>4)); //列地址高4位(0-131)
- lcd_write_cmd(0x00+(x&0x0f)); //列地址低4位(0-131)
- for(i=0;i<16;i++)
- lcd_write_dat(temp[i+16]);
- }
- uint GB_ZT(uchar *p) //漢字GB碼轉換成字體芯片對應漢字地址(只適用中文)
- {
- uchar m,n;
- uint val=0;
- m=*p;
- p++;
- n=*p;
- val=m<<8|n;
- val=val-43807-((m-0xb0)*162);
- return val;
- }
- uint GB_ZF_WORD(uchar *p) //GB碼表轉換成字體芯片地址(只適用全格數字和字母)
- {
- uchar m,n;
- uint val=0;
- m=*p;
- p++;
- n=*p;
- val=m<<8|n;
- val=val-41701;
- return val;
- }
- uint GB_ZF_BYTE(uchar *p) //GB碼表轉換成字體芯片地址(只適用半格數字和字母)(適用于ASCII數字查表)
- {
- uint val;
- val=*p+155;
- return val;
- }
- void out_lcd() //輸出到LCD
- {
- uint i;
- lcd_out_spot(0,0,0x00); //畫點
- lcd_typeface(0,0,78); //星 符號
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
20170508 小屏12860串口.rar
(1.98 MB, 下載次數: 133)
2017-5-11 20:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|