#ifndef __SMART_H__ #define __SMART_H__
/**** General Purpose Register A - L ****/
#define PORTA (*((volatile unsigned char*)0x22)) #define DDRA (*((volatile unsigned char*)0x21)) #define PINA (*((volatile unsigned char*)0x20))
#define PORTB (*((volatile unsigned char*)0x25)) #define DDRB (*((volatile unsigned char*)0x24)) #define PINB (*((volatile unsigned char*)0x23))
#define PORTC (*((volatile unsigned char*)0x28)) #define DDRC (*((volatile unsigned char*)0x27)) #define PINC (*((volatile unsigned char*)0x26))
#define PORTD (*((volatile unsigned char*)0x2B)) #define DDRD (*((volatile unsigned char*)0x2A)) #define PIND (*((volatile unsigned char*)0x29))
#define PORTE (*((volatile unsigned char*)0x2E)) #define DDRE (*((volatile unsigned char*)0x2D)) #define PINE (*((volatile unsigned char*)0x2C))
#define PORTF (*((volatile unsigned char*)0x31)) #define DDRF (*((volatile unsigned char*)0x30)) #define PINF (*((volatile unsigned char*)0x2F))
#define PORTG (*((volatile unsigned char*)0x34)) #define DDRG (*((volatile unsigned char*)0x33)) #define PING (*((volatile unsigned char*)0x32))
#define PORTH (*((volatile unsigned char*)0x102)) #define DDRH (*((volatile unsigned char*)0x101)) #define PINH (*((volatile unsigned char*)0x100))
#define PORTJ (*((volatile unsigned char*)0x105)) #define DDRJ (*((volatile unsigned char*)0x104)) #define PINJ (*((volatile unsigned char*)0x103))
#define PORTK (*((volatile unsigned char*)0x108)) #define DDRK (*((volatile unsigned char*)0x107)) #define PINK (*((volatile unsigned char*)0x106))
#define PORTL (*((volatile unsigned char*)0x10B)) #define DDRL (*((volatile unsigned char*)0x10A)) #define PINL (*((volatile unsigned char*)0x109))
/* PORT 사용별 이름 지정 */
#define LCD_CTL PORTG #define LCD_BUS PORTA
#define LCD_CTL_DDR DDRG #define LCD_BUS_DDR DDRA
/* LCD PIN */
#define LCD_RS 0 #define LCD_RW 1 #define LCD_EN 2
/* CPU 동작시간을 맞춰주기 위한 Dealy문과 값 지정 */
#define Delay(x) for(uiCnt = 0; uiCnt < (dNum); ++uiCnt)
#define dNum1 = 500; #define dNum2 = 3000; #define dNum3 = 3500;
/* LCD 제어 명령어 */
#define LCD_CLR 0x01; //화면 지우기, 커서홈 -0B 0000 0001 #define LCD_HOME 0x02; //커서 처음 위치로 이동 - OB 0000 001 #define LCD_ENR 0x06; //어드레스 자동증가/감소(I/D) = 1(증가), 표시 쉬프트(s)=1(표시) - 0B 0000 0111 #define LCD_DSP 0x0F; //디스플레이(D)=1(표시), 커서(C)=1(표시), 깜빡임(B) on/off=1(on) - 0B 0000 1111 #define LCD_CUR 0x14; //표시=1(표시), 커서 이동=1(오른쪽으로 쉬프트) - OB 0001 11-- #define LCD_FUNC 0x38; //인터페이스(DL) = 1(8비트), 라인수(N)=1(2라인), 문자폰트(F)=0(5*8) - OB 0011 10--
/* LCD Write mode 초기화 설정 */ // RS : High = data register, Low = Instruction Register // R/W : High = read, Low = write
void LCD_Inst(unsigned char ucInst) { LCD_BUS = ucInst; Delay(dNum1); //초기 전압 인가시 지연 LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(0<<LCD_EN); // DC 영역 Delay(dNum1); //40ns 지연
LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(1<<LCD_EN); // enable 입력 Delay(dNum2); //enable 후 230ns 지연
LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(0<<LCD_EN); // Delay(dNum3); //Tc(500) - Tw(230) = 270ns 지연
}
void LCD_AVR_Pin_Init(void) { LCD_CTL_DDR = 0xFF; //모든 입력값 열어줌(8개) LCD_BUS_DDR = 0x07; //모든 입력값 열어줌(3개)
}
void LCD_Init(void) {
volatile unsigned int uiCnt;
LCD_AVR_Pin_Init();
Delay(dNum1);
LCD_Inst(LCD_FUNC); }
#endif //__SMART_H__ |