freescale

来自「Freescale 系列单片机常用模块与综合系统设计」· 代码 · 共 89 行

TXT
89
字号
#include  "KEY.h"
#include  "KEY_LINE.h"
#include  "LCD1602.h"

//键盘定义表
const Uchar KB_Table[]= 
{0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'A',
 0xED,'4',0xDD,'5',0xBD,'6',0x7D,'B',
 0xEB,'7',0xDB,'8',0xBB,'9',0x7B,'C',
 0xE7,'.',0xD7,'0',0xB7,':',0x77,'D',
 0x00};

/*----------------------------------------------------------------------------*
* 函数: KB_Scan:扫描读取键值函                                   *
* 功  能:  扫描一次4*4键盘上的按键,读取键值->*p      *
*              若无按键,*p为0xff                                            *
*参  数:   无                                                                          *
*返  回:    扫描到的键值                                                     *
*-----------------------------------------------------------------------------*/  
Uchar KB_Scan(void) 
 {
	 Uchar line,i,tmp;
     line=0b11111110;        //使第一根行线为0(低电平)
	 for(i=1;i<=4;i++)         //将扫描4根行线
	  {	
        tmp=KEY_GetVal();            //取列线输入值
        tmp <<=4;
        tmp |= KEY_LINE_GetVal(); //取行线值
        tmp |= 0b00001111;              //行线全为1
        KEY_LINE_PutVal(tmp&line);
	    asm("NOP");            //等待,消除按键抖动
	    asm("NOP");
	    tmp=KEY_GetVal();
	    tmp&=0b11110000;       //看第n行是否有键按下
	    if(tmp!=0xf0)          //本行有键按下
	     {
	        tmp=KEY_GetVal();
		    break;
	     }
	     else                  //本行无键按下,扫描下一行
	     {
		    line=(line<<1)|0x01; 
	     }
	 }	
	  if(i == 5) 
	  {
	    tmp=0xff;  
	  }
	  return(tmp);
 }
 
 /*--------------------------------------------------------------------*
*函 数:   KB_Def:键值转为定义值函数                      *
*功  能:  键值转为定义值                                           *
*参  数:  键值                                                               *
*返  回:  键定义值                                                       * 
*----------------------------------------------------------------------*/
Uchar KB_Def(Uchar KB_value)
 {
   Uchar KeyPress;
   Uchar i;
   Uchar j;
   
   i=0;
   while(1)
   {
       j=KB_Table[i];
       //与0(定义表结束标志)相比较
       if (j==0)                   //=0,即表中无次定义值
       {
           KeyPress=0xff;    //返回0xff
           break;
        }  
       else                        //与键值相比较
       {
          if (j==KB_value)         //找到   
          {
              KeyPress=KB_Table[i+1];  //取键定义值
              break; 
          }
          else 
          {
              i+=2;              //指向下一个键值,继续判断
          }
       }
    };
    return KeyPress;
 } 

⌨️ 快捷键说明

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