我的硬件是别人做的。 所以就只能按着硬件来。
//LCD左半屏写数据 void LCD_Write_DatL(unsigned char x) { DDRA=0x00; while(bit_is_set(PINA,7)) { //200a SET_RW; //a1 = 1 SET_cs1; //a2 = 0 CLR_cs2; //a3 = 1 LCD_NOP(); CLR_RS; //a0 = 0 SET_E; } DDRA=0xff; LCD_NOP(); //2009 CLR_E; // SET_cs1; //a2 = 0 CLR_cs2; //a3 = 1 SET_RS; //a0 = 1 CLR_RW; //a1 = 0 PORTA=x; SET_E; CLR_E; //SET_cs1; //SET_cs2; }
在这里我不太明白A13的用途。就一直将其置高。算出的地址如上。
程序重新改为:
//LCD左半屏写命令字 void LCD_Write_ComL(unsigned char x) { while(bit_is_set(*CRADDL,7)); *CWADDL = x; } //左半屏写数据 void LCD_Write_DatL(unsigned char x) { while(bit_is_set(*CRADDL,7)); *DWADDL = x; } //LCD右半屏写命令字 void LCD_Write_ComR(unsigned char x) { while(bit_is_set(*CRADDR,7)); *CWADDR = x; } //LCD右半屏写数据 void LCD_Write_DatR(unsigned char x) { while(bit_is_set(*CRADDR,7)); *DWADDR = x; }
结果还是不行。
|