运行效果:
启动仿真,每当按键被按一次,在数码 LED 上显示某个按键的编号
一:仿真图
二:代码详情
#include "LPC21XX.h"
//定义常量
const unsigned char Led[]=
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char KSCANCONDE[]={0x01,0x02,0x04,0x08};
unsigned char Keytab[4][4]=
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x00,0x01,0x02,0x03,0x04,0x05
};
void Delay_250us(void)
{
unsigned int i;
i=50000;
while(i--);
}
int main(void)
{
unsigned int keyval;
unsigned int row,col;
//初始化LPC2124的P0
PINSEL0=0x00000000;
PINSEL1=0x00000000;
PINSEL2=0x00000000;
IO0DIR=0x000000FF;
IO1DIR=0x000F0000;
IO0CLR=0x000000FF;
keyval=0;
while(1)
{
for(row=0;row<4;row++)
{
IO1SET=(0x0F)<<16;
IO1CLR=(KSCANCONDE[row])<<16;
if((IO1PIN&0x00F00000)!=0x00F00000)
{
//消抖
Delay_250us();
//确定按键列号
if((IO1PIN&0x00F00000)!=0x00F00000)
{
if((IO1PIN&0x00E00000)==0x00E00000)col=0;
else if((IO1PIN&0x00D00000)==0x00D00000)col=1;
else if((IO1PIN&0x00B00000)==0x00B00000)col=2;
else col=3;
keyval=Keytab[row][col];
IO0CLR|=0xFF;//清显示
IO0SET=(Led[keyval]<<0);//显示本次按下的键码值
}
}
}
}
}
三:运行效果