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

2019-09-01 23:17

#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


STM32中反转法矩阵短按键的应用 测试通过.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018届呼和浩特市高三年级第一次质量普查调研考试理科综合能力测

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: