基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!_百度文 ...

基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay
函数!
经本⼈刻苦钻研,将51单⽚机上⽤的矩阵键盘扫描程序移植到了stm32上,同时也做了很⼤的改进,最⼤的改进莫过于消抖这块了。以前的消抖总是采⽤delay延时约10到20ms的时间,但这样会导致MCU在延时⾥空跑⽽造成主程序被搁置,显然,程序的实时性⼤打折扣,今天便在此让新⼿们别delay,从此⾛进⼀个崭新的扫描消抖世界!(本⼈也是新⼿——爱钻研的新⼿哈!^_^)
//stm32矩阵键盘翻转扫描法(PB⼝的低8位)
//将此矩阵键盘扫描程序放在定时器中断服务程序⾥
//每10ms进⼊⼀次中断服务程序
s8 scan_MatrixKey(void)
{
#define PORT GPIOB->IDR
u8 column;//列
u8 row;//⾏
u8 tmp;//临时变量
s8 MatrixKey_value = 20;//初始值不能为0~15
static u8 key_count = 0;//按键被中断扫描的次数
///IO⼝的配置/
//低8位为推挽输出
GPIOB->CRL &= 0X00000000;
GPIOB->CRL |= 0X33333333;
//初值:低4位为低,次低4位为⾼
GPIOB->ODR &= 0XFF00;工程车辆
GPIOB->ODR |= 0X00F0;
//次低4位为上拉输⼊
GPIOB->CRL &= 0X0000FFFF;
GPIOB->CRL |= 0X88880000;
tmp = PORT;//必须要
if (tmp != 0XF0)//如果有键按下
{
//防⽌长按时,持续⾃增导致变量溢出
if (key_count <= 2)
{
key_count++;
}
}
//若产⽣抖动按键被抬起则计数清0
else
{
key_count = 0;
}
//若按键连续2次扫描均处于按下状态
//则认为按键确实被按下了
if (key_count == 2)
{
column = tmp & 0X00F0;//获取列号
///IO⼝的配置/
重复数据删除
//低8位为推挽输出
GPIOB->CRL &= 0X00000000;
GPIOB->CRL &= 0X00000000;
GPIOB->CRL |= 0X33333333;
//翻转:低4位为⾼,次低4位为低
GPIOB->ODR &= 0XFF00;
GPIOB->ODR |= 0X000F;//低4位为⾼,次低4位为低
//低4位为上拉输⼊
玻璃纤维滤筒GPIOB->CRL &= 0XFFFF0000;
转子气体流量计GPIOB->CRL |= 0X00008888;正弦波发生器
row = PORT & 0X000F;//获取⾏号
switch (column | row)//column|row为按键被按下对应端⼝的编码
{
//按键对应的码表(可以根据需求调整欲返回的键值)
case 0XEE: MatrixKey_value = 12; break;
case 0XDE: MatrixKey_value = 10; break;
case 0XBE: MatrixKey_value = 11; break;
case 0X7E: MatrixKey_value = 0; break;
case 0XED: MatrixKey_value = 13; break;
机房新风节能系统
case 0XDD: MatrixKey_value = 3; break;
case 0XBD: MatrixKey_value = 2; break;
case 0X7D: MatrixKey_value = 1; break;
case 0XEB: MatrixKey_value = 14; break;
case 0XDB: MatrixKey_value = 6; break;
case 0XBB: MatrixKey_value = 5; break;
case 0X7B: MatrixKey_value = 4; break;
case 0XE7: MatrixKey_value = 15; break;
case 0XD7: MatrixKey_value = 9; break;
case 0XB7: MatrixKey_value = 8; break;
case 0X77: MatrixKey_value = 7; break;
default:  break;
}
}
//若没有按键被按下(已松⼿)则扫描次数清0
//⽅便下次按下扫描计数
if ((PORT & 0X00FF) == 0x00F0)
{
key_count = 0;
}
return MatrixKey_value;
}
⼤家在使⽤过程中若有什么疑问,请给本⼈留⾔回复以加强交流,互相学习,共同进步!~下⼀篇stm32矩阵键盘扫描定时器消抖代码链接为:

本文发布于:2024-09-21 17:34:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/329899.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:扫描   按键   键盘   矩阵   消抖   程序   中断
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议