|
128*64(ST7565P控制器)程序參考
//ST7565P控制器(128*64) //這些參考程序是在項(xiàng)目中提取出來的,希望能夠給大家提供一個(gè)參考 //有并行和串行兩種接法,我用的是串行輸出 //定義LCD顯示的全局變量 #define CS (1<<2) // Out #define A0 (1<<3) // Out #define SI (1<<4) // Out #define SCL (1<<5) // Out #define RST (1<<6) // Out #define LCD_LED (1<<7)// Out #define LCD_DATA 1 #define LCD_COMMAND 0 BYTE gContrast=40; // LCD 對比度0-63 //-------------------------------------------------------------------------- //液晶屏初始化 //-------------------------------------------------------------------------- void LCDInit(void) { CLR(rPDATC,RST); // RST=0; DelayMS(50); SET(rPDATC,RST); // RST=1; DelayMS(50); LCDWriteByte(0xa2,LCD_COMMAND); //lcd bias select 1/9 BIAS LCDWriteByte(0xa1,LCD_COMMAND); //ADC select,REVERSE 127-->0(a0,a1) LCDWriteByte(0xc0,LCD_COMMAND); //com select,NORMAL 0-->63(c8,c0) LCDWriteByte(0x26,LCD_COMMAND); //RESISTOR RATIO LCDWriteByte(0x81,LCD_COMMAND); //ELECTRONIC VOLUME mode setting 100B 對比度命令 LCDWriteByte(0x10,LCD_COMMAND); //Set reference voltagel register 對比度數(shù)值 LCDWriteByte(0x2f,LCD_COMMAND); //power control(VB,VR,VF=1,1,1) DelayMS(50); LCDWriteByte(0xaf,LCD_COMMAND); //set display on LCDWriteByte(0xf8,LCD_COMMAND); //set booster ratio LCDWriteByte(0x00,LCD_COMMAND); } //-------------------------------------------------------------------------- //寫數(shù)據(jù)或命令(串行方式) //-------------------------------------------------------------------------- void LCDWriteByte(char data,BYTE command) { CLR(rPDATC,CS); //CS=0 if(command == 0) { CLR(rPDATC,A0); //A0=0,命令 LCDShiftWrite(data); } else { SET(rPDATC,A0); //A0=1,數(shù)據(jù) LCDShiftWrite(data); } SET(rPDATC,CS); //CS=1; } //-------------------------------------------------------------------------- //串口移位輸出 //-------------------------------------------------------------------------- void LCDShiftWrite(char data) { unsigned char i; unsigned char Series,Temp; CLR(rPDATC,SCL); //SCL=0 Series = data; for(i=8;i>0;i--) { CLR(rPDATC,SCL); //SCL=0 Temp=Series & 0x80; if(Temp) { SET(rPDATC,SI);//SI=1 } else { CLR(rPDATC,SI);//SI=0 } SET(rPDATC,SCL); //SCL=1 Series = Series << 1; } } //-------------------------------------------------------------------------- //LCDSetXY: 設(shè)置LCD坐標(biāo)函數(shù) //輸入?yún)?shù):X:0-127 Y:0-8 // //編寫日期:2006-1-17 // //最后修改日期: //-------------------------------------------------------------------------- void LCDSetXY(BYTE x, BYTE y) { LCDWriteByte(0xB0|y,LCD_COMMAND);// Page(Row) LCDWriteByte(0x10|((x+4)>>4),LCD_COMMAND);// Column high LCDWriteByte((0x00|(x+4))&0x0f,LCD_COMMAND);// Column low } //-------------------------------------------------------------------------- //LCD_clear: LCD清屏函數(shù) // //編寫日期:2006-1-17 // //最后修改日期: //-------------------------------------------------------------------------- void LCDcls(void) { UINT32 i,n; for(i=0;i<9;i++) { LCDSetXY(0,i); for(n=0;n<128;n++) { LCDWriteByte(0x00,LCD_DATA); } } } //-------------------------------------------------------------------------- // 清屏,窗口范圍內(nèi)清零 //-------------------------------------------------------------------------- void LCDclsWin(BYTE Row1,BYTE Col1,BYTE Row2,BYTE Col2) { UINT32 i,j; if (Row2>8) Row2=8; if (Col2>127) Col2=127; for(i=Row1;i<=Row2;i++) { LCDSetXY(Col1,i); for(j=Col1;j<Col2;j++) { LCDWriteByte(0x00,LCD_DATA); } } } //-------------------------------------------------------------------------- //液晶屏RESET //-------------------------------------------------------------------------- void LCDReset(void) { LCDWriteByte(0xe2, LCD_COMMAND); } //-------------------------------------------------------------------------- //關(guān)液晶屏 //-------------------------------------------------------------------------- void LCDOff(void) { LCDWriteByte(0xae, LCD_COMMAND); } //-------------------------------------------------------------------------- //調(diào)節(jié)對比度 //-------------------------------------------------------------------------- void LCDContrast(BYTE Level) { BYTE Num,Temp1,Temp2; Temp1 = (Level/16)<<4; switch(Level%16) { case 10: Temp2 = 0x0a; break; case 11: Temp2 = 0x0b; break; case 12: Temp2 = 0x0c; break; case 13: Temp2 = 0x0d; break; case 14: Temp2 = 0x0e; break; case 15: Temp2 = 0x0f; break; default: Temp2 = Level%16; break; } Num = Temp1|Temp2; LCDWriteByte(0x81,LCD_COMMAND); LCDWriteByte(Num,LCD_COMMAND); } |
|
|