//---------------------------------------------------------------------- /*EASTRISING TECHNOLOGY CO,.LTD.*/ // Module : ERC802-1 Series // Create : JAVEN // Lanuage : C51 Code // Date : 2009-06-18 // Drive IC : ST7032I // INTERFACE : I2C // MCU : AT89C52 // VDD : 5.0V //---------------------------------------------------------------------- #include #include #define Write_Address 0x7c/*slave addresses with write*/ #define Read_Address 0x7d/*slave addresses with read*/ sbit SDA=P1^7;/*I2C serial data).*/ sbit SCL=P1^6;/*I2C serial clock).*/ sbit RST=P3^5;/*reset*/ unsigned char code font[]= { 0x29,0x31,0x32,0x33,0x34,0x35,0x36,0x37 }; /******************************************************************************* * Function Name : Delay * Description : Delay n * 2us. * Input : n * Output : None * Return : None *******************************************************************************/ void Delay(unsigned int n) { while(n--); return; } /******************************************************************************* * Function Name : Start * Description : I2C Start. * Input : n * Output : None * Return : None *******************************************************************************/ void Start(void)/*start*/ { SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); return; } /******************************************************************************* * Function Name : Stop * Description : I2C stop. * Input : n * Output : None * Return : None *******************************************************************************/ void Stop(void)/*stop*/ { SDA=0; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); return; } /******************************************************************************* * Function Name : Check_Ack * Description : Check acknowledge. * Input : n * Output : None * Return : None *******************************************************************************/ void Check_Ack(void)//Ó¦´ðλ { unsigned char ack=1; SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); while(ack==1){ack=SDA;}; _nop_(); SCL=0; return; } /******************************************************************************* * Function Name : Send * Description : send one byte data. * Input : Data * Output : None * Return : None *******************************************************************************/ void Send(unsigned char Data)/*send 8bit data*/ { unsigned char BitCounter=8; unsigned char temp; do { temp=Data; SCL=0; _nop_(); _nop_(); _nop_(); _nop_(); if((temp&0x80)==0x80) SDA=1; else SDA=0; SCL=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); SCL=0; } /******************************************************************************* * Function Name : Initial * Description : LCM initializing * Input : None * Output : None * Return : None *******************************************************************************/ void Initial(void) { RST=1; Delay(2000); RST=0; Delay(2000); RST=1; Delay(2000); Start(); Send(Write_Address); //send slave address with write Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x38); //FUNCTION SET 8 bit,N=1,5*7dot Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x39); //FUNCTION SET 8 bit,N=1,5*7dot IS=1 Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x1c); //Internal OSC frequency adjustment 183HZ bias will be 1/4 Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x78); //Contrast control low byte Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x53); //booster circuit is turn off./ICON /Contrast control high byte Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x6c); //Follower control Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x0c); //DISPLAY ON Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x01); //CLEAR DISPLAY Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x06); //ENTRY MODE SET CURSOR MOVES TO RIGHT Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x02); Check_Ack(); Stop(); } /******************************************************************************* * Function Name : Display * Description : Display one character * Input : dat,add * Output : None * Return : None *******************************************************************************/ void Display(unsigned char dat,unsigned char add) { add=0x80+add; Start(); Send(Write_Address); Check_Ack(); Send(0x80); Check_Ack(); Send(add); Check_Ack(); Stop(); Start(); Send(Write_Address); Check_Ack(); Send(0xc0); Check_Ack(); Send(dat); Check_Ack(); Stop(); return; } /******************************************************************************* * Function Name : main * Description : main function * Input : None * Output : None * Return : None *******************************************************************************/ main() { unsigned char i,j=0x30; Initial(); while(1) { Start(); Send(Write_Address); Check_Ack(); for(i=0;i<0x80;i++) //Display 80 character { Send(0xc0); Check_Ack(); Send(j); Check_Ack(); } Stop(); j++; if(j==0xff)j=0x30; Delay(60000); Delay(60000); Display(0x41,0x00); } }