//---------------------------------------------------------------------- /*EASTRISING TECHNOLOGY CO,.LTD.*/ // Module : ERC1602-4 // Lanuage : C51 Code // Create : JAVEN // Date : May-20-2013 // Drive IC : ST7032 // INTERFACE : I2C // MCU : AT89C52 // VDD : 3.3V //---------------------------------------------------------------------- #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[]= { "*EastRisingTech*" "BUY-DISPLAY.COM" }; /******************************************************************************* * 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 : * 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 : * 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 : * 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 2-line display mode,5*7dot Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x39); //FUNCTION SET 8 bit,N=1 2-line display mode,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(0x72); //Contrast control low byte Check_Ack(); Send(0x80); // control byte Check_Ack(); Send(0x57); //booster circuit is turn on. /ICON display off. /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,Nline * Output : None * Return : None *******************************************************************************/ void Display(unsigned char dat,unsigned char add,unsigned char Nline) { if(Nline==1) add=0x80+add; if(Nline==2) add=0xc0+add; Start(); Send(Write_Address); Check_Ack(); Send(0x80); Check_Ack(); Send(add); Check_Ack(); Send(0x40); Check_Ack(); Send(dat); Check_Ack(); Stop(); return; } /******************************************************************************* * Function Name : shaw_character_string * Description : Display String * Input : a[] * Output : None * Return : None *******************************************************************************/ void shaw_character_string(unsigned char a[]) {unsigned char m; Start(); Send(Write_Address); Check_Ack(); Send(0x80); Check_Ack(); Send(0x80); //1 LINE ADDRESS Check_Ack(); Send(0x40); Check_Ack(); for(m=0;m<16;m++) { Send(a[m]); Check_Ack(); } Stop(); Start(); Send(Write_Address); Check_Ack(); Send(0x80); Check_Ack(); Send(0xC0); //2 LINE ADDRESS Check_Ack(); Send(0x40); Check_Ack(); for(m=16;m<32;m++) {Send(a[m]); Check_Ack(); } Stop(); Delay(65000); Delay(65000); } /******************************************************************************* * Function Name : main * Description : main function * Input : None * Output : None * Return : None *******************************************************************************/ main() { unsigned char i,j=0x08; P1=0XFF;P3=0XFF; Initial(); shaw_character_string(font); while(1) { Start(); Send(Write_Address); Check_Ack(); Send(0x80); Check_Ack(); Send(0x80); Check_Ack(); for(i=0;i<0x16;i++) //Display 80 character { Send(0xc0); Check_Ack(); Send(j); Check_Ack(); } Send(0x80); Check_Ack(); Send(0xC0); Check_Ack(); for(i=0;i<0x16;i++) //Display 80 character { Send(0xc0); Check_Ack(); Send(j); Check_Ack(); } Stop(); j++; if(j==0xff)j=0x08; Delay(60000); Delay(60000); } }