132 lines
2.6 KiB
C
132 lines
2.6 KiB
C
#include "lcd_hd44780.h"
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
void lcd_hd44780_writeToDisp(lcd_hd44780_t *inst){
|
|
|
|
inst->setGetGpio_event(&(inst->gpio_data),LCD_HD44780_SET);
|
|
}
|
|
/*
|
|
void lcd_hd44780_clearDisp(lcd_hd44780_t *inst){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
void lcd_hd44780_printf(lcd_hd44780_t *inst, char *string){
|
|
|
|
return;
|
|
|
|
}*/
|
|
|
|
static void lcd_writeCmd_disp(cm_lcd_hd44780_t *inst, hd44780_cmd_t cmd, hd44780_setGet_t getSet){
|
|
|
|
inst->gpio_data.data_bus = cmd;
|
|
|
|
|
|
inst->gpio_data.rw_pin = getSet;
|
|
|
|
// We want to write an instruction.
|
|
inst->gpio_data.rs_pin = LCD_HD44780_INSTRUCTION;
|
|
|
|
// E pin is sopposed to be zero when data is ready on port.
|
|
inst->gpio_data.e_pin = 0;
|
|
|
|
inst->setGetGpio_event(&(inst->gpio_data),getSet);
|
|
|
|
// Then Clock data in with E pin:
|
|
inst->gpio_data.e_pin = 1;
|
|
|
|
inst->setGetGpio_event(&(inst->gpio_data),getSet);
|
|
|
|
// Then Clock data in with E pin:
|
|
inst->gpio_data.e_pin = 0;
|
|
|
|
inst->setGetGpio_event(&(inst->gpio_data),getSet);
|
|
|
|
|
|
}
|
|
|
|
void lcd_hd44780_initDisp_8bit(cm_lcd_hd44780_t *inst){
|
|
|
|
// Wait for more than 15ms after VCC rise..
|
|
// Delay(15)
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_FUNCTION_SET,LCD_HD44780_SET);
|
|
|
|
// Wait for 4.1ms..
|
|
// Delay(4)
|
|
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_DISP_ONOFF_CTL,LCD_HD44780_SET);
|
|
|
|
// delay 100us
|
|
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_ENTRY_MODE,LCD_HD44780_SET);
|
|
|
|
|
|
|
|
}
|
|
|
|
void lcd_hd44780_initDisp_4bit(cm_lcd_hd44780_t *inst){
|
|
|
|
// Wait for more than 15ms after VCC rise..
|
|
// Delay(15)
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_FUNCTION_SET >> 4,LCD_HD44780_SET);
|
|
|
|
// Delay(4)
|
|
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_FUNCTION_SET >> 4,LCD_HD44780_SET);
|
|
|
|
// Delay(4)
|
|
|
|
lcd_writeCmd_disp(inst, LCD_HD44780_FUNCTION_SET >> 4,LCD_HD44780_SET);
|
|
}
|
|
|
|
void lcd_hd44780_regGpioEvt(cm_lcd_hd44780_t *inst, setGet_Gpio_Event_fpt getGpioEvt_fpt){
|
|
|
|
//if(inst == NULL)return;
|
|
|
|
inst->setGetGpio_event = getGpioEvt_fpt;
|
|
}
|
|
|
|
void lcd_hd44780_regWaitEvt(cm_lcd_hd44780_t *inst, wait_ms_Event_fpt waitEvt_fpt){
|
|
|
|
//if(inst == NULL)return;
|
|
|
|
inst->wait_event = waitEvt_fpt;
|
|
}
|
|
|
|
|
|
void lcd_hd44780_init(cm_lcd_hd44780_t *inst, lcd_hd44780_bitmode bit_mode){
|
|
|
|
//inst->gpio_data = 0x00;
|
|
inst->bit_mode = bit_mode;
|
|
/*
|
|
inst->gpio_data.data_bus = 0x0;
|
|
inst->gpio_data.e_pin = 0x0;
|
|
inst->gpio_data.rs_pin = 0x1;
|
|
inst->gpio_data.rw_pin = 0x0;
|
|
|
|
inst->setGetGpio_event(&(inst->gpio_data), 1);*/
|
|
|
|
//lcd_hd44780_initDisp(inst);
|
|
//lcd_writeCmd_disp(inst,LCD_HD44780_CLEAR_DISP,LCD_HD44780_SET);
|
|
//lcd_writeCmd_disp(inst,LCD_HD44780_DISP_ONOFF_CTL,LCD_HD44780_SET);
|
|
|
|
switch (inst->bit_mode) {
|
|
case LCD_BITMODE_8BIT:
|
|
lcd_hd44780_initDisp_8bit(inst);
|
|
break;
|
|
|
|
case LCD_BITMODE_4BIT:
|
|
break;
|
|
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|