improved LCD code and changed pins
This commit is contained in:
		
							
								
								
									
										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(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user