From 1acda4a55a382d706d01e07bf4eea8afbce5ee76 Mon Sep 17 00:00:00 2001 From: "Collin J. Doering" Date: Tue, 29 Sep 2015 06:06:37 -0400 Subject: [PATCH] Some cleanup Signed-off-by: Collin J. Doering --- lcdLib.c | 16 +++++++++++++++- lcdLib.h | 39 +++++++++++++++++++++++++++++---------- lcdOutput.c | 34 +++++++++++++--------------------- 3 files changed, 57 insertions(+), 32 deletions(-) diff --git a/lcdLib.c b/lcdLib.c index 90c1afb..f39eadf 100644 --- a/lcdLib.c +++ b/lcdLib.c @@ -90,6 +90,18 @@ void writeCharToLCD(char c) { writeCharToLCD_(c); } +void writeStringToLCD(const char* str) { + while (*str != '\0') { + writeCharToLCD(*str); + str++; + } +} + +void clearScreen(void) { + writeLCDInstr(CMD_CLEAR_SCREEN); + _delay_us(LCD_CLEAR_SCREEN_DELAY); +} + char readCharFromLCD(void) { loop_until_LCD_BF_clear(); // Wait until LCD is ready for new instructions @@ -165,11 +177,13 @@ void initLCD (void) { flashLED(5); // DEBUG } -void quickInitLCD(void) { +void initLCDByInternalReset(void) { enableLCDOutput(); writeLCDInstr_(0x38); writeLCDInstr_(0x0F); writeLCDInstr_(0x06); + writeLCDInstr_(0x01); + _delay_ms(16); /* writeLCDInstr_(0x01); // Clear display */ /* writeLCDInstr_(0x30); // RS=RW=0, 0b00110000 */ diff --git a/lcdLib.h b/lcdLib.h index 02e365d..b04140d 100644 --- a/lcdLib.h +++ b/lcdLib.h @@ -24,7 +24,7 @@ // Includes #include -// Constants +// LCD data bus PORT, PIN and DDR #define LCD_DBUS_PORT PORTB #define LCD_DBUS_DDR DDRB #define LCD_DBUS_PIN PINB @@ -32,20 +32,35 @@ #define LCD_CTRL_PORT PORTD #define LCD_CTRL_DDR DDRD -#define LCD_RS PD2 -#define LCD_RW PD3 -#define LCD_ENABLE PD4 +#define LCD_RS PD2 +#define LCD_RW PD3 +#define LCD_ENABLE PD4 -#define LCD_BF PB7 +#define LCD_DBUS0 PB0 +#define LCD_DBUS1 PB1 +#define LCD_DBUS2 PB2 +#define LCD_DBUS3 PB3 +#define LCD_DBUS4 PB4 +#define LCD_DBUS5 PB5 +#define LCD_DBUS6 PB6 +#define LCD_DBUS7 PB7 +#define LCD_BF PB7 -#define LCD_DELAY 50 +// LCD delays (in microseconds) +#define LCD_DELAY 50 +#define LCD_CLEAR_SCREEN_DELAY 16000 +#define LCD_SEND_DELAY 40 // unused + +// LCD Commands +#define CMD_CLEAR_SCREEN 0x01 +#define CMD_RETURN_HOME 0x02 + +//------------------------------------ #define STATUS_LED_PORT PORTC #define STATUS_LED_DDR DDRC #define STATUS_LED PC5 -//------------------------------------ - // Function definitions void flashLED(uint8_t times); @@ -63,12 +78,16 @@ void writeCharToLCD_(char c); void writeCharToLCD(char c); +void writeStringToLCD(const char* str); + +void clearScreen(void); + char readCharFromLCD(void); /* Do software initialization as specified by the datasheet */ -void initLCD (void); +void initLCD(void); -void quickInitLCD(void); +void initLCDByInternalReset(void); diff --git a/lcdOutput.c b/lcdOutput.c index ecd4964..eff87fc 100644 --- a/lcdOutput.c +++ b/lcdOutput.c @@ -37,32 +37,24 @@ int main(void) { STATUS_LED_DDR |= 1 << STATUS_LED; // DEBUG + const char* data[4] = { "Hello there friend!!", + "Anyways, I must go..", + "Isn't it a nice day.", + "To a midnight show;)" }; + initLCD(); - //quickInitLCD(); + //initLCDByInternalReset(); while (1) { - writeCharToLCD('H'); - writeCharToLCD('e'); - writeCharToLCD('l'); - writeCharToLCD('l'); - writeCharToLCD('o'); - writeCharToLCD(' '); - writeCharToLCD('t'); - writeCharToLCD('h'); - writeCharToLCD('e'); - writeCharToLCD('r'); - writeCharToLCD('e'); - writeCharToLCD(' '); - writeCharToLCD('f'); - writeCharToLCD('r'); - writeCharToLCD('i'); - writeCharToLCD('e'); - writeCharToLCD('n'); - writeCharToLCD('d'); - writeCharToLCD('!'); + for (uint8_t i = 0; i < 4; i++) { + writeStringToLCD(data[i]); + } + _delay_ms(5000); + clearScreen(); + //flashLED(5); // DEBUG - _delay_ms(5000); + _delay_ms(3000); } return 0;