#include #include #include #define uchar unsigned char #define uint unsigned int #define nop asm("NOP") #define CS_L PORTC&=0xfe #define CS_H PORTC|=0x01 #define RS_L PORTC&=0xfd #define RS_H PORTC|=0x02 #define WR_L PORTC&=0xfb #define WR_H PORTC|=0x04 #define RD_L PORTC&=0xf7 #define RD_H PORTC|=0x08 #define RESET_L PORTC&=0xef #define RESET_H PORTC|=0x10 #define DATA_L PORTB #define DATA_H PORTD void MUC_Init(); void LCD_Init(); void LCD_WR_REG(uchar index,uint val); void LCD_WR_Start(); void LCD_WR_Data(uint val); void LCD_WR_End(); void LCD_test(); void box_dis (uchar sx,uchar ex,uint sy,uint ey,uint color); uint color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f}; int main () { uchar px,py; MUC_Init(); LCD_Init(); LCD_test(); //box_dis (30,200,30,200,0x07e0); while (1); return 0; } void MUC_Init() { DDRD=0xff; PORTD=0xff; DDRC=0xff; PORTC=0xff; DDRB=0xff; PORTB=0xff; } void LCD_Init() { RESET_L; _delay_loop_2 (10000); RESET_H; //_delay_loop_2 (10000); //initializing funciton 1 LCD_WR_REG(0xe5,0x8000); LCD_WR_REG(0x00,0x0001); LCD_WR_REG(0x2b,0x0010); LCD_WR_REG(0x01,0x0100); LCD_WR_REG(0x02,0x0700); LCD_WR_REG(0x03,0x1230); LCD_WR_REG(0x04,0x0000); LCD_WR_REG(0x08,0x0202); LCD_WR_REG(0x09,0x0000); LCD_WR_REG(0x0a,0x0000); LCD_WR_REG(0x0c,0x0000); LCD_WR_REG(0x0d,0x0000); LCD_WR_REG(0x0f,0x0000); LCD_WR_REG(0x50,0x0000); LCD_WR_REG(0x51,0x00ef); LCD_WR_REG(0x52,0x0000); LCD_WR_REG(0x53,0x013f); LCD_WR_REG(0x60,0x2700); LCD_WR_REG(0x61,0x0001); LCD_WR_REG(0x6a,0x0000); LCD_WR_REG(0x80,0x0000); LCD_WR_REG(0x81,0x0000); LCD_WR_REG(0x82,0x0000); LCD_WR_REG(0x83,0x0000); LCD_WR_REG(0x84,0x0000); LCD_WR_REG(0x85,0x0000); LCD_WR_REG(0x90,0x0010); LCD_WR_REG(0x92,0x0000); LCD_WR_REG(0x93,0x0003); LCD_WR_REG(0x95,0x0110); LCD_WR_REG(0x97,0x0000); LCD_WR_REG(0x98,0x0000); //power setting function LCD_WR_REG(0x10,0x0000); LCD_WR_REG(0x11,0x0000); LCD_WR_REG(0x12,0x0000); LCD_WR_REG(0x13,0x0000); //_delay_loop_2 (10000); LCD_WR_REG(0x10,0x17b0); LCD_WR_REG(0x11,0x0004); //_delay_loop_2 (10000); LCD_WR_REG(0x12,0x013e); //_delay_loop_2 (10000); LCD_WR_REG(0x13,0x1f00); LCD_WR_REG(0x29,0x000f); _delay_loop_2 (0xffff); //非常重要,不能少 LCD_WR_REG(0x20,0x0000); LCD_WR_REG(0x21,0x0000); //initializing function 2 LCD_WR_REG(0x30,0x0204); LCD_WR_REG(0x31,0x0001); LCD_WR_REG(0x32,0x0000); LCD_WR_REG(0x35,0x0206); LCD_WR_REG(0x36,0x0600); LCD_WR_REG(0x37,0x0500); LCD_WR_REG(0x38,0x0505); LCD_WR_REG(0x39,0x0407); LCD_WR_REG(0x3c,0x0500); LCD_WR_REG(0x3d,0x0503); //display on LCD_WR_REG(0x07,0x0173); } void LCD_WR_REG(uchar index,uint val) { CS_L; RS_L; DATA_L=index; DATA_H=0; WR_L; //nop; //nop; WR_H; RS_H; DATA_L=(uchar)val; DATA_H=(uchar)(val>>8); WR_L; //nop; //nop; WR_H; CS_H; } void LCD_WR_Start() { CS_L; RS_L; DATA_L = 0x22; DATA_H = 0x00; WR_L; nop; nop; WR_H; RS_H; } void LCD_WR_Data(uint val) { DATA_L = (uchar)val; DATA_H = (uchar)(val>>8); WR_L; //nop; //nop; WR_H; } void LCD_WR_End() { CS_H; } void LCD_test() { uint temp,num; uchar n; LCD_WR_REG(0x20,0); //0-239 LCD_WR_REG(0x21,0); //0-319 LCD_WR_Start(); for(n=0;n<8;n++) { temp=color[n]; for(num=40*240;num>0;num--) LCD_WR_Data(temp); } LCD_WR_End(); } void box_dis (uchar sx,uchar ex,uint sy,uint ey,uint color) { LCD_WR_REG(0x20,sx); //0-239 LCD_WR_REG(0x21,sy); //0-319 LCD_WR_REG(0x50,sx); LCD_WR_REG(0x51,ex); LCD_WR_REG(0x52,sy); LCD_WR_REG(0x53,ey); sx=ex-sx+1; sy=ey-ex+1; LCD_WR_Start(); while (sx--) while (sy--) LCD_WR_Data(color); LCD_WR_End(); }