void hd44780fw_init(struct hd44780fw_conf* conf) { /* Structure initialization */ conf->half_chars = conf->total_chars / 2; conf->blink_en = HD44780FW_DEF_BLINK_ST; conf->cur_en = HD44780FW_DEF_CUR_ST; conf->last_index = 0; conf->last_bc_index = 0; /* Device initialization: */ hd44780_l_init(conf->low_conf, conf->lines, conf->font, HD44780_L_EMS_ID_INC, HD44780_L_EMS_S_OFF); /* Turn on display and set blink/cursor according to default values: */ hd44780_l_disp(conf->low_conf, HD44780_L_DISP_D_ON, HD44780FW_DEF_CUR_ST, HD44780FW_DEF_BLINK_ST); }
void setupLCD(){ // setting I/O configuration for pins DDRA = 0xFF; //data outputs to the LCD DDRB = (1 << DDB2)|(1 << DDB1)|(1 << DDB0); //rs, rw and en are outputs // setting pin numbers and which ports on the LCD the ports on the AVR are hooked up to low_conf.rs_i = 2; low_conf.rw_i = 1; low_conf.en_i = 0; low_conf.db7_i = 7; low_conf.db6_i = 6; low_conf.db5_i = 5; low_conf.db4_i = 4; low_conf.db3_i = 3; low_conf.db2_i = 2; low_conf.db1_i = 1; low_conf.db0_i = 0; low_conf.rs_port = &PORTB; low_conf.rw_port = &PORTB; low_conf.en_port = &PORTB; low_conf.db7_port = &PORTA; low_conf.db6_port = &PORTA; low_conf.db5_port = &PORTA; low_conf.db4_port = &PORTA; low_conf.db3_port = &PORTA; low_conf.db2_port = &PORTA; low_conf.db1_port = &PORTA; low_conf.db0_port = &PORTA; low_conf.line1_base_addr = 0x00; low_conf.line2_base_addr = 0x40; low_conf.dl = HD44780_L_FS_DL_8BIT; hd44780_l_init(&low_conf, HD44780_L_FS_N_DUAL, HD44780_L_FS_F_58, HD44780_L_EMS_ID_INC, HD44780_L_EMS_S_OFF); hd44780_l_disp(&low_conf, HD44780_L_DISP_D_ON, HD44780_L_DISP_C_OFF, HD44780_L_DISP_B_OFF); UCSR0B = (1<<RXEN0 | 1<<TXEN0); //Enable RX0 and TX0 UCSR0C = (1 << UCSZ01 | 1 << UCSZ00); //set data length to 8-bit; UBRR0H = 0b00000000; UBRR0L = 0b00011001; //Sets baudvalue in AVR to 25(1mhz), which gives baude rate 2400. baudvalue = (Fcpu/baudrate*16)-1 UCSR0B |= (1 << RXCIE0); //Enables the rc complete interrupt }
void hd44780_l_init(const struct hd44780_l_conf* conf, uint8_t n, uint8_t f, uint8_t id, uint8_t s) { /* Wait after Vcc rises: */ _delay_ms(15.0); /* Clear all pins: */ _hd44780_l_ca(conf); /* Special function set (for data length): */ *(conf->db5_port) |= _BV(conf->db5_i); *(conf->db4_port) |= _BV(conf->db4_i); _hd44780_l_ec(conf); /* Wait again: */ _delay_ms(4.1); /* Special function set (for data length): */ _hd44780_l_ec(conf); /* Wait again: */ _delay_us(100.0); /* Special function set (for data length): */ _hd44780_l_ec(conf); /* 4-bit specific: */ if (conf->dl == HD44780_L_FS_DL_4BIT) { *(conf->db4_port) &= ~_BV(conf->db4_i); _hd44780_l_ec(conf); } /* Remaining process: */ hd44780_l_fs(conf, conf->dl, n, f); hd44780_l_disp(conf, HD44780_L_DISP_D_OFF, HD44780_L_DISP_C_OFF, HD44780_L_DISP_B_OFF); hd44780_l_clear_disp(conf); hd44780_l_ems(conf, id, s); }
void hd44780fw_en_cursor(struct hd44780fw_conf* conf, uint8_t state) { hd44780_l_disp(conf->low_conf, HD44780_L_DISP_D_ON, state ? HD44780_L_DISP_C_ON : HD44780_L_DISP_C_OFF, conf->blink_en ? HD44780_L_DISP_B_ON : HD44780_L_DISP_B_OFF); conf->cur_en = state; }
int main(void) { DDRA = 0xFF; DDRD = (1 << DDD5)|(1 << DDD6)|(1 << DDD7); struct hd44780_l_conf low_conf; low_conf.rs_i = 5; low_conf.rw_i = 6; low_conf.en_i = 7; low_conf.db7_i = 7; low_conf.db6_i = 6; low_conf.db5_i = 5; low_conf.db4_i = 4; low_conf.db3_i = 3; low_conf.db2_i = 2; low_conf.db1_i = 1; low_conf.db0_i = 0; low_conf.rs_port = &PORTD; low_conf.rw_port = &PORTD; low_conf.en_port = &PORTD; low_conf.db7_port = &PORTA; low_conf.db6_port = &PORTA; low_conf.db5_port = &PORTA; low_conf.db4_port = &PORTA; low_conf.db3_port = &PORTA; low_conf.db2_port = &PORTA; low_conf.db1_port = &PORTA; low_conf.db0_port = &PORTA; low_conf.line1_base_addr = 0x00; low_conf.line2_base_addr = 0x40; low_conf.dl = HD44780_L_FS_DL_8BIT; hd44780_l_init(&low_conf, HD44780_L_FS_N_DUAL, HD44780_L_FS_F_58, HD44780_L_EMS_ID_INC, HD44780_L_EMS_S_OFF); hd44780_l_disp(&low_conf, HD44780_L_DISP_D_ON, HD44780_L_DISP_C_ON, HD44780_L_DISP_B_ON); //0x42 0x4f 0x4f 0x42 0x49 0x45 0x53 hd44780_l_write(&low_conf, 0x42); hd44780_l_write(&low_conf, 0x4f); hd44780_l_write(&low_conf, 0x4f); hd44780_l_write(&low_conf, 0x42); hd44780_l_write(&low_conf, 0x49); hd44780_l_write(&low_conf, 0x45); hd44780_l_write(&low_conf, 0x53); hd44780_l_write(&low_conf, 0x42); hd44780_l_write(&low_conf, 0x4f); hd44780_l_write(&low_conf, 0x4f); hd44780_l_write(&low_conf, 0x42); hd44780_l_write(&low_conf, 0x49); hd44780_l_write(&low_conf, 0x45); hd44780_l_write(&low_conf, 0x53); while(1) { //TODO:: Please write your application code } }