#include<avr/io.h>
#define F_CPU 16000000
#include<util/delay.h>
#define LCD_CONTROL PORTG
#define LCD_DATABUS PORTC
#define minwoo while
void LCD_cmd(unsigned char cmd){
LCD_CONTROL = 0x00; // E = 0, RS = 0
_delay_ms(2);
LCD_DATABUS = cmd;
LCD_CONTROL = 0x02; // E = 1, Rs = 0
_delay_us(10);
LCD_CONTROL = 0x00; // E = 0,Rs = 0
_delay_us(50);
}
void LCD_data(unsigned char data){
LCD_CONTROL = 0x01; // E = 0, Rs = 1
LCD_DATABUS = data;
LCD_CONTROL = 0x03; // E = 1, Rs = 1
_delay_us(10);
LCD_CONTROL = 0x01; // E = 0, RS = 1
_delay_us(50);
}
void LCD_str(unsigned char cmd, char *str){
LCD_cmd(cmd);
while(*str!='\0')
LCD_data(*(str++));
}
void LCD_init(void){
DDRC = 0xFF;
DDRG = 0xFF;
LCD_cmd(0x38);
LCD_cmd(0x0C);
LCD_cmd(0x06);
LCD_cmd(0x01); // cls
_delay_ms(2);
}
void Putch(char);
char Getch(void);
int main(void){
UCSR0A = 0;
UCSR0B |= (1<<RXEN0) | (1<<TXEN0);
UCSR0C |= (1<<UCSZ01) | (1 <<UCSZ00);
UBRR0H = 0;
UBRR0L = 103;
LCD_init();
minwoo(1){
Putch(Getch());
}
}
void Putch(char data){
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = data;
char DATA[2] = {data, '\0'};
LCD_str(0x80, DATA);
}
char Getch(void){
while(!(UCSR0A & (1<<RXC0)));
return UDR0;
}
'OpenSTUDY > AVR' 카테고리의 다른 글
UART (0) | 2011.10.15 |
---|---|
직렬통신 (0) | 2011.10.15 |
USART - 아스키 & 헥사 (0) | 2011.10.09 |
USART (0) | 2011.10.07 |
CISC & RISC (0) | 2011.10.02 |