/***************************************************************\
文件名: key.c
描述:用于MSP430F149。
Product Version: 4.10A 2008-11-24
\***************************************************************/
/****************************************************************
// P6.7 P6.6 P6.5 +3V
// | | | |
// P6.1------ /---- /----- /----R--|
// | | | |
// P6.2------ /---- /----- /----R--|
// | | | |
// P6.3------ /---- /----- /----R--|
// | | | |
// P6.4------ /---- /----- /----R--|
// 跳线 P2 P3
****************************************************************/
#include"msp430x14x.h"
#include"key.h"
void delay(unsigned int i)
{
while(i--);
}
unsigned char key(void)
{
unsigned char x=0XFF;
P6DIR=0XE0;
P6OUT=0X7F;// //扫描第一列
if((P6IN&0X02)==0X00)
x=12; //x=0;
else
if((P6IN&0X04)==0)
x=11;//x=1;
else
if((P6IN&0X08)==0)
x=10;//x=2;
else
if((P6IN&0X10)==0)
x=9;
else
{
P6OUT=0XBF;// //扫描第二列
if((P6IN&0X02)==0X00)
x=8; //x=0;
else
if((P6IN&0X04)==0)
x=7;//x=1;
else
if((P6IN&0X08)==0)
x=6;//x=2;
else
if((P6IN&0X10)==0)
x=5;
else
{
P6OUT=0XDF; //扫描第三列
if((P6IN&0X02)==0X00)
x=4; //x=0;
else
if((P6IN&0X04)==0)
x=3;//x=1;
else
if((P6IN&0X08)==0)
x=2;//x=2;
else
if((P6IN&0X10)==0)
x=1;
}
}
return(x);
}
unsigned char get_key(void)
{
unsigned char x,y;
if((P6IN&0X1F)!=0X1F)
{
delay(20);
if((P6IN&0X1F)!=0X1F)
{
x=key();
if(x!=0xFF)
y=x;
}
}
return y;
}