⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard12.c.bak

📁 键盘扫描 并通过LED 适时 显示
💻 BAK
字号:
/*********************************************************
*     文件名称:
*             keyboard12.h
*      程序功能描述:
*            行列式键盘检测
*   输入:
*            用户的按键事件 
*   输出:
*            存放用户输入的键值                                              
*
*
*********************************************************/
#ifndef _MSP430XF449H_
#include <msp430x44x.h>
#endif
#define KEY_BOARD keyboard.h
unsigned char key_Pressed,      // if a key is press down
              key_val,          // key value
              key_Flag;         // if there is a key-value in 
                                // key buffer
                                 
unsigned char key_Map[12] ={    //设置键盘逻辑键值与程序计算键值的映射
                           1,2,3,10,4,5,
                           6,0,7,8,9,11
                           };
/********************************************************
*  Initiate keyboard device 
********************************************************/
void init_Keyboard(void){
     
      P1DIR &= 0x01;  // P1.4~P1.8 input mode 
      P1DIR |= 0x0E;  // set p1.1~p1.3 outputmode
      P1OUT |= 0x0E;  // p1.1~p1.3 output=0
      key_Flag    = 0;//no key is ready to  be read 
      key_Pressed = 0;//no key is pressed 
      
}
/*********************************************
* Check_Key(),检查按键,确认键值
*********************************************/
void check_Key(void){
    
    unsigned char row ,col,tmp1,tmp2;
    
    tmp1 = 0x08;
    for(row=0;row<3;row++){
        P1OUT |= 0x0E;      // p1.1~P1.3=1
        P1OUT -= tmp1;      // P1.1~p1.3中有一个为0
        tmp1 = tmp1/2;      
        if ((P1IN & 0xf0) < 0xf0){
           tmp2 = 0x80;
           for(col =0;col<0x04;col++){
              if((P1IN & tmp2)==0x00){          // if is the pressed key
                key_val =key_Map[ row*4 +col] ; // get value
                return; 
              }
              tmp2 /= 2;
           }
        }
    }
         
}
/***********************************************************
* delay
************************************************************/
void delay(){
     unsigned int tmp;
      for(tmp=0x0ff;tmp>0;tmp--);
}
void key_Event(void){
     
     unsigned char tmp;
     P1OUT &= 0x01;
     tmp = P1IN;  // get p1IN
     if ((key_Pressed ==0x00)&&((tmp & 0xf0) < 0xf0)) {      //是否有键按下
         key_Pressed = 1; // set flag
         delay();         //消除抖动
         check_Key();     // get key code
     }else if ((key_Pressed ==1)&&((tmp & 0xf0) == 0xf0)){  //是否按键已经释放
         key_Pressed = 0; // clear flag
         key_Flag    = 1; // key code can be read
     }
     
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -