땜쟁이 포럼

key4*4 누른값 LCD에 쓰기

테라뱅크 1 10,749

//Project:              HkKey.c 

//Key Use Port:        PORTB HI=Write,LOW=Read 
//LCD Use Port(DATA):  PORTC Write 
//LCD Use Port(Control):PORTA Write(pin5,6,7) 
//CPU Type:            Atmel AVR8535,8515,103 
//Clock Frequency:      4.9152Mhz 
//Comfiler:            AvrEdit3.1(AVRGCC) 
//Date:                2001/08/05 
//Author:              hwang hae kwon 
#include <io.h> 
#include <interrupt.h> 
#include <signal.h> 
void  delay( int del); 
//--------------------------- 
#define PortA_In_Out DDRA //A 입출력 설정 
#define PortB_In_Out DDRB //B 입출력 설정 
#define PortC_In_Out DDRC //C 입출력 설정 
#define PortD_In_Out DDRD //D 입출력 설정 
#define LCD_PORT_OUT_Bit PORTA 
#define KEY_PORT_OUT    PORTB 
#define LCD_PORT_OUT    PORTC 
//#define LCD_PORT_INPUT  PINA 
#define KEY_PORT_INPUT  PINB 
#define LCD_PORT_INPUT  PINC 
#define LCD_RS          5    // PORT C LCD 4 
#define LCD_RW          6    // PORT C LCD 5 
#define LCD_E          7    // PORT C LCD 6 
#define PORT_IN        0x00  //포트 입력 
#define PORT_OUT      0xff  //포트 출력 
#define LOW_PORT_OUT  0x0f  //하위 포트  출력 
#define HI_PORT_OUT    0xf0  //상위 포트  출력 
//-------------------------------- 
#define run_enable        0 
#define run_disable        1 
unsigned char run; 
//----------------4*4 key--------- 
unsigned char KEY_SCAN_VALUE[4]={0xf7,0xfb,0xfd,0xfe}; 
unsigned char HexToAsiic_Map[16] = {"0123456789ABCDEF"}; 
unsigned char scan_count;      //0111,1011.1101.1110 DATA LOW 
unsigned char key_off;        //3210.3210.3210.3210 PORT LOW 
unsigned char key_enable; 
unsigned char scan_keyold,scan_key,scan_Tempkey,key_output_value; 
int key_Temp; 
//----------------------------- 
void delay(int del) 

while ( del--); 

//------------------------- 
#include <lcd2_16.h> 
#include <key4_4.h> 
//----------------------- 
void  port_init(void) 

scan_key=scan_keyold=scan_count=key_Temp=0; 
key_enable=0; 
outp(0x0f,DDRB); 
outp(HI_PORT_OUT,PortA_In_Out); 
outp(PORT_OUT,PortC_In_Out); 

//--------------------------- 
void main( void ) 

port_init(); 
lcd_init(); 
lcd_clr(); 
lcd_string_out(0,0,"  4*4Key Test  "); 
do 

  key_input(); 
  LCD_curse_OFF(); 
  LCD_curse_leftt(); 
  lcd_char_out(0,1,HexToAsiic_Map[key_Temp]); 

while(1); 

} 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오스토리로 보내기
  • 네이버밴드로 보내기

Comments

테라뱅크
/*
Project:        4*4KEY.H
Use Port:      PORTB HI=Write,LOW=Read
CPU Type:      Atmel AVR8535,8515,103
Clock Frequency:4.9152Mhz
Comfiler:      AvrEdit3.1(AVRGCC)
Date:          2001/08/05
Author:        hwang hae kwon */

void key_scanmain(void)
{                      //7654 3210
if(0xe0==scan_Tempkey)//1110 0000 HIGHT
  {
            switch(scan_count)
            {
                case 0:
                key_Temp=1 ;
                        break;
                case 1:
                key_Temp=4;
        break;
                case 2:
                key_Temp=7;
                break;
                case 3:
                key_Temp=14;
                        break;
            }
  }                    //7654 3210
if(0xd0==scan_Tempkey)//1101 0000 HIGHT
  {
            switch(scan_count)
            {
                case 0:
                        key_Temp=2;
                        break;
                case 1:
                        key_Temp=5;
        break;
                case 2:
                key_Temp=8;
                break;
                case 3:
        key_Temp=0;
                        break;
            }
}                    //7654 3210 
if(0xb0==scan_Tempkey)//1011 0000 HIGHT
{
            switch(scan_count)
            {
                case 0:
        key_Temp=3 ;
                        break;
                case 1:
                key_Temp=6 ;
        break;
                case 2:
                key_Temp=9 ;
                break;
                case 3:
        key_Temp=15 ;
                        break;
            }
}                      //7654 3210
if(0x70==scan_Tempkey) //0111 0000 HIGHT
{
            switch(scan_count)
            {
                case 0:
        key_Temp=10  ;
                        break;
                case 1:
        key_Temp=11 ;
                break;
                case 2:
        key_Temp=12 ;
                break;
                case 3:
        key_Temp=13 ;
                        break;
            }
  }
}
//----------------------------------------
void key_read(void)
{
if(scan_keyold==scan_key)//정확성을 위해 2번 읽음
{
key_scanmain();            //키값  읽음
key_output_value=scan_count;
        // 출력 순번값 저장1110->1101->1011->0111
key_enable=1;              //키읽음값 정확함
        scan_keyold=0xff;
}
if(key_enable==0)    //1번은 무조건 들어감
{
  scan_keyold=scan_key;//1번 읽음값 현재읽은값 같게
}
}
void key_scan_start(void)
{      //0123  0123 포트로 보냄
  for(scan_count=0;scan_count<4;scan_count++)
  {//1110->1101->1011->0111
      outp(0xf0 | KEY_SCAN_VALUE[scan_count],KEY_PORT_OUT);
scan_Tempkey=inp( KEY_PORT_INPUT);//상위만 읽음
      scan_Tempkey=0xf0 & scan_Tempkey;
      scan_key=scan_Tempkey;
if(scan_Tempkey !=0xf0)              //KEY가 눌려지짐
{
key_read();      //키값 읽음
}
  }
      delay(10);
}
void key_input(void)
{
    if(key_enable!=1)
    {
key_scan_start();//키를  읽음 함수 실행
    }//상위는 1111로 바꾸고  하위에 KEY_SCAN_VALUE값을 보냄
    outp(0xf0 | KEY_SCAN_VALUE[key_output_value],KEY_PORT_OUT);
    scan_Tempkey=inp(KEY_PORT_INPUT);
    //하위는 무시하고 상위(눌린 키값)만 읽음
    scan_Tempkey=0xf0 & scan_Tempkey;
if(scan_Tempkey==0xf0) //키가 눌려지지 않음
      {
      key_enable=0;
}
}
카테고리
최근통계
  • 현재 접속자 18 명
  • 오늘 방문자 485 명
  • 어제 방문자 879 명
  • 최대 방문자 2,440 명
  • 전체 방문자 1,359,785 명
  • 전체 회원수 478 명
  • 전체 게시물 745 개
페이스북에 공유 트위터에 공유 구글플러스에 공유 카카오스토리에 공유 네이버밴드에 공유