/******************************************************************** The instruction system of ST7665 P0 : DB0=SID P2 : DB3=RST,DB2=CS,DB1=RS,DB0=SCLK 2005/12/19 ********************************************************************/
#include "head.h" static BYTE contrast=0x30; BYTE status=0x00; BYTE Constr[]="ContrastValue: ";
#define TIMES1 0X0001 #define DELAY delaytime(TIMES1) #define TIMES2 0X0000 //#define BUSDELAY delaytime(TIMES2)
void delaytime(WORD bytimes) { for(;bytimes>0;bytimes--); }
void ResetSt7565(void) { P2=0x04; //RST=0,CS=1,RS=0,SCLK=0 delaytime(0x1000); P2=0x0c; //RST=1,CS=1,RS=0,SCLK=0 delaytime(0x1000); }
void WriteInst(BYTE byInstruction) { BYTE temp; P2=0x08; //RST=1,CS=0,RS=0,SCLK=0 BUSDELAY; for(temp=0;temp<8;temp++) { if(byInstruction&0x80) P0=0xff; // else P0=0x00; BUSDELAY; P2=0x09;//RST=1,CS=0,RS=0,SCLK=1 BUSDELAY; P2=0x08;//RST=1,CS=0,RS=0,SCLK=0 byInstruction=byInstruction<<1; } P2=0x0c;//RST=1,CS=1,RS=0,SCLK=0 }
void WriteData(BYTE byData) { BYTE temp; P2=0x0a; //RST=1,CS=0,RS=1,SCLK=0 BUSDELAY; for(temp=0;temp<8;temp++) { if(byData&0x80) P0=0xff; // else P0=0x00; BUSDELAY; P2=0x0b;//RST=1,CS=0,RS=1,SCLK=1 BUSDELAY; P2=0x0a;//RST=1,CS=0,RS=1,SCLK=0 byData=byData<<1; } P2=0x0e;//RST=1,CS=1,RS=1,SCLK=0 }
void DisplayOnOff(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xae); }
void InitialDisplayLine(BYTE byInst) { DELAY; WriteInst((byInst&0x3f)|0x40); }
void SetReferenceVoltage(BYTE byInst) { DELAY; WriteInst(0x81); DELAY; WriteInst(byInst); }
void SetPageAddress(BYTE byInst) { DELAY; WriteInst((byInst&0x0f)|0xb0); }
void SetColumnAddress(BYTE byInst) { DELAY; WriteInst(byInst&0x0f); DELAY; WriteInst(((byInst>>4)&0x0f)|0x10); }
void AdcSelect(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xa0); }
void ReverseDisplayOnOff(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xa6); }
void EntireDisplayOnOff(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xa4); }
void LcdBiasSelect(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xa2); }
void SetModifyRead(void) { DELAY; WriteInst(0xe0); }
void ResetModifyRead(void) { DELAY; WriteInst(0xee); }
void Reset(void) { DELAY; WriteInst(0xe2); }
void ShlSelect(BYTE byInst) { DELAY; WriteInst((byInst&0x08)|0xc0); }
void PowerControl(BYTE byInst) { DELAY; WriteInst((byInst&0x07)|0x28); }
void RegulatorResistorSelect(BYTE byInst) { DELAY; WriteInst((byInst&0x07)|0x20); }
void SetStaticIndicatorMode(BYTE byInst) { DELAY; WriteInst((byInst&0x01)|0xac); }
void SetStaticIndicatorRegister(BYTE byInst) { DELAY; WriteInst(byInst); }
void Init_ST7565(void) {
// Reset();
AdcSelect(0x00); //normal direction ShlSelect(0x08); //reverse direction LcdBiasSelect(0x00); //1/9 bias
// PowerControl(0x04); //booster enable, // delay(1); // PowerControl(0x06); //booster enable, // delay(1); PowerControl(0x07); //booster enable, // RegulatorResistorSelect(0x05); SetReferenceVoltage(contrast);
ReverseDisplayOnOff(0x00); //normal display EntireDisplayOnOff(0x00); //normal display
InitialDisplayLine(0x20); //the frist line SetPageAddress(0x03); // SetColumnAddress(0x01); // WriteInst(0xb4); WriteInst(0x10); WriteInst(0x01); DisplayOnOff(0x01); //Display on }