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

STM32中反转法矩阵短按键的应用 测试通过

来源:网络收集 时间:2026-08-14
导读: #include\//反转法测矩阵按键 void Delay(__IO uint32_t t); void RCC_Config(void); void GPIO_Config(void); uint32_t Key_Scan(void); void GPIO_RConfig(void); void LED_Config(void); void Delay_ms(__IO uint32_t time); void Time_Delay(void); void

#include\//反转法测矩阵按键

void Delay(__IO uint32_t t); void RCC_Config(void); void GPIO_Config(void); uint32_t Key_Scan(void); void GPIO_RConfig(void); void LED_Config(void);

void Delay_ms(__IO uint32_t time); void Time_Delay(void);

void GPIO_SetBits_Row(void); void GPIO_ResetBits_Row(void); void GPIO_SetBits_Col(void); void GPIO_ResetBits_Col(void);

GPIO_InitTypeDef GPIO_InitStructure; static __IO uint32_t TimingDelay=0;

uint32_t num=0; uint8_t j,i; //PA6 PA7 PB7 PA5 uint8_t key[4][4]={0x01,0x05,0x09,0x0d, //PE15 0x02,0x06,0x0a,0x0e, //PE14 0x03,0x07,0x0b,0x0f, //PE13 0x04,0x08,0x0c,0x10 }; //PE11

struct IO_Port{

GPIO_TypeDef *GPIO_X; unsigned short GPIO_Pin; };

static struct IO_Port key_row[4]={

{GPIOE,GPIO_Pin_15},{GPIOE,GPIO_Pin_14}, {GPIOE,GPIO_Pin_13},{GPIOE,GPIO_Pin_11} };

static struct IO_Port key_col[4]={

{GPIOA,GPIO_Pin_6},{GPIOA,GPIO_Pin_7},

1

{GPIOB,GPIO_Pin_7},{GPIOA,GPIO_Pin_5} };

int main(void) {

uint32_t key=0; RCC_Config(); LED_Config();

SysTick_Config(72000);

while(1) { key=Key_Scan(); switch(key) { case 0x01:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x02:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x03:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x04:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x05:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break;

2

case 0x06:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x07:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x08:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x09:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0a:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0b:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0c:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0d:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0e:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));

3

break; case 0x0f:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x10:

GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; default: break; }

} }

void GPIO_SetBits_Row(void) {

uint8_t i;

for(i=0;i<4;i++) { GPIO_SetBits(key_row[i].GPIO_X,key_row[i].GPIO_Pin); } }

void GPIO_ResetBits_Row(void) {

uint8_t i;

for(i=0;i<4;i++) { GPIO_ResetBits(key_row[i].GPIO_X,key_row[i].GPIO_Pin); } }

void GPIO_SetBits_Col(void) {

uint8_t i;

4

for(i=0;i<4;i++) { GPIO_SetBits(key_col[i].GPIO_X,key_col[i].GPIO_Pin); } }

void GPIO_ResetBits_Col(void) {

uint8_t i; for(i=0;i<4;i++) { GPIO_ResetBits(key_col[i].GPIO_X,key_col[i].GPIO_Pin); } }

//反转法按键 先让行输出低电平 列输出高电平 然后读列的状态 如果为低电平

//反转按键 即列输出低电平 行输出高电平 依次检测行的输出 如果为低电平 则相应按键按下

uint32_t Key_Scan(void) {

num=0; GPIO_Config(); GPIO_ResetBits_Row(); GPIO_SetBits_Col(); for(i=0;i<4;i++) { if(GPIO_ReadInputDataBit(key_col[i].GPIO_X,key_col[i].GPIO_Pin)==0) { Delay(90000); if(GPIO_ReadInputDataBit(key_col[i].GPIO_X,key_col[i].GPIO_Pin)==0); GPIO_RConfig(); GPIO_ResetBits_Col(); GPIO_SetBits_Row(); for(j=0;j<4;j++) { if(GPIO_ReadInputDataBit(key_row[j].GPIO_X,key_row[j].GPIO_Pin)==0) {

while(GPIO_ReadInputDataBit(key_row[j].GPIO_X,key_row[j].GPIO_Pin)==0);

5

…… 此处隐藏:1248字,全部文档内容请下载后查看。喜欢就下载吧 ……
STM32中反转法矩阵短按键的应用 测试通过.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/563875.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)