|
|
12864液晶顯示器常用顯示模式是圖形模式,顯示字符要取字模以作圖方式顯示,不太方便,但也給我們提供了更豐富的顯示功能,便于實(shí)現(xiàn)旋轉(zhuǎn)、鏡象等特效,旋轉(zhuǎn)理論上說(shuō)可以以任意角度旋轉(zhuǎn),但這涉及到復(fù)雜的三角函數(shù)計(jì)算,本文不做研究,如有需要另文討論。本文只針對(duì)旋轉(zhuǎn)90、180、270度的情況,這三種情況不涉及三角函數(shù)計(jì)算,只涉及矩陣變換,比較簡(jiǎn)單,也很實(shí)用,特別是網(wǎng)上的一些字模是橫向布置的,需要旋轉(zhuǎn)才能在12864上正常顯示,本文的旋轉(zhuǎn)顯示方法更顯有價(jià)值。除了旋轉(zhuǎn)外,也可以實(shí)現(xiàn)鏡象顯示,有水平方向的鏡象顯示和垂直方向的鏡象顯示,本文都進(jìn)行探索。以下是程序仿真截圖。
上面第一行為原始狀態(tài)顯示,即沒(méi)有旋轉(zhuǎn),是從網(wǎng)上抄的字模,可以看出不便于12864使用。
第二行左中右分別為旋轉(zhuǎn)90度、180度、270度的顯示。
第三行為垂直鏡象顯示和水平鏡象顯示。
符件有完整的仿真設(shè)計(jì)和程序。
單片機(jī)源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit rs=P2^3;
- sbit rw=P2^2;
- sbit E=P2^1;
- sbit cs1=P2^5;
- sbit cs2=P2^4;
- char cdata[][8]={{0x80,0x90,0x8c,0x84,0x84,0x84,0xf5,0x86},
- {0x84,0x84,0x84,0x84,0x94,0x8c,0x84,0x00},
- {0x00,0x80,0x80,0x84,0x46,0x49,0x28,0x10},
- {0x10,0x2c,0x23,0x40,0x80,0x00,0x00,0x00},
- {0xff,0xe7,0xe7,0xdb,0x81,0xbd,0x7e,0xff},
- {0xff,0xc1,0xbd,0xbd,0xc1,0xbd,0xbd,0xc1},
- {0xff,0xc3,0xbd,0xfd,0xfd,0xbd,0xc3,0xff}
- };
- void delay(int ii){int i;for(i=0;i<ii;i++);}
- //=======================================================
- void writeCmd(char c){E=0;rs=0;rw=0;E=1;P0=c;E=0;}
- void writeDat(char c){E=0;rs=1;rw=0;E=1;P0=c;E=0;}
- void set_xy(uchar x,uchar y){if(y>=64){cs2=0;cs1=1;y=y-64;}else{cs1=0;cs2=1;}writeCmd(0x40|y);writeCmd(0xb8|x);}
- void disp_HZ(uchar R,uchar L,uchar *p)
- {uchar i;
- for(i=0;i<16;i++){set_xy(2*R,16*L+i);writeDat(p[i]);
- set_xy(2*R+1,16*L+i);writeDat(p[i+16]);}
- }
- unsigned char HLR(char ii,unsigned char *cp){char i,c=0;for(i=7;i>=0;i--){c=c<<1;c|=(cp[i]>>ii)&0x01;}return c;}
- unsigned char HLL(char ii,unsigned char *cp){char i,c=0;for(i=0;i<8;i++){c=c<<1;c|=(cp[i]>>ii)&0x01;}return c;}
- unsigned char HLY(char ii,unsigned char *cp){char i,c=0;for(i=0;i<8;i++){c=c<<1;c|=(cp[ii]>>i)&0x01;}return c;}
- void ShowChar0(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(ch[i]);}
- void ShowChar90(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=7;i>=0;i--)writeDat(HLR(i,ch));}
- void ShowChar180(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=7;i>=0;i--)writeDat(HLY(i,ch));}
- void ShowChar270(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(HLL(i,ch));}
- void ShowCharY(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(HLY(i,ch));}
- void ShowCharX(unsigned char x,unsigned char y,unsigned char *ch){int i;set_xy(x,y);for(i=0;i<8;i++)writeDat(ch[7-i]);}
- main()
- {int i,j;
- //cs1=0;cs2=0;
- disp_HZ(0,3,cdata[0]);
- for(j=0;j<3;j++)ShowChar0(0,j*8,cdata[j+4]);
- for(j=0;j<3;j++)ShowChar90(3,j*8,cdata[j+4]);
- for(j=0;j<3;j++)ShowChar180(3,j*8+32,cdata[j+4]);
- for(j=0;j<3;j++)ShowChar270(3,j*8+64,cdata[j+4]);
- for(j=0;j<3;j++)ShowCharY(5,j*8,cdata[j+4]);
- for(j=0;j<3;j++)ShowCharX(5,j*8+32,cdata[j+4]);
- while(1);
- }
復(fù)制代碼
所有資料51hei提供下載:
12864A1.zip
(85.69 KB, 下載次數(shù): 52)
2019-3-14 13:20 上傳
點(diǎn)擊文件名下載附件
仿真與程序
|
評(píng)分
-
查看全部評(píng)分
|