msp430矩阵式4×4键盘源代码
          
            时间:01-21 16:02 阅读:1234次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:本文给大家分享了一个msp430矩阵式4×4键盘源代码。
               
                        
          
            #include   
char key;
manage_key1()
{}
.................
.................
manage_key16()
{}
void delays( )
    {
     int v=500;
     while(v!=0)v--;
    }
void keyscan( )
{ 
  char sccode,recode;
  P1DIR=0X0f;         
 
  P1OUT=0X00;           //置所有行为低电平,行扫描,列线输入(此时)  
  if((P1IN&0X0F)!=0X0F)   //判断是否有有键按下(读取列的真实状态,若第4列有键按下 则P1的值会变成0111 0000),有往下执行
  {
    delays();
    if((P1IN&0x0f)!=0x0f)     //再次判断列中是否是干扰信号,不是则向下执行
    {
     sccode=0xef;            //逐行扫描初值(即先扫描第1行)
     while((sccode&0x01)!=0)  //行扫描完成(4行已全部扫描完)sccode为1110 1111 停止while程序
      {
        P1OUT=sccode;         //输出行扫描码
        if((P1IN&0x0F)!=0X0F)  //本行有键按下(即P1(真实的状态)的高四位不全为1)
        {
          recode=(P1IN&0x0F)|0xf0;  //列(列处于低四位,高四位补1)
          key=(sccode & recode);     //行和列
        }
//所扫描行没有键按下,则扫描下一行,直到4行都扫描,此时sccode为1110 1111退出while程序
        else
        {
          sccode=(sccode<<1)|0x10;   ;//行扫描码左移一位
        }
       }
     }
        //无键按下,返回0
  }
}
void main( )
{
   keyscan();
   delays();
   switch(key)
   {
    case 0xee: manage_key1();break;    // 1110 1110
    case 0xde: manage_key2();break;    // 1101 1110
    case 0xbe: manage_key3();break;    // 1011 1110
    case 0x7e: manage_key4();break;    // 0111 1110
   
    case 0xed: manage_key5();break;    // 1110 1101
    case 0xdd: manage_key6();break;    // 1101 1101
    case 0xbd: manage_key7();break;    // 1011 1101
    case 0x7d: manage_key8();break;    // 0111 1101
   
    case 0xeb: manage_key9();break;    // 1110 1011
    case 0xdb: manage_key10();break;    // 1101 1011
    case 0xbb: manage_key11();break;    // 1011 1011
    case 0x7b: manage_key12();break;    // 0111 1011
   
    case 0xe7: manage_key13();break;    // 1110 0111
    case 0xd7: manage_key14();break;    // 1101 0111
    case 0xb7: manage_key15();break;    // 1011 0111
case 0x77: manage_key16();break;    // 0111 0111 
default: break; 
   }
}