AVR_keypad-3(lcd) > 교육용자료

본문 바로가기
www.bjschool.or.kr
노동부 국비지원 교육기관

MEMBERS LOGIN

교육용자료

ARM AVR_keypad-3(lcd)

페이지 정보

profile_image
작성자 수원인재기술학원
댓글 0건 조회 91회 작성일 25-12-12 16:27

본문

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"이 저장된다.

첨부파일


수원인재기술학원 | 사업자번호 : 135-92-74012 | 경기도 화성시 경기대로 1054번지 | TEL : 031-223-5440 FAX : 031-236-5440
CopyRight © 수원인재기술학원. ALL RIGHTS RESERVED.