在前面学习了LED点灯实验,虽说实现灯工作的状态可以使亮灭,或者流水灯,以及未来的呼吸灯模式。关于呼吸灯模式需要将GPIO口采用定时器引脚,并且配置为PWM功能才能实现呼吸灯模式,这里暂不讲解。控制灯点亮需要将GPIO口配置为输出模式,但是采集按键事件则需将按键配置成输入模式。关于输入模式一般有模拟输入,浮空输入,上拉输入和下拉输入。关于这些输入怎么选择呢。一般模拟输入一般用作模拟量信号的采集,诸如ADC引脚需要配置为模拟输入。浮空输入一般应用在通信的接收端,如I2C和USART的RX。上拉输入和下拉输入一般应用在一般的输入引脚。常见的如时钟信号,按键信号等等。在这里,我们将按键信号配置为外部上拉模式。也就是说,在按键不导通的情况下,按键的连接引脚为高电平,按键导通的情况下,按键连接的引脚为低电平。这里选择PB12配置为按键的输入引脚。我们可以新建两个文件,KEY.C和KEY.H文件其中KEY.C文件中进行GOIO口初始化配置,具体如下: void KEY_GPIO_Config(void) {//定义结构体GPIO_InitTypeDef GPIO_InitStructure;//开启外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//配置GPIO口引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//配置引脚模式为上拉输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//配置引脚速率GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//调用库函数GPIO_Init(GPIOB, &GPIO_InitStructure); } 在KEY.H文件中包含void KEY_GPIO_Config(void)即可。 随后在main函数中需要写入使用按键的函数。一般在使用按键函数时,需要写一个KEY_Scan函数,该函数的作用是一个是进行按键延时消抖(俗称去抖动)和检测按键按下和确认按键按下,一般函数为:uint8_t Key_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)//该函数将返回一个unsigned char型变量,输入参数为GPIO寄存器结构体{ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ); //利用单个位读取函数读取按键的值{ Key_Delay(10000); //延时,消抖 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )//再次确认按键按下{ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);//等待按键释放 returnKEY_ON;} else return KEY_OFF;}elsereturn KEY_OFF;}其中有两个宏定义#define KEY_ON 0和#define KEY_OFF 1可以定义也可以不定义,只要能表述按键按下或者没有按下信息就好。一般在主函数中我们采用if( Key_Scan(GPIOB,GPIO_Pin_12) == KEY_ON )来判断按键是否按下。 在学习这篇中,我们主要是了解按键怎么判断和怎么去抖,尤其是是要关注KEY_SCAN函数。
2019-08-19 10:54
整个系统是否稳定可靠。复位电路与单片机的RESET/NRST引脚相连,拿STM32系列单片机举例,当系统正常工作时,如果RESET引脚电压低于某一阈值,则单片机进入复位
2021-10-13 14:14
复位就是让单片机从初始化状态开始重新运行,即程序从头开始执行。复位电路设计的好坏,直接影响整个系统是否稳定可靠。复位电路与单片机的RESET/NRST引脚相连,拿STM32系列单片机
2023-05-25 14:25
如果单片机不支持串口空闲中断和DMA,可以参考之前写的,串口只用接收中断,完成不定长的分包。这里以stm32L4的单片机举例,思路可拓展到GD32等支持DMA和串口空闲中断的单
2022-02-22 07:32
章汇编语言程序设计,第5章定时/计数器,第6章串行接口,第7章中断系统,第8章MCS51单片机的系统扩展,第9章MCS-51单片机的接口技术,第10章MCS-51单片机应用举例
2019-12-26 16:00
章汇编语言程序设计,第5章定时/计数器,第6章串行接口,第7章中断系统,第8章MCS-5单片机的系统扩展,第9章MCS-5单片机的接口技术,第10章MCS-51单片机应用举例
2020-06-24 08:00
本文档的主要内容详细介绍的是51单片机教程之51单片机的串行口应用举例资料说明主要内容包括了:1 计算机串行通信基础,2 80C51的串行口,3 单片机串行口应用
2018-12-12 17:27
整个系统是否稳定可靠。复位电路与单片机的RESET/NRST引脚相连,拿STM32系列单片机举例,当系统正常工作时,如果RESET引脚电压低于某一阈值,则单片机进入复位
2021-10-28 09:27
单片机串行口应用举例: 在计算机分布式测控系统中,经常要利用串行通信方式进行数据传输。80C51单片机的串行口为计算机间的通信提供了极为便利的条
2009-12-03 22:54
定义格式#ifndef _LED_H_#define _LED_H_ //跟在后面的_LED_H_只是一个文件名//内容#endif用51单片机举例注意在头文件中定义自己习惯的简称时 例如 ***it IN1=P1^1;在之后的程序中 得要 #include#in
2021-11-30 07:36