/* 名称:4X4矩阵键盘控
制条形LED显示
说明:运行本例时,按
下的按键值越大点亮的
LED越多。
*/
#includereg51.h>
#includeintrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//矩阵键盘按键特征码表
ucharcodeKeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,
0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};
//延时
voidDelayMS(uintx)
{
uchari;
while(x--)for(i=0;i120;i++);
}
//键盘扫描
ucharKeys_Scan()
{
ucharsCode,kCode,i,k;
//低4位置0,放入4行
P1=0xf0;
//若高4位出现0,则有键按下
if((P10xf0)!=0xf0)
{
DelayMS(2);
if((P10xf0)!=0xf0)
{
sCode=0xfe;
//行扫描码初值
for(k=0;k4;k++)//对4行分别进行扫描
{
P1=sCode;
if((P10xf0)!=0xf0)
{
kCode=~P1;
for(i=0;i16;i++)//查表得到按键序号并返回
if(kCode==KeyCodeTable[i])
}return(i); else sCode=_crol_(sCode,1); } } } return(-1); }
//主程序
voidmain()
{
uchari,P2_LED,P3_LED;
ucharKeyNo=-1;//按键序号,-1表示无按键
while(1)
{
KeyNo=Keys_Scan();//扫描键盘获取按键序号KeyNo
if(KeyNo!=-1)
{
P2_LED=0xff;
P3_LED=0xff;
for(i=0;i=KeyNo;i++)键值越大,点亮的LED越多
{
if(i8)
P3_LED>>=1;
else
P2_LED>>=1;
}
P3=P3_LED; //点亮条形LED
P2=P2_LED;
}
}
}
扩展阅读:MSP430编程点滴