基于STM32任意键薄膜键盘代码


基于STM32任意键薄膜键盘代码


对于大多数人来说都写过51的按键扫描,但是对于32来说端口配置比较麻烦,对于按键扫描 *要配置相应的IO口模式,每种模式的特性是不一样的,可以通过按键的读写操作,对于各种模式有个深入的了解。
对薄膜键盘来说通过八个IO口进行扫描确认是哪个按键按下,然而一般的方式是采用行和列高低电平的反差来扫描判断的,那么我们对32 的IO口要进行写和读操作,学过32的人都知道,IO口的每一种模式都可读可写,但是对于外电路来说,不是每种模式都可以用来按键扫描。

GPIO_Mode_AIN = 0x0,
模拟输入,应用ADC 模拟输入
GPIO_Mode_IN_FLOATING = 0x04,
浮空输入,在悬空状态电平未知,一般在高低电平判决临界处,
GPIO_Mode_IPD = 0x28,
IO口内部下拉电阻输入
GPIO_Mode_IPU = 0x48,
IO口内部下拉电阻输入
GPIO_Mode_Out_OD = 0x14,
开漏输出,IO输出0接地,输出1悬空
GPIO_Mode_Out_PP = 0x10,
推挽输出 IO输出0接地,输出1接vcc
GPIO_Mode_AF_OD = 0x1C,
复用开漏输出,对于这个实在一些内部外设使用时要使用的,作为小白的我使用还是不太了解具体使用情况,只是知道大概在使用一些外设时需要使用。
GPIO_Mode_AF_PP = 0x18
复用推挽

其实对于上面的这么多模式,对于我们的中心按键扫描,可以配置很懂种模式实现,关键看是否稳定。我选用的扫描方式是以 行/列 输出为推挽输出,而 列/行 以
下拉输入为输入。
一、行/列 四个引脚 输出为推挽输出,输出比较稳定,高低电平分明,不易受外电路的干扰,
二、列/行 以下拉输入为输入,IO口电平状态默认是下拉的 ,及低电平,当外界给IO为高电平时,IO口就会被拉高,读取IO状态为高电平,很好的起到了读取外部IO的作用

之所以使用这种类型的IO配置,是因为它比较稳定,我也是小白,不太会写文字,第一次试着写的,下面粘贴代码吧

主函数

// An highlighted block

#include "stm32f10x.h"
#include "STK_H_Usart.h"
#include "bsp_led.h"
#include "stdio.h"
#include "STK_H_BMkey.h"
#include "bsp_SysTick.h"


int main(void)
{
   	
	uint8_t mmp=0;
	//串口初始化
	usart_config();
	//LED 初始化
	LED_GPIO_Config();	
	//按键扫描初始化
  key_GPIO_Config(1);	
	//系统定时器初始化
	SysTick_Init();	
  printf("今天是个好天气"); 

  while(1)
	{
   	
    mmp=key_seek();
		SysTick_Delay_Ms(500);
		printf("my world is %d\n",mmp);

	}	
}


扫描函数 .H文件

重定义了一些IO口名,便于更改引脚
这个文件就只是完成了这个时期,有点呆滞,

#ifndef  __STK_H_BMKEY_H__
#define  __STK_H_BMKEY_H__

#include "stm32f10x.h"


//第一组  行
//PC  6
#define KEY1_1_GPIO_PORT    	GPIOA		              
#define KEY1_1_GPIO_CLK 	    RCC_APB2Periph_GPIOA	 
#define KEY1_1_GPIO_PIN		GPIO_Pin_4

#define   X1_0    GPIO_ResetBits(KEY1_1_GPIO_PORT, KEY1_1_GPIO_PIN);
#define   X1_1    GPIO_SetBits(KEY1_1_GPIO_PORT, KEY1_1_GPIO_PIN);


//PC  8
#define KEY1_2_GPIO_PORT    	GPIOA		            
#define KEY1_2_GPIO_CLK 	    RCC_APB2Periph_GPIOA	 
#define KEY1_2_GPIO_PIN		GPIO_Pin_5			 

#define   X2_0    GPIO_ResetBits(KEY1_2_GPIO_PORT, KEY1_2_GPIO_PIN);
#define   X2_1    GPIO_SetBits(KEY1_2_GPIO_PORT, KEY1_2_GPIO_PIN);


//PA  8
#define KEY1_3_GPIO_PORT    	GPIOA			              
#define KEY1_3_GPIO_CLK 	    RCC_APB2Periph_GPIOA
#define KEY1_3_GPIO_PIN		GPIO_Pin_6	

#define   
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值