BASIC4MCU | 질문게시판 | Atmega128 LCD 구동 질문입니다
페이지 정보
작성자 킹드나인 작성일2021-06-14 23:54 조회7,028회 댓글2건본문
키패드를 누르면 LCD가 나오도록 만들고 있습니다
unsigned char KeyScan(void)
{
unsigned int key_scan_line = 0xef;
unsigned char key_scan_loop = 0, getPinData = 0;
for(key_scan_loop = 0; key_scan_loop < 4; key_scan_loop++)
{
PORTD = key_scan_line;
delay_us(1);
getPinData = PIND & 0x0f;
if(getPinData != 0x00)
{
switch(getPinData)
{
case 0x01:
key_num = key_scan_loop*4 + 1;
break;
case 0x02:
key_num = key_scan_loop*4 + 2;
break;
case 0x04:
key_num = key_scan_loop*4 + 3;
break;
case 0x08:
key_num = key_scan_loop*4 + 4;
break;
default:
break;
}
return key_num;
}
key_scan_line = (key_scan_line << 1);
delay_us(1);
}
}
unsigned char key_data_trans(unsigned char New_key_data)
{
unsigned char key_num=0;
if(New_key_data % 4 != 0)
{
key_num = (New_key_data / 4) * 3 +(New_key_data % 4);
if(key_num>=10)
{
switch(key_num)
{
case 10:
key_num = FND_Star;
break;
case 11:
key_num = 0;
break;
case 12:
key_num = FND_Sharp;
break;
}
}
}
return key_num;
}
우선 여기까지가 키패드 부분입니다 4x4키패드에서 1~#까지만 사용하도록 바꾸었습니다
이 부분은 교재 그대로 따라한거라 문제가 없습니다
이제 본 질문입니다
우선 기존 LCD관련 파일을 사용하였기 때문에
키패드 상관없이 단순히 LCD만 보는 파일에서는
unsigned char str1[] = "Hello";
LCD_pos(0,1);
LCD_Str(str1);
만 넣으면 LCD가 제대로 작동하는 것은 확인하였습니다
여기서 #을 누르면 즉 key_num이 12의 값을 가질때
LCD를 Hello가 나오도록 하고자 했습니다
그러기 위해
1. 제일 밑의 case 12에
unsigned char str1[] = "Hello";
LCD_pos(0,1);
LCD_Str(str1);를 그대로 대입했습니다. 작동 안합니다
2. 새로운 함수를 지정하고 그 함수에서 if문을 사용하여
key_num이 12일 때 위의 LCD함수를 넣고 main문 안에 넣었습니다. 작동 안합니다
3. 처음부터 main문 안에 if문을 사용하여 LCD함수를 넣었습니다. 작동 안합니다
LCD 함수 자체는 문제가 없을텐데 이를 어디에 넣어주어야 할까요?
답변 주시면 정말 감사드립니다
댓글 2
조회수 7,028master님의 댓글
master 작성일
unsigned char str1[] = "Hello";
로컬변수를 선언할 때에는 함수의 첫번째에 변수를 선언해주세요
case 12에는 아래 내용만 추가하면 되겠죠
LCD_pos(0,1); LCD_Str(str1);
킹드나인님의 댓글
킹드나인
답변 감사합니다
늦게 확인해서 답변이 늦었네요 ㅠ
항상 감사합니다