教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

stm32控制4乘4矩阵键盘程序带松手检测

来源:网络收集 时间:2026-09-06
导读: stm32控制4*4矩阵键盘程序,带松手检测,亲试,可行,如有改正之处,请批评指正,谢谢。。 #include stm32f10x.h #include delay.h /*本文件的函数,主要实现矩阵键盘的功能。矩阵键盘使用PA0到PA7引脚,其中,PA0到PA3固定为推挽输出,PA4到PA7固定为 下拉输入。

stm32控制4*4矩阵键盘程序,带松手检测,亲试,可行,如有改正之处,请批评指正,谢谢。。

#include "stm32f10x.h"

#include "delay.h"

/*本文件的函数,主要实现矩阵键盘的功能。矩阵键盘使用PA0到PA7引脚,其中,PA0到PA3固定为推挽输出,PA4到PA7固定为

下拉输入。即,无键按下时,对应PA4到PA7为0,有键按下时,PA4到PA7中,对应的引脚为高。

此程序有一点要注意:要用到的IO口,必须是PX0-PX7,,不能是其他连续的数字。。如果非要改。。如:已经没有连续的0-7的IO口,需要在几个地方修改,请注意!!

此程序带有松手检测。。。。*/

void InitKey(void) //初始化矩阵键盘要使用的GPIO口。

{

GPIO_InitTypeDef GPIOStru;

GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP; //定义PA0到PA3为推挽输出。 GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;

GPIOStru.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_Init(GPIOA,&GPIOStru);

GPIOStru.GPIO_Mode = GPIO_Mode_IPD; //定义PA4到PA7为下拉输入。 GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;

GPIOStru.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

//因为上面定义引脚为输出时,已经打开整个GPIOA的时钟了,所以此处不再需要函数RCC_APB2PeriphClockCmd()来打开时钟了。

GPIO_Init(GPIOA,&GPIOStru);

}

int key(void) //实现矩阵键盘。返回值为,各按键的键值,此键值由用户自己定义。 {

int KeyVal=0; //keyVal为最后返回的键值。

u16 WriteVal=0; //WriteVal为要写给PA口的数据。

GPIO_Write(GPIOA,(GPIOA->ODR & 0xfff0 | 0xf)); //先让PA0到PA3全部输出高。

if((GPIOA->IDR & 0x00f0)==0x0000) //如果,PA4到PA7全为0,则,没有键按下。此时,返回值为-1.

return -1;

else

{

delay_ms(5); //延时5ms去抖动。

stm32控制4*4矩阵键盘程序,带松手检测,亲试,可行,如有改正之处,请批评指正,谢谢。。

if((GPIOA->IDR & 0x00f0)==0x0000) //如果,延时5ms后,PA4到PA7又全为0,则,刚才引脚的电位变化是抖动产生的.

return -1;

}

GPIO_Write(GPIOA,(GPIOA->ODR & 0xfff0 | 0x1)); //让PA3到PA0输出二进制的0001. switch(GPIOA->IDR & 0x00f0) //对PA4到PA7的值进行判断,以输出不同的键值。

{

case 0x0010: KeyVal=15; break;

case 0x0020: KeyVal=11; break;

case 0x0040: KeyVal=7; break;

case 0x0080: KeyVal=3; break;

}

GPIO_Write(GPIOA,(GPIOA->ODR & 0xfff0 | 0x2)); //让PA3到PA0输出二进制的0010. switch(GPIOA->IDR & 0x00f0) //对PA4到PA7的值进行判断,以输出不同的键值。

{

case 0x0010: KeyVal=14; break;

case 0x0020: KeyVal=10; break;

case 0x0040: KeyVal=6; break;

case 0x0080: KeyVal=2; break;

}

GPIO_Write(GPIOA,(GPIOA->ODR & 0xfff0 | 0x4)); //让PA3到PA0输出二进制的0100. switch(GPIOA->IDR & 0x00f0) //对PA4到PA7的值进行判断,以输出不同的键值。

{

case 0x0010: KeyVal=13; break;

case 0x0020: KeyVal=9; break;

case 0x0040: KeyVal=5; break;

case 0x0080: KeyVal=1; break;

}

GPIO_Write(GPIOA,(GPIOA->ODR & 0xfff0 | 0x8)); //让PA3到PA0输出二进制的1000. switch(GPIOA->IDR & 0x00f0) //对PA4到PA7的值进行判断,以输出不同的键值。

{

case 0x0010: KeyVal=12; break;

case 0x0020: KeyVal=8; break;

case 0x0040: KeyVal=4; break;

case 0x0080: KeyVal=0; break;

}

stm32控制4*4矩阵键盘程序,带松手检测,亲试,可行,如有改正之处,请批评指正,谢谢。。

} return KeyVal;

…… 此处隐藏:441字,全部文档内容请下载后查看。喜欢就下载吧 ……
stm32控制4乘4矩阵键盘程序带松手检测.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/110147.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)