12864(控制器為st7920) [ 2005-8-23 21:47:57 | By: kassey ] /******************************************** file&: lcd.h Description: LCD12864 驅(qū)動(dòng) ,采用串行方式, Author: kassey@126.com July,22th,2005 ********************************************/ #i nclude<reg52.h> #i nclude <intrins.h> sbit SCLK =P1^3 //E sbit SID =P1^4; //RW sbit RST =P1^2; // low active 可以不用,也就是說(shuō),只用兩條線和LCD通信 #define ROW1 0x80 #define ROW2 0x90 #define ROW3 0x88 #define ROW4 0x98 unsigned char code AC_TABLE[]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行漢字位置 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行漢字位置 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行漢字位置 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行漢字位置 };
/***************************************** Fucntion: delay10US(char x) Description: delay for 10 us Parameter: x Author: kassey@126.com Date: July,7th,2005 *****************************************/
void delay10US(uchar x) { uchar k; for(k=0;k<x;k++); }
/***************************************** Fucntion: delay1MS(char x) Description: delay for 10 us Parameter: x delay for 1MS Author: kassey@126.com Date: July,7th,2005 *****************************************/ void delay1MS(uchar x) { uchar k,j; x=x<<1; for(k=0;k<x;k++) for(j=0;j<255;j++)_nop_();
} void SendByteLCD(uchar WLCDData) { uchar i; for(i=0;i<8;i++) { if((WLCDData<<i)&0x80)SID=1; else SID=0; SCLK=0; SCLK=1 } } SPIWR(uchar Wdata,uchar RS) { SendByteLCD(0xf8+(RS<<1)); SendByteLCD(Wdata&0xf0); SendByteLCD((Wdata<<4)&0xf0);
} void SendCMD(uchar CMD) { SPIWR(CMD,0); delay10US(90);//8155來(lái)模擬串行通信,所以,加上8155的延時(shí), } void SendData(uchar Data) {
SPIWR(Data,1); } void LCDInit() { RST=0; delay1MS(50); RST=1; SendCMD(0x30);//功能設(shè)置,一次送8位數(shù)據(jù),基本指令集 SendCMD(0x0C);//0000,1100 整體顯示,游標(biāo)off,游標(biāo)位置off SendCMD(0x01);//0000,0001 清DDRAM SendCMD(0x02);//0000,0010 DDRAM地址歸位 SendCMD(0x80);//1000,0000 設(shè)定DDRAM 7位地址000,0000到地址計(jì)數(shù)器AC// SendCMD(0x04);//點(diǎn)設(shè)定,顯示字符/光標(biāo)從左到右移位,DDRAM地址加 一// SendCMD(0x0C);//顯示設(shè)定,開顯示,顯示光標(biāo),當(dāng)前顯示位反白閃動(dòng)
} /***************************** 清文本區(qū) *****************************/ void LcmClearTXT( void ) { unsigned char i; SendCMD(0x30); //8BitMCU,基本指令集合 SendCMD(0x80); //AC歸起始位 for(i=0;i<64;i++) SendData(0x20); } /***************************** 發(fā)送字符串 *****************************/ void PutStr(unsigned char row,unsigned char col,unsigned char *puts) { SendCMD(0x30); //8BitMCU,基本指令集合 SendCMD(AC_TABLE[8*row+col]); //起始位置 while(*puts != '\0') //判斷字符串是否顯示完畢 { if(col==8) //判斷換行 { //若不判斷,則自動(dòng)從第一行到第三行 col=0; row++; } if(row==4) row=0; //一屏顯示完,回到屏左上角 SendCMD(AC_TABLE[8*row+col]); SendData(*puts); //一個(gè)漢字要寫兩次 puts++; SendData(*puts); puts++; col++; } } /***************************** 繪圖 *****************************/ void PutBMP(unsigned char *puts) { unsigned int x=0; unsigned char i,j; SendCMD(0x34); //8Bit擴(kuò)充指令集,即使是36H也要寫兩次 SendCMD(0x36); //繪圖ON,基本指令集里面36H不能開繪圖 for(i=0;i<32;i++) //12864實(shí)際為256x32 { SendCMD(0x80|i); //行位置 SendCMD(0x80); //列位置 for(j=0;j<32;j++) //256/8=32 byte { //列位置每行自動(dòng)增加 SendData(puts[x]); x++; } } } void ClearScreen() { uchar i,j,x,y; LCDInit(); SendCMD(0x3e);// RE=1 擴(kuò)展指令選擇 G=1 開圖形顯示 x=0x80; y=0x80; for(j=0;j<64;j++) { y=0x80; SendCMD(x); SendCMD(y); for(i=0;i<32;i++) { SendData(0x00); } x=x+1; } }
void Sendint(uint dd) { SendData(dd>>8); SendData(dd); } /***************************** 打點(diǎn) x=0:128; y=0:64; *****************************/ void Gra(uchar x,uchar y) { uchar xx,yy; SendCMD(0x34); SendCMD(0x36); xx=x/16; yy=63-y; if(yy>=32){xx=xx+8;yy-=32;} SendCMD(0x80+yy); SendCMD(0x80+xx); Sendint(0x8000>>(x%16)); }
uchar code IBM[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xF8,0x00,0x3F,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFE,0x01,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x01,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x03,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x03,0xFF,0xFF,0x83,0xFF,0xFF,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xCF,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0xBF,0xFF,0xFB,0xFF,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0x8F,0xFF,0xF3,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0x87,0xFF,0xC3,0xFF,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x01,0xFF,0x83,0xFF,0x83,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00, 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x80,0xFF,0x03,0xFF,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7E,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7C,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xC0,0x08,0x03,0xFF,0xFE, 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xC0,0x00,0x03,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };
void Put(uchar *p) { uchar xx,yy for(yy=0;yy<32;yy++) for(xx=0;xx<8;xx++) { SendCMD(0x80+yy); //y 按位 SendCMD(0x80+xx);//x 按16位 SendData(*p); p++; SendData(*p); p++; } for(yy=0;yy<32;yy++) for(xx=8;xx<16;xx++) { SendCMD(0x80+yy); //y 按位 SendCMD(0x80+xx);//x 按16位 SendData(*p); p++; SendData(*p); p++; }
}
void Clear() { uchar i,j; LCDInittest(); SendCMD(0x34); SendCMD(0x3e);// RE=1 擴(kuò)展指令選擇 G=1 開圖形顯示 for(j=0;j<16;j++) for(i=0;i<32;i++) { SendCMD(0x80+i); SendCMD(0x80+j); SendData(0x00); SendData(0x00); } } void main() { LCDInittest(); LcmClearBMP(); Put(IBM); while(1) { } }
|