【STM32】4*4矩阵键盘扫描程序(中断方式)

点击下载源码
上一篇杂记写了个扫描方式的键盘程序,但是最近在做一个小游戏对CPU响应速度有要求,于是再弄个简单的键盘中断检测程序吧。

总体思路:中断线为4行连接的GPIO口,先初始化矩阵的4行输出低电平4列输出高电平,当有按键按下时的上升沿触发中断;然后在相应的中断处理函数里面采取查询的方式(参考上篇)获得键值。

部分程序

void EXTI9_5_IRQHandler(void)                           //外部中断中断函数
{
   

		if(EXTI_GetITStatus(EXTI_Line7) != RESET)           //检测中断标志位
		{
   			
			//行置高,列置低,扫描列
			GPIO_SetBits ( ROW1_GPIO_PORT, ROW1_GPIO_PIN );
			
			GPIO_ResetBits ( LINE1_GPIO_PORT, LINE1_GPIO_PIN );
		    GPIO_ResetBits ( LINE2_GPIO_PORT, LINE2_GPIO_PIN );
		    GPIO_ResetBits ( LINE3_GPIO_PORT, LINE3_GPIO_PIN );
			GPIO_ResetBits ( LINE4_GPIO_PORT, LINE4_GPIO_PIN );

			//取4列的状态
			if(GPIO_ReadInputDataBit ( LINE1_GPIO_PORT, LINE1_GPIO_PIN ))
			{
   
				while(GPIO_ReadInputDataBit ( LINE1_GPIO_PORT, LINE1_GPIO_PIN )); //等待按键松开,不然出现连续进入中断的错误
				KeyValue = 1;
									
			}
			if(GPIO_ReadInputDataBit ( LINE2_GPIO_PORT, LINE2_GPIO_PIN ))
			{
   
				while(GPIO_ReadInputDataBit ( LINE2_GPIO_PORT, LINE2_GPIO_PIN ));
				KeyValue = 2;
			}
			if(GPIO_ReadInputDataBit ( LINE3_GPIO_PORT, LINE3_GPIO_PIN ))
			{
   
				while(GPIO_ReadInputDataBit ( LINE3_GPIO_PORT, LINE3_GPIO_PIN ));
				KeyValue = 3;
			}
           if(GPIO_ReadInputDataBit (</
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值