1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 볼매(승훈) | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
케릭터 LCD의 첫번째 줄에 "Seniorcom AVR"을 표시하고 두번째 줄에 "LCD Test"를 출력하는
프로그램 입니다. 프로그램 다운로드는 ToastProg2005를 사용하시면 됩니다.
//---------------------------------------------------------------------------------
// 이 프로그램은 WinAVR-20050214 버전을 사용한
// AVR Edit 와 AVR Studio 4 에서 컴파일되었습니다.
//----------------------------------------------------------------------------------
#define F_CPU 16000000 // 사용하는 CPU 클럭을 설정한다. delay.h를 위해 필요
#include <avr/io.h>
#include <avr/delay.h> //_delay_us(), _delay_ms() 함수를 사용하기 위해
//DDRAM 설정 : 0x80+DDRAM address 값
#define LINE1 0x80 //첫번째 라인의 DDRAM address : 0x00 -> 0x80+0x00
#define LINE2 0xC0 //두번째 라인의 DDRAM address : 0x40 -> 0x80+0x40
//PG2=LCD_EN, PG1=RW, PG0=RS 에 연결
#define CMD_WRITE 0xFC //명령어쓰기 E=1, RW=0, RS=0
#define CMD_READ 0xFE //명령어읽기 E=1, RW=1, RS=0
#define DATA_WRITE 0xFD //데이터쓰기 E=1, RW=0, RS=1
#define DATA_READ 0xFF //데이터읽기 E=1, RW=1, RS=1
#define LCD_EN 0x04 //PG2에 연결되어 있기 때문에 bit2를 1로 했다.
//LCD에 명령을 쓰기 위한 함수
void LCD_cmd_write(char cmd)
{
PORTG = CMD_WRITE; //PORTG에 RS, RW, E 가 연결되어 있다.
PORTB = cmd; //PORTB에 데이터버스가 연결되어 있다.
PORTG = PORTG^LCD_EN; //E 신호를 H->L로 하기 위해
_delay_ms(2); //LCD 내부 동작시간
}
//LCD에 데이터를 쓰기 위한 함수
void LCD_data_write(char data)
{
PORTG = DATA_WRITE; //PORTG에 RS, RW, E 가 연결되어 있다.
PORTB = data; //PORTB에 데이터버스가 연결되어 있다.
PORTG = PORTG^LCD_EN; //E 신호를 H->L로 하기 위해
_delay_ms(2); //LCD 내부 동작시간
}
// LCD 초기화, 초기화 강좌의 순서도 참조
void init_LCD(void)
{
_delay_ms(15); //15msec 이상 시간지연
LCD_cmd_write(0x38); //기능셋(데이터버스 8비트, 라인수:2줄)
_delay_ms(5); //4.1msec 이상 시간지연, 생략가능
LCD_cmd_write(0x38); //기능셋, 생략 가능
_delay_us(100); //100usec 이상 시간지연, 생략가능
LCD_cmd_write(0x38); //기능셋, 생략 가능
LCD_cmd_write(0x08); //표시 Off , 생략 가능
LCD_cmd_write(0x01); //화면 지우기
LCD_cmd_write(0x06); //엔트리모드셋
LCD_cmd_write(0x0C); //표시 On
}
// LCD에 문자열을 표시하기 위한 함수
void LCD_wr_string(char d_line, char *lcd_str)
{
LCD_cmd_write(d_line); //문자열을 표시하기 위한 라인 설정
while(*lcd_str != '\0')
{
LCD_data_write(*lcd_str); //한개의 문자씩 LCD에 표시한다.
lcd_str++;
}
}
// ATmega128의 포트 초기화
void init_system(void)
{
DDRB = 0xFF; //LCD 데이터 버스
PORTB = 0xFF;
DDRG = 0xFF; //LCD 컨트롤 신호(PG2=LCD_EN, PG1=RW, PG0=RS)
PORTG = 0xFF;
}
int main(void)
{
init_system(); //초기화
init_LCD();
LCD_wr_string(LINE1, " Seniorcom AVR "); //LINE을 지정하고 문자열을 쓴다.
LCD_wr_string(LINE2, " LCD Test "); //LINE을 지정하고 문자열을 쓴다.
while(1);
return 1;
}