#define F_CPU 8000000UL #include #include #define SetBit(x,y) (x|=y) #define ClrBit(x,y) (x&=~y) #define NOP() asm("nop") #define blink 1 #define no_blink 0 #define cursor 1 #define no_cursor 0 #define GraphicMode 1 #define TextMode 0 #define DDRData DDRB #define DDRCtrl DDRC #define PORTData PORTB #define PORTCtrl PORTC #define PINData PINB #define RS 0b00000001 #define E 0b00000010 #define RW 0b00000100 #define RST 0b00001000 #define CS 0b00010000 //********************************************* void init(); void GoThenNoBusy(); void SetMode(unsigned short GraphicModeON,unsigned short blinkON, short unsigned cursorON); void Command(unsigned Com); void Data(unsigned _Data); void Print (unsigned _Data); //********************************************** short unsigned Busy=1; int main() { DDRCtrl=0xFF; DDRData=0xFF; init(); Print(0xCC); Print(0xCC); Print(0x33); Print(0x33); while(1) { NOP() ; } return 0; } //*************************************** void init() { ClrBit(PORTCtrl, CS);//CS=0; //RESET display ClrBit(PORTCtrl, RST); _delay_ms(2); SetBit(PORTCtrl, RST); _delay_ms(2); // GoThenNoBusy(); SetMode(GraphicMode, no_blink, no_cursor); Command(0x01);// Data(0x07);//HP=8, HP-1=7=0x07 Command(0x02); Data(0x1D);//n=HP*HN, n=240 => HN=30, HN-1=29=0x1D Command(0x03);// Data(0x3F);//Nx=64, Nx-1=63=0x3F // Command(0x04);// Command(0x08); Data(0x00); Command(0x09); Data(0x00); Command(0x0A); Data(0x00); Command(0x0B); Data(0x00); } //--------------------------------------- void GoThenNoBusy() { PORTData=0x00; DDRData=0x00; // ClrBit(PORTCtrl,E); //0 SetBit(PORTCtrl,RW); //1 SetBit(PORTCtrl,RS); //1 NOP(); NOP(); SetBit(PORTCtrl,E); //1 Busy=1; NOP(); NOP(); _delay_us(4); while (Busy) { Busy=(0x80&PINData); ClrBit(PORTCtrl,E); //0 _delay_us(4); SetBit(PORTCtrl,E); //1 _delay_us(4); } ClrBit(PORTCtrl,E);//0 DDRData=0xFF; NOP(); NOP(); } void SetMode(unsigned short GraphicModeON,unsigned short blinkON,unsigned short cursorON) { GoThenNoBusy(); ClrBit(PORTCtrl,E); SetBit(PORTCtrl,RS);//1 ClrBit(PORTCtrl,RW);//0 PORTData=0x00; SetBit(PORTCtrl,E);//1 _delay_us(4); ClrBit(PORTCtrl,E);//0 GoThenNoBusy(); ClrBit(PORTCtrl,RS);//=0 SetBit(PORTData,5);//display on SetBit(PORTData,4);//master if (blinkON) SetBit(PORTData,3); if (cursorON) SetBit(PORTData,2); if (GraphicModeON) SetBit(PORTData,1); //ClrBit(PORTData,0); NOP(); NOP(); SetBit(PORTCtrl,E);//1 _delay_us(4); ClrBit(PORTCtrl,E);//0 _delay_us(4); } void Command (unsigned Com) { GoThenNoBusy(); ClrBit(PORTCtrl,E); SetBit(PORTCtrl,RS);//1 ClrBit(PORTCtrl,RW);//0 PORTData=Com; NOP(); NOP(); SetBit(PORTCtrl,E);//1 _delay_us(4); ClrBit(PORTCtrl,E);//0 _delay_us(4); } void Data(unsigned _Data) { GoThenNoBusy(); ClrBit(PORTCtrl,E); ClrBit(PORTCtrl,RS);//0 ClrBit(PORTCtrl,RW);//0 PORTData=_Data; NOP(); NOP(); SetBit(PORTCtrl,E);//1 _delay_us(4); ClrBit(PORTCtrl,E); _delay_us(4); } void Print( unsigned _Data) { Command(0x0C); Data(_Data); }