윤교수님 한글 GLCD 라이브러리 수정중인데
지난 포스팅까지 일단 제어는 성공
그런데 포트에서 제어핀으로 사용하지 않은 잔여핀도 제어가 변하는 현상이
일단 핀이 아까운 경우가 발생하므로 다른 한글라이브러리 처럼
제어핀 콘트롤 독립화 -영향 제거
아직 어딘가 문제가 있는듯
..
GLCD 제어 기본원리는 = http://blog.naver.com/freehuds?Redirect=Log&logNo=100074004932
수정할 곳
다른 곳에서 얻어온 소스 주입
지난 포스팅까지 일단 제어는 성공
그런데 포트에서 제어핀으로 사용하지 않은 잔여핀도 제어가 변하는 현상이
일단 핀이 아까운 경우가 발생하므로 다른 한글라이브러리 처럼
제어핀 콘트롤 독립화 -영향 제거
아직 어딘가 문제가 있는듯
..
GLCD 제어 기본원리는 = http://blog.naver.com/freehuds?Redirect=Log&logNo=100074004932
수정할 곳
다른 곳에서 얻어온 소스 주입
* LCD_DATABUS(0x2000) : D0-D7 = DB0-DB7 (7-14, data bus) */ /* LCD_CONTROL(0x2100) : D3 = R/-W (5, read/write) */ /* D4 = D/-I (4, data/instruction) */ /* D5 = E (6, enable) */ /* D6 = CS1 (15, chip select 1) */ /* D7 = CS2 (16, chip select 2) */ #define LCD_DATABUS PORTD // LCD/GLCD data #define LCD_DATA_PIN PIND // Added to read data #define LCD_DATA_DIR DDRD #define LCD_CONTROL PORTF // LCD/GLCD control signal #define LCD_CTRL_DIR DDRF #define LCD_CTRL_PIN PINF // Added to read data #define RW 3 #define RS 4 #define G_E 5 #define G_CS1 6 #define G_CS2 7 #define RS_DATA LCD_CONTROL|=_BV(RS) #define RS_CMD LCD_CONTROL&=~_BV(RS) #define RW_READ LCD_CONTROL|=_BV(RW) #define RW_WRITE LCD_CONTROL&=~_BV(RW) #define E_ON LCD_CONTROL|=_BV(G_E) #define E_OFF LCD_CONTROL&=~_BV(G_E) #define CS1_ON LCD_CONTROL|=_BV(G_CS1) #define CS1_OFF LCD_CONTROL&=~_BV(G_CS1) #define CS2_ON LCD_CONTROL|=_BV(G_CS2) #define CS2_OFF LCD_CONTROL&=~_BV(G_CS2) 기본 GLCD 제어 루틴 수정 - 원래 포트 데이터 건드리지 않게 수정 // ---------------------------------------------------------------------------- void GLCD_command(uint8_t signal,uint8_t command) /* write a command */ { //LCD_CONTROL = (signal & 0xC0); // D/-I = 0 if(signal == 0x40){ CS1_ON; CS2_OFF; }else if(signal == 0x80){ CS1_OFF; CS2_ON; }else{ CS1_ON; CS2_ON; } RS_CMD; RW_WRITE; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); LCD_DATABUS = command; // write command //LCD_CONTROL |= (signal & 0xC0)|0x20; // E = 1 E_ON; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); //LCD_CONTROL = signal & 0xC0; // E = 0 E_OFF; asm volatile(" NOP "); //LCD_CONTROL = 0x00; // clear all control signals Delay_us(10); // wait for GLCD busy } // ---------------------------------------------------------------------------- void GLCD_data(uint8_t signal,uint8_t character) /* write a data */ { //LCD_CONTROL = (signal & 0xC0)|0x10; // D/-I = 1 if(signal == 0x40){ CS1_ON; CS2_OFF; }else{ CS1_OFF; CS2_ON; } RS_DATA; RW_WRITE; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); LCD_DATABUS = character; // write data //LCD_CONTROL = (signal & 0xC0)|0x30; // E = 1 E_ON; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); //LCD_CONTROL = (signal & 0xC0)|0x10; // E = 0 E_OFF; asm volatile(" NOP "); //LCD_CONTROL = 0x00; // clear all control signals Delay_us(10); // wait GLCD busy } // ---------------------------------------------------------------------------- unsigned char GLCD_data_RD(uint8_t cols) // Read a data { unsigned char data=0, signal; if(cols < 64) // if y <= 7, CS1 signal = 0x40; else // if y >= 8, CS2 signal = 0x80; //LCD_CONTROL = (signal & 0xC0)|0x10; // RS = 1 => PD4 if(signal == 0x40){ CS1_ON; CS2_OFF; }else{ CS1_OFF; CS2_ON; } RS_DATA; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); //LCD_CONTROL |= 0x08; // Set Read; RW = PD3 RW_READ; LCD_DATA_DIR = 0x00; LCD_DATABUS = 0x00; //LCD_CONTROL |= (signal & 0xC0)|0x30; // E = 1 E_ON; asm volatile(" PUSH R0 "); // delay for 500 ns asm volatile(" POP R0 "); asm volatile(" PUSH R0 "); asm volatile(" POP R0 "); data = LCD_DATA_PIN; //LCD_CONTROL = (signal & 0xC0)|0x10; // E = 0 E_OFF; asm volatile(" NOP "); //LCD_CONTROL &= ~0x08; // Set Write ; RW = PD3 RW_WRITE; LCD_DATA_DIR = 0xFF; LCD_DATABUS = 0x00; //LCD_CONTROL = 0x00; // clear all control signals Delay_us(10); // wait GLCD busy return data; }
'uAVR' 카테고리의 다른 글
AVR에서 MDF화일 저장 - ASAM MCD-2MC (0) | 2019.11.02 |
---|---|
도트매트릭 LED 제어루틴 (0) | 2017.02.09 |
FAST AVR UTFT Library for C (Not CPP) - SSD1289 / HY32D (0) | 2017.01.21 |
GLCD FONT convert to use for LED DOT Matrix (0) | 2017.01.21 |
윤덕용 교수의 한글 GLCD 라이브러리 수정 - 그래픽 기능 추가 (0) | 2017.01.21 |