ATmega128 LCD질문입니다
페이지 정보
작성자 킹드나인 작성일21-06-16 18:31 조회52,113회 댓글4건본문
현재 LCD와 키패드와 연결지어서 하고 있습니다.
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 키보드를 3x4로 읽을 수 있게 해주는 코드입니다
void Key_pad_in(unsigned char* New_key_data, unsigned char* Key_off_flag)
{
if(*New_key_data)
{
if(*Key_off_flag)
{
buf_seg[3] = buf_seg[2];
buf_seg[2] = buf_seg[1];
buf_seg[1] = buf_seg[0];
*Key_off_flag = ~*Key_off_flag;
if(key_num <= 10)
{
if(key_num)
{
str2[11]=str2[10];
str2[10]=str2[9];
str2[9]=str2[8];
str2[8]=str2[7];
str2[7]=str2[6];
str2[6]=str2[5];
str2[5]=str2[4];
str2[4]=str2[3];
str2[3]=str2[2];
str2[2]=str2[1];
str2[1]=str2[0];
str2[0]=key_num;
LCD_pos(0,1);
LCD_Str(str2);
}
}
}
else
buf_seg[0] = key_data_trans(*New_key_data);
}
else
*Key_off_flag = 0xff;
}
그리고 위는 원래 키보드 누를때마다 FND를 shift해주는 함수입니다
저는 위 함수를 응용하려고 했습니다
위에는 보이지 않지만
unsigned char str2 = "123456789*0#"으로 설정하였습니다
LCD에 나타난 문자를 shift하려고 하였습니다
제가 shift를 하려고 했는데 unsigned char 또는 int에 관해 <<가 되지 않는다며 오류가 나서
배열을 직접 옮겨주는 형식으로 shift 하였습니다
초기에는 123456789*0#이 제대로 나왔습니다
제가 키패드를 누를때마다 누른 값이 제일 왼쪽에 나오고 나머지가 shift되는 식으로 만들고자 하였습니다
예를 들어 5를 누르면 5123456789*0 이 나오도록요
이제 문제입니다
제가 키패드로 누른 값이 LCD에 표시되지 않습니다
shift기능은 문제가 없는데 키패드로 누른값이 아무것도 나오지 않습니다
예를 들면 어떠한 숫자를 눌렀을 때
" 1234567890*"처럼 제일 앞자리에 아무것도 나오지 않습니다
키패드를 여러번 누르면 shift는 정상적으로 되나
계속 빈공간이 나옵니다
어디가 문제일까요?
항상 감사합니다
댓글 : 4
조회수 : 52,113
master님의 댓글
master 작성일
문자와 정수를 구분하지 못하고 계십니다.
if(key_num <= 10){
str2[0]=key_num;
10보다 작은 수는 LCD에 출력하지 못합니다.
문자인 '0'은 16진수로 0x30 이며
문자인 '9'는 16진수로 0x39 입니다.
str2[0]=key_num;
이 문장을 아래처럼 수정하세요
str2[0]=key_num+'0';
또는 아래처럼 해도 됩니다.
str2[0]=key_num|'0';
산술연산인지 논리연산인지의 차이인데 어느 것이든 상관없습니다.
킹드나인님의 댓글
킹드나인 작성일
감사합니다 이제 lcd에 제대로 나오네요
문자와 정수의 구분 확실히 기억해 두겠습니다
항상 감사합니다
킹드나인님의 댓글
킹드나인 작성일
관리자님 정말 거의 다 되었는데
키패드 0을 입력하면 LCD에 ;가 출력됩니다
key_num의 조건도 바꾸어보고
아예 0을 a로 define해서 case 11(키패드가 0일때)에 a를 대입해보기도 하였고
함수에서 key_num 조건을 잘못 설정했나 하여 계속 수정하였는데도
LCD에서 0의 값이 나오지 않습니다
어디가 문제일까요?
master님의 댓글
master 작성일
if(key_num <= 10){
if(key_num){
위 두 개의 조건문을 아래처럼 고쳐보세요
if((key_num<=9)&&(key_num>=0)){
괄호는 알맞게 수정합니다.