adjusted lcd.c to match this board

This commit is contained in:
Stefan Rupp 2014-03-01 18:34:19 +01:00
parent bb36d903d0
commit 9771416756

37
lcd.c
View File

@ -16,18 +16,31 @@
#include "timer.h" #include "timer.h"
#include "lcd.h" #include "lcd.h"
//#define WAIT_250_ns() _delay_us(1)
#if (F_CPU <= 4000000UL)
#define WAIT_250_ns() _NOP() #define WAIT_250_ns() _NOP()
#elif (F_CPU <= 8000000UL)
#define WAIT_250_ns() _NOP();_NOP()
#elif (F_CPU <= 12000000UL)
#define WAIT_250_ns() _NOP();_NOP();_NOP()
#elif (F_CPU <= 16000000UL)
#define WAIT_250_ns() _NOP();_NOP();_NOP();_NOP()
#elif (F_CPU <= 20000000UL)
#define WAIT_250_ns() _NOP();_NOP();_NOP();_NOP();_NOP()
#else
#include <util/delay.h>
#define WAIT_250_ns() _delay_us(1)
#endif
#define LCD_DATA_MODE() (PORTC |= (1<<PC4)) #define LCD_DATA_MODE() (PORTD |= (1<<PD6))
#define LCD_CMD_MODE() (PORTC &= ~(1<<PC4)) #define LCD_CMD_MODE() (PORTD &= ~(1<<PD4))
#define LCD_SET_ENABLE() (PORTC |= (1<<PC5)) #define LCD_SET_ENABLE() (PORTD |= (1<<PD5))
#define LCD_RESET_ENABLE() (PORTC &= ~(1<<PC5)) #define LCD_RESET_ENABLE() (PORTD &= ~(1<<PD5))
// !!!!!!! // !!!!!!!
#define LCD_SET_READ() DDRC &= ~(0x0f);PORTC &= ~(0x0f);PORTB |= (1<<PB0) #define LCD_SET_READ() DDRA &= ~(0x0f);PORTA &= ~(0x0f);PORTD |= (1<<PD7)
#define LCD_SET_WRITE() PORTB &= ~(1<<PB0);DDRC |= 0x0f #define LCD_SET_WRITE() PORTD &= ~(1<<PD7);DDRA |= 0x0f
#define LCD_BUSY_FLAG (0x80)
// !!!!!!! // !!!!!!!
@ -45,7 +58,7 @@ static inline uint8_t lcd_read_byte(uint8_t RS)
LCD_SET_ENABLE(); LCD_SET_ENABLE();
WAIT_250_ns(); WAIT_250_ns();
byte = (PINC<<4); byte = (PINA<<4);
LCD_RESET_ENABLE(); LCD_RESET_ENABLE();
WAIT_250_ns(); WAIT_250_ns();
@ -53,7 +66,7 @@ static inline uint8_t lcd_read_byte(uint8_t RS)
LCD_SET_ENABLE(); LCD_SET_ENABLE();
WAIT_250_ns(); WAIT_250_ns();
byte |= PINC & 0x0f; byte |= PINA & 0x0f;
LCD_RESET_ENABLE(); LCD_RESET_ENABLE();
return byte; return byte;
@ -66,7 +79,7 @@ static inline void lcd_wait_while_busy(void)
uint8_t byte; uint8_t byte;
do { do {
byte = lcd_read_byte(0); byte = lcd_read_byte(0);
} while (byte & LCD_BUSY_FLAG); } while (byte & 0x80);
return; return;
} }
@ -74,7 +87,7 @@ static inline void lcd_wait_while_busy(void)
static inline void send_nibble(uint8_t nibble) static inline void send_nibble(uint8_t nibble)
{ {
LCD_SET_WRITE(); LCD_SET_WRITE();
PORTC = (PORTC & 0xf0) | (0x0f & nibble); PORTA = (PORTA & 0xf0) | (0x0f & nibble);
LCD_SET_ENABLE(); LCD_SET_ENABLE();
WAIT_250_ns(); WAIT_250_ns();
LCD_RESET_ENABLE(); LCD_RESET_ENABLE();
@ -136,7 +149,7 @@ void lcd_cursor(uint8_t blink)
void lcd_init(void) void lcd_init(void)
{ {
/* Initialize both ATmega and Dsiplay /* Initialize both ATmega and Display
* After return from this function, * After return from this function,
* display we be set to 4-bit data mode * display we be set to 4-bit data mode
*/ */