improved LCD code and changed pins
This commit is contained in:
parent
ccd35a9ad7
commit
f036f73bb8
14
Makefile
14
Makefile
@ -1,5 +1,5 @@
|
|||||||
PRG = rgbyteclock
|
PRG = rgbyteclock
|
||||||
OBJ = rgbyteclock.o timer.o lcd.o main.o rtc.o spi.o ringbuffer.o crc.o
|
OBJ = rgbyteclock.o timer.o lcd.o main.o rtc.o spi.o ringbuffer.o crc.o led1642gw.o
|
||||||
MCU_TARGET = atmega164a
|
MCU_TARGET = atmega164a
|
||||||
OPTIMIZE = -Os
|
OPTIMIZE = -Os
|
||||||
|
|
||||||
@ -25,15 +25,15 @@ $(PRG).elf: $(OBJ)
|
|||||||
@echo
|
@echo
|
||||||
|
|
||||||
# dependency:
|
# dependency:
|
||||||
rgbyteclock.o: timer.o lcd.o rgbyteclock.h rtc.o
|
rgbyteclock.o: timer.o lcd.o rgbyteclock.h rtc.o spi.o led1642gw.o
|
||||||
main.o: rgbyteclock.o
|
main.o: rgbyteclock.o lcd.o spi.o led1642gw.o
|
||||||
timer.o:timer.h
|
timer.o: timer.h
|
||||||
lcd.o: lcd.h
|
lcd.o: lcd.h timer.o
|
||||||
rtc.o: rtc.h
|
rtc.o: rtc.h
|
||||||
spi.o: spi.h
|
spi.o: spi.h crc.o ringbuffer.o
|
||||||
ringbuffer.o: ringbuffer.h
|
ringbuffer.o: ringbuffer.h
|
||||||
crc.o: crc.h
|
crc.o: crc.h
|
||||||
|
led1642gw.o: led1642gw.h
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
|
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
|
||||||
|
29
lcd.c
29
lcd.c
@ -16,7 +16,13 @@
|
|||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
|
|
||||||
//#define WAIT_250_ns() _delay_us(1)
|
#define LCD_DATA_PIN (PINA)
|
||||||
|
#define LCD_DATA_PORT (PORTA)
|
||||||
|
#define LCD_DATA_DIR (DDRA)
|
||||||
|
#define LCD_DATA_MASK (0x0f)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if (F_CPU <= 4000000UL)
|
#if (F_CPU <= 4000000UL)
|
||||||
#define WAIT_250_ns() _NOP()
|
#define WAIT_250_ns() _NOP()
|
||||||
#elif (F_CPU <= 8000000UL)
|
#elif (F_CPU <= 8000000UL)
|
||||||
@ -32,15 +38,15 @@
|
|||||||
#define WAIT_250_ns() _delay_us(1)
|
#define WAIT_250_ns() _delay_us(1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LCD_DATA_MODE() (PORTD |= (1<<PD6))
|
#define LCD_DATA_MODE() (PORTA |= (1<<PA4))
|
||||||
#define LCD_CMD_MODE() (PORTD &= ~(1<<PD4))
|
#define LCD_CMD_MODE() (PORTA &= ~(1<<PA4))
|
||||||
|
|
||||||
#define LCD_SET_ENABLE() (PORTD |= (1<<PD5))
|
#define LCD_SET_ENABLE() (PORTA |= (1<<PA6))
|
||||||
#define LCD_RESET_ENABLE() (PORTD &= ~(1<<PD5))
|
#define LCD_RESET_ENABLE() (PORTA &= ~(1<<PA6))
|
||||||
|
|
||||||
// !!!!!!!
|
// !!!!!!!
|
||||||
#define LCD_SET_READ() DDRA &= ~(0x0f);PORTA &= ~(0x0f);PORTD |= (1<<PD7)
|
#define LCD_SET_READ() LCD_DATA_DIR &= ~(LCD_DATA_MASK);LCD_DATA_PORT &= ~(LCD_DATA_MASK);PORTA |= (1<<PA5)
|
||||||
#define LCD_SET_WRITE() PORTD &= ~(1<<PD7);DDRA |= 0x0f
|
#define LCD_SET_WRITE() PORTA &= ~(1<<PA5);LCD_DATA_DIR |= LCD_DATA_MASK
|
||||||
// !!!!!!!
|
// !!!!!!!
|
||||||
|
|
||||||
|
|
||||||
@ -58,7 +64,7 @@ static inline uint8_t lcd_read_byte(uint8_t RS)
|
|||||||
|
|
||||||
LCD_SET_ENABLE();
|
LCD_SET_ENABLE();
|
||||||
WAIT_250_ns();
|
WAIT_250_ns();
|
||||||
byte = (PINA<<4);
|
byte = (LCD_DATA_PIN<<4);
|
||||||
LCD_RESET_ENABLE();
|
LCD_RESET_ENABLE();
|
||||||
|
|
||||||
WAIT_250_ns();
|
WAIT_250_ns();
|
||||||
@ -66,7 +72,7 @@ static inline uint8_t lcd_read_byte(uint8_t RS)
|
|||||||
|
|
||||||
LCD_SET_ENABLE();
|
LCD_SET_ENABLE();
|
||||||
WAIT_250_ns();
|
WAIT_250_ns();
|
||||||
byte |= PINA & 0x0f;
|
byte |= LCD_DATA_PIN & 0x0f;
|
||||||
LCD_RESET_ENABLE();
|
LCD_RESET_ENABLE();
|
||||||
|
|
||||||
return byte;
|
return byte;
|
||||||
@ -87,7 +93,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();
|
||||||
PORTA = (PORTA & 0xf0) | (0x0f & nibble);
|
LCD_DATA_PORT = (LCD_DATA_PORT & 0xf0) | (0x0f & nibble);
|
||||||
LCD_SET_ENABLE();
|
LCD_SET_ENABLE();
|
||||||
WAIT_250_ns();
|
WAIT_250_ns();
|
||||||
LCD_RESET_ENABLE();
|
LCD_RESET_ENABLE();
|
||||||
@ -158,8 +164,7 @@ void lcd_init(void)
|
|||||||
timer_wait(50);
|
timer_wait(50);
|
||||||
|
|
||||||
// set CONTROL Pins as outputs:
|
// set CONTROL Pins as outputs:
|
||||||
DDRC = 0x3f;
|
DDRA |= (0x70);
|
||||||
DDRB |= (1<<PB0);
|
|
||||||
|
|
||||||
LCD_CMD_MODE();
|
LCD_CMD_MODE();
|
||||||
LCD_SET_WRITE();
|
LCD_SET_WRITE();
|
||||||
|
Loading…
Reference in New Issue
Block a user