STM32按键实验学习笔记

一、按键扫描的基本原理

 

按键信号是如何识别的?

一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。

没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平。通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。

为什么去抖动?

按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号 , 因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。

如何去抖动?

首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。

二、GPIO输入电平读取HAL库函数

GPIO_PinState  HAL_GPIO_ReadPin( GPIO_TypeDef* GPIOx,  uint16_t GPIO_Pin);

参数1:GPIOx,端口号,如:GPIOB,GPIOF。
参数2:GPIO_Pin,引脚号,如:GPIO_PIN_9,GPIO_PIN_12。
返回值:GPIO_PinState,引脚的电平状态。
应用举例:判断PC13引脚的输入信号,若为高电平,则将PB9引脚控制的LED灯的开关状态切换。    
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET)  
{              
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);      
}

 

参考网址:https://www.xmf393.com/2020/02/16/2020021603/

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在51单片机中编写电源开关程序的实现方法如下: 首先,需要连接合适的硬件电路来控制电源的开关,通常可以使用一个普通的NPN型晶体管来实现。将NPN型晶体管的发射极连接到GND(地),基极连接到51单片机的一个IO口,集电极接入电源正极。此时,通过控制51单片机的对应IO口的电平状态,可以控制晶体管的开关状态,从而控制电源的开关。 在编写程序时,可以使用C语言进行编写。首先,我们需要设置对应IO口的输入/输出模式,将其设置为输出模式。然后,可以使用一个循环来控制电源的开关状态。在循环中,通过对IO口的电平进行设置,可以使得晶体管处于导通或者截止状态,从而实现电源的开关。 下面是一个简单的示例程序: ```c #include <reg51.h> sbit powerSwitch = P1^0; // 假设电源开关连接到P1口的第0位 // 设置IO口为输出模式 void init() { powerSwitch = 0; // 初始状态关闭电源 } // 控制电源开关函数 void togglePower() { powerSwitch = !powerSwitch; // 取反电源开关状态 } // 主函数 void main() { init(); // 初始化 while (1) { togglePower(); // 切换电源开关状态 delay(1000); // 延时1s } } ``` 以上是一个简单的51单片机电源开关程序的实现示例。通过循环切换电源开关状态,并在每次切换后延时1秒,可以实现电源的周期性开关。根据实际需求,可以进行适当修改和扩展。 ### 回答2: 51单片机是一种常用的小型单片机,其电源开关程序可以使用C语言编写。以下是一个简单的51单片机电源开关程序: #include <reg51.h> sbit PWR_SWITCH = P2^0; //定义电源开关控制IO口 void main() { PWR_SWITCH = 1; //默认将电源开关关闭 while(1) { if(P2^1 == 0) { //当P2^1电平为低时,表示需要打开电源开关 PWR_SWITCH = 0; //将电源开关打开 } else { PWR_SWITCH = 1; //将电源开关关闭 } } } 在这个程序中,我们使用P2口的第0位来控制电源开关的状态。通过检测P2口的第1位的电平状态,如果为低电平,则表示需要打开电源开关,此时将PWR_SWITCH置为0,即可打开电源开关;如果为高电平,则表示需要关闭电源开关,此时将PWR_SWITCH置为1,即可关闭电源开关。程序将会一直循环执行,不断检测电源开关的状态并进行相应的操作。 当然,此程序仅为示例,实际情况可能需要根据具体的硬件和需求进行适配和优化。 ### 回答3: 51单片机的电源开关程序是通过控制IO口的高低电平来控制外部电源的开关状态。在C语言中,可以使用相应的函数和寄存器来实现电源开关的控制。 首先,需要定义一个IO口作为控制电源开关的引脚,并将其设置为输出模式。例如,可以将P1口的第0位设置为输出引脚: ```c sbit PowerSwitch = P1^0; ``` 然后,在主函数或其他需要控制电源开关的地方,可以使用以下代码来控制电源的开关状态: ```c void PowerOn() { PowerSwitch = 1; // 设置引脚为高电平,打开电源 } void PowerOff() { PowerSwitch = 0; // 设置引脚为低电平,关闭电源 } ``` 使用PowerOn函数可以在需要时打开电源,使用PowerOff函数可以关闭电源。控制开关状态可以根据实际需求来设计相应的逻辑。 例如,可以通过按下一个按键来打开电源,再次按下则关闭电源。可以在主循环中检测按键的状态,然后调用PowerOn或PowerOff函数来切换电源开关的状态: ```c void main() { while(1) { if(ButtonPressed()) // 检测按键状态 { if(PowerSwitch == 0) { PowerOn(); // 关闭状态,打开电源 } else { PowerOff(); // 打开状态,关闭电源 } Delay(); // 延时一段时间,避免按键的抖动 } } } ``` 以上就是一个简单的51单片机电源开关程序的实现。根据实际需求,可以进行相应的扩展和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值