STM32矩阵键盘程序44.docx

上传人:b****4 文档编号:24229266 上传时间:2023-05-25 格式:DOCX 页数:11 大小:15.50KB
下载 相关 举报
STM32矩阵键盘程序44.docx_第1页
第1页 / 共11页
STM32矩阵键盘程序44.docx_第2页
第2页 / 共11页
STM32矩阵键盘程序44.docx_第3页
第3页 / 共11页
STM32矩阵键盘程序44.docx_第4页
第4页 / 共11页
STM32矩阵键盘程序44.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

STM32矩阵键盘程序44.docx

《STM32矩阵键盘程序44.docx》由会员分享,可在线阅读,更多相关《STM32矩阵键盘程序44.docx(11页珍藏版)》请在冰豆网上搜索。

STM32矩阵键盘程序44.docx

STM32矩阵键盘程序44

STM32-矩阵键盘程序4×4

Lt

D

/*--------------------------------------------------------------------------------------*矩阵键盘驱动

*文件:

keyboard.c

*编写人:

LiuHui

*描述:

扫描4x4矩阵键盘输入,并返回键值

*适用范围:

驱动采用ST3.5库编写,适用于STM32F10x系列单片机

*所用引脚:

PA0-PA7

*编写时间:

2021年5月20日

--------------------------------------------------------------------------------------*/

#include"stm32f10x.h"

#include"keyboard.h"

#include"dealy.h"

/*--------------------------------矩阵键盘初始化----------------------------------------*功能:

初始化stm32单片机GPIO//PA0-PA7

*参数传递:

*输入:

*返回值:

--------------------------------------------------------------------------------------*/

voidKeyBoard_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

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

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

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

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

}

/*------------------------------矩阵键盘扫描--------------------------------------------*功能:

扫描矩阵键盘,并返回键值

*参数:

*输入:

*返回:

有键按下返回该键值

*无键按下时那么返回0

--------------------------------------------------------------------------------------*/

u8Read_KeyValue(void)

{

u8KeyValue=0;

if((GPIO_ReadInputData(GPIOA)&0xff)!

=0x0f)

{

Delay_ms(10);

if((GPIO_ReadInputData(GPIOA)&0xff)!

=0x0f)

{

GPIO_SetBits(GPIOA,GPIO_Pin_0);

GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

switch(GPIO_ReadInputData(GPIOA)&0xff)

{

case0x11:

KeyValue=1;break;

case0x21:

KeyValue=5;break;

case0x41:

KeyValue=9;break;

case0x81:

KeyValue=13;break;

}

GPIO_SetBits(GPIOA,GPIO_Pin_1);

GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);

switch(GPIO_ReadInputData(GPIOA)&0xff)

{

case0x12:

KeyValue=2;break;

case0x22:

KeyValue=6;break;

case0x42:

KeyValue=10;break;

case0x82:

KeyValue=14;break;

}

GPIO_SetBits(GPIOA,GPIO_Pin_2);

GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);

switch(GPIO_ReadInputData(GPIOA)&0xff)

{

case0x14:

KeyValue=3;break;

case0x24:

KeyValue=7;break;

case0x44:

KeyValue=11;break;

case0x84:

KeyValue=15;break;

}

GPIO_SetBits(GPIOA,GPIO_Pin_3);

GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);

switch(GPIO_ReadInputData(GPIOA)&0xff)

{

case0x18:

KeyValue=4;break;

case0x28:

KeyValue=8;break;

case0x48:

KeyValue=12;break;

case0x88:

KeyValue=16;break;

}

GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);

GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|

GPIO_Pin_7);

while((GPIO_ReadInputData(GPIOA)&0xff)!

=0x0f);

returnKeyValue;

}

}

return0;

}

/*--------------------------------THEEND--------------------------------------------*/

/*--------------------------------------------------------------------------------------*矩阵键盘驱动

*文件:

keyboard.h

*编写人:

LiuHui

*描述:

扫描4x4矩阵键盘输入,并返回键值

*适用范围:

驱动为ST3.5库编写,适用于STM32F10x系列单片机

*所用引脚:

PA0-PA7

*编写时间:

2013年11月22日

*版本:

1.0

--------------------------------------------------------------------------------------*/

#ifndef__KEYBOARD_H

#define__KEYBOARD_H

voidKeyBoard_Init(void);

u8Read_KeyValue(void);

#endif

/*----------------------------------THEEND------------------------------------------*

 

#include"stm32f10x.h"

voidKeyBoard_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);

GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

}

//³õʼ»¯PA,PB

voidDelay_ms(inttime){

inti=0;

while(time--)

{

i=12000;

while(i--);

}

}

u8Read_KeyValue(void)

{

u8KeyValue=1;

if((GPIO_ReadInputData(GPIOB)&0xff)!

=0x0f)

{

Delay_ms(10);

if((GPIO_ReadInputData(GPIOB)&0xff)!

=0x0f)

{

GPIO_SetBits(GPIOB,GPIO_Pin_3);

GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);

switch(GPIO_ReadInputData(GPIOB)&0xff)

{

case0x11:

KeyValue=7;break;

case0x21:

KeyValue=4;break;

case0x41:

KeyValue=1;break;

case0x81:

KeyValue=0;break;

}

GPIO_SetBits(GPIOB,GPIO_Pin_4);

GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6);

switch(GPIO_ReadInputData(GPIOB)&0xff)

{

case0x12:

KeyValue=8;break;

case0x22:

KeyValue=5;break;

case0x42:

KeyValue=2;break;

case0x82:

KeyValue=0;break;

}

GPIO_SetBits(GPIOB,GPIO_Pin_5);

GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6);

switch(GPIO_ReadInputData(GPIOB)&0xff)

{

case0x14:

KeyValue=9;break;

case0x24:

KeyValue=6;break;

case0x44:

KeyValue=3;break;

case0x84:

KeyValue=0;break;

}

GPIO_SetBits(GPIOB,GPIO_Pin_6);

GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);

switch(GPIO_ReadInputData(GPIOB)&0xff)

{

case0x18:

KeyValue=0;break;

case0x28:

KeyValue=0;break;

case0x48:

KeyValue=0;break;

case0x88:

KeyValue=0;break;

}

GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);

GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

//while((GPIO_ReadInputData(GPIOB)&0xff)!

=0x0f);

returnKeyValue;

}

}

return0;

}

uint16_ttable[]={0xEB,0x28,0xB3,0xBA,0x78,0xDA,0xDB,0xA8,0xFB,0xFA};

intmain(){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

KeyBoard_Init();

intkeyvalue=Read_KeyValue();

GPIO_Write(GPIOA,table[keyvalue]);

/*while

(1){

inti;

for(i=0;i<10;i++){

GPIO_Write(GPIOA,table[i]);

Delay_ms(500);

}

}*/

/*u8keyvalue;

for(inti=0;;i++){

KeyBoard_Init();

keyvalue=Read_KeyValue();

GPIO_Write(GPIOA,table[keyvalue]);

Delay_ms(500);

}*/

}

 

#include"stm32f10x.h"

voidKeyBoard_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);

GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

}

voidDelay_ms(inttime){

inti=0;

while(time--)

{

i=12000;

while(i--);

}

}

u8Read_KeyValue(void)

{

if((GPIO_ReadInputData(GPIOB)&0xff)!

=0x73)

//在这个程序下为什么无论是GPIO_ReadInputData(GPIOB)&0xff)!

=0x73还是GPIO_ReadInputData(GPIOB)&0xff)==0x73都能往下运行,而在屏蔽Delay_ms(10)后那么只能运行一种,是因为这个Delay_ms(10)对if里的判断有影响吗?

{

Delay_ms(10);

GPIO_Write(GPIOA,0x33);

}

return0;

}

intmain(){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

KeyBoard_Init();

Read_KeyValue();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1