MSP430矩阵式4×4键盘源代码
2021-04-02 来源:eefocus
简介:本文给大家分享了一个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;
}
}