void LCD_WrData(char d) { LCD_Wr4(__swap_nibbles(d) | 0x10); Delay_us(10); LCD_Wr4(d | 0x10); Delay_us(50); }
void LCD_CommonFunc(unsigned char data) { #ifdef BUS_4BIT unsigned char tmp; tmp = PORT_DATA & 0x0F; tmp |= (data & 0xF0); PORT_DATA = tmp; //вывод старшей тетрады SetBit(PORT_SIG_EN, EN); _delay_us(LCD_SPEED); ClearBit(PORT_SIG_EN, EN); data = __swap_nibbles(data); tmp = PORT_DATA & 0x0F; tmp |= (data & 0xF0); PORT_DATA = tmp; //вывод младшей тетрады SetBit(PORT_SIG_EN, EN); _delay_us(LCD_SPEED); ClearBit(PORT_SIG_EN, EN); #else PORT_DATA = data; //вывод данных на шину индикатора SetBit(PORT_SIG_EN, EN); //установка E в 1 _delay_us(LCD_SPEED); ClearBit(PORT_SIG_EN, EN); //установка E в 0 - записывающий фронт #endif }
void LCD_WrCmd(char d) { LCD_Wr4(__swap_nibbles(d) & 0x0F); Delay_us(10); LCD_Wr4(d & 0x0F); Delay_us(50); }
void LCD_Wait(void) { #ifdef CHECK_FLAG_BF #ifdef BUS_4BIT unsigned char data; DDRX_DATA &= 0x0F; //конфигурируем порт на вход PORT_DATA |= 0xF0; //включаем pull-up резисторы SetBit(PORT_SIG_RW, RW); //RW в 1 чтение из lcd ClearBit(PORT_SIG_RS, RS); //RS в 0 команды do{ SetBit(PORT_SIG_EN, EN); _delay_us(LCD_SPEED); data = PIN_DATA & 0xF0; //чтение данных с порта ClearBit(PORT_SIG_EN, EN); data = __swap_nibbles(data); SetBit(PORT_SIG_EN, EN); _delay_us(LCD_SPEED); data |= PIN_DATA & 0xF0; //чтение данных с порта ClearBit(PORT_SIG_EN, EN); data = __swap_nibbles(data); }while((data & (1<<FLAG_BF))!= 0 ); ClearBit(PORT_SIG_RW, RW); DDRX_DATA |= 0xF0; #else unsigned char data; DDRX_DATA = 0; //конфигурируем порт на вход PORT_DATA = 0xFF; //включаем pull-up резисторы SetBit(PORT_SIG_RW, RW); //RW в 1 чтение из lcd ClearBit(PORT_SIG_RS, RS); //RS в 0 команды do{ SetBit(PORT_SIG_EN, EN); _delay_us(LCD_SPEED); data = PIN_DATA; //чтение данных с порта ClearBit(PORT_SIG_EN, EN); }while((data & (1<<FLAG_BF))!= 0 ); ClearBit(PORT_SIG_RW, RW); DDRX_DATA = 0xFF; #endif #else _delay_us(40); #endif }