ARM开发7.3.4 基础实训( 4 ) 矩阵式键盘的输入系统设计--LPC21XX

运行效果:
启动仿真,每当按键被按一次,在数码 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);//显示本次按下的键码值
					}
			 }
		 }
	}
}

三:运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了49 篇原创文章 · 获赞 17 · 访问量 4269

猜你喜欢

转载自blog.csdn.net/weixin_42753193/article/details/105142753
今日推荐