ARM AVR_keypad-3(lcd)
페이지 정보

본문
AVR_keypad-3(lcd)
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#asm
.equ __lcd_port = 0x12 ;PORTD // LCD를 PORTD에 연결
#endasm
#include <lcd.h>
unsigned char keybuf = 0, newkey = 0;
// keybuf(현재 눌린 키값 저장), oldkey(이전 눌렸던 킷값), newkey(keybuf 변수저장)
char lcd_buffer[16]; // lcd 글자수
void scankey(void){
unsigned char tmp, row, cul;
// tmp(임시저장값), row(0~4까지의 값), cul(row값에 따른 키 계산값)
for(row = 0 ; row < 5 ; row++){
do
{
PORTC = 0xf8 | row; // row에 000,001 .. 100을 쓴다.
tmp = PINC & 0xf8; // 첫 번째 읽은 포트3의 비트7~3 tmp저장
}
while(tmp != (PINC & 0xf8));
// 첫 번째와 두 번째 읽은 값이 일치하지 않으면 다시 읽는다.
if(tmp != 0xf8) // 키의 변화가 있으면
{
{
tmp = (tmp >> 3) & 0x1f;
if(tmp == 0x1e) cul = 1;
else if(tmp == 0x1d) cul = 2;
else if(tmp == 0x1b) cul = 3;
else if(tmp == 0x17) cul = 4;
else if(tmp == 0x0f) cul = 5;
keybuf = (row * 5) + cul;
}
}
}
}
void main(void){
DDRC = 0x07;
lcd_init(16);
while(1){
scankey();
if(keybuf != newkey)
{
newkey = keybuf;
lcd_init(16);
}
sprintf(lcd_buffer,"Input Key is %u", newkey);
lcd_gotoxy(0, 0);
lcd_puts(lcd_buffer);
}
}
/*※ sprint 함수 이해하기
예) char a[100];
int n = 50;
sprintf(a, "number = %d",n);
a란 배열에 "number = 50"이 저장된다.
#include <mega128.h>
#include <delay.h>
#include <stdio.h>
#asm
.equ __lcd_port = 0x12 ;PORTD // LCD를 PORTD에 연결
#endasm
#include <lcd.h>
unsigned char keybuf = 0, newkey = 0;
// keybuf(현재 눌린 키값 저장), oldkey(이전 눌렸던 킷값), newkey(keybuf 변수저장)
char lcd_buffer[16]; // lcd 글자수
void scankey(void){
unsigned char tmp, row, cul;
// tmp(임시저장값), row(0~4까지의 값), cul(row값에 따른 키 계산값)
for(row = 0 ; row < 5 ; row++){
do
{
PORTC = 0xf8 | row; // row에 000,001 .. 100을 쓴다.
tmp = PINC & 0xf8; // 첫 번째 읽은 포트3의 비트7~3 tmp저장
}
while(tmp != (PINC & 0xf8));
// 첫 번째와 두 번째 읽은 값이 일치하지 않으면 다시 읽는다.
if(tmp != 0xf8) // 키의 변화가 있으면
{
{
tmp = (tmp >> 3) & 0x1f;
if(tmp == 0x1e) cul = 1;
else if(tmp == 0x1d) cul = 2;
else if(tmp == 0x1b) cul = 3;
else if(tmp == 0x17) cul = 4;
else if(tmp == 0x0f) cul = 5;
keybuf = (row * 5) + cul;
}
}
}
}
void main(void){
DDRC = 0x07;
lcd_init(16);
while(1){
scankey();
if(keybuf != newkey)
{
newkey = keybuf;
lcd_init(16);
}
sprintf(lcd_buffer,"Input Key is %u", newkey);
lcd_gotoxy(0, 0);
lcd_puts(lcd_buffer);
}
}
/*※ sprint 함수 이해하기
예) char a[100];
int n = 50;
sprintf(a, "number = %d",n);
a란 배열에 "number = 50"이 저장된다.
첨부파일
-
KEPAD-3LCD.txt (1.6K)
65회 다운로드 | DATE : 2025-12-12 16:27:30
- 이전글삼성 노트북 SSD 윈도우즈 설치시 인식이 되지 않을때 26.01.09
- 다음글EXTI_6.3.1 25.11.23

