利用AT89C52单片机8个独立(非自锁)按键单控8个LED灯亮灭

利用AT89C52单片机8个独立(非自锁)按键单控8个LED灯亮灭


  • 代码很简短,关键在于理解。

版本一:利用延时函数消抖

  • 实现的功能是:点动控制开关,按一次亮,再按一次灭,长按下去就是闪烁。

先上proteus仿真图:

在这里插入图片描述

程序代码

#include <reg52.h>

void delay(unsigned int n)
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一种基于STM32的四个独立按键扫描的实现方法: 1. 首先,将需要扫描的四个按键引脚连接到STM32的GPIO上。 2. 在初始化时,将相应的GPIO配置为输入模式,并设置上拉或下拉电阻。 3. 在程序中,通过读取GPIO的状态来检测按键是否被按下。可以使用HAL库提供的函数来读取GPIO的状态,如HAL_GPIO_ReadPin()。 4. 为了避免按键的抖动,需要进行软件消抖处理。一种简单的方法是在检测到按键状态改变时,延时一段时间再进行状态读取,如果状态仍然改变,则认为按键确实被按下。可以使用HAL库提供的延时函数来实现延时。 5. 可以在主循环中不断进行按键扫描,如果检测到按键被按下,则执行相应的操作。 下面是一个简单的代码示例,仅供参考: ```c #include "stm32f4xx_hal.h" #define KEY1_GPIO_PIN GPIO_PIN_0 #define KEY1_GPIO_PORT GPIOA #define KEY2_GPIO_PIN GPIO_PIN_1 #define KEY2_GPIO_PORT GPIOA #define KEY3_GPIO_PIN GPIO_PIN_2 #define KEY3_GPIO_PORT GPIOA #define KEY4_GPIO_PIN GPIO_PIN_3 #define KEY4_GPIO_PORT GPIOA int main(void) { HAL_Init(); // 配置四个按键引脚为输入模式,上拉电阻 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = KEY1_GPIO_PIN | KEY2_GPIO_PIN | KEY3_GPIO_PIN | KEY4_GPIO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct); while (1) { // 延时消抖 HAL_Delay(10); if (HAL_GPIO_ReadPin(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == GPIO_PIN_RESET) { // KEY1被按下 // 执行相应操作 } if (HAL_GPIO_ReadPin(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == GPIO_PIN_RESET) { // KEY2被按下 // 执行相应操作 } if (HAL_GPIO_ReadPin(KEY3_GPIO_PORT, KEY3_GPIO_PIN) == GPIO_PIN_RESET) { // KEY3被按下 // 执行相应操作 } if (HAL_GPIO_ReadPin(KEY4_GPIO_PORT, KEY4_GPIO_PIN) == GPIO_PIN_RESET) { // KEY4被按下 // 执行相应操作 } } } ``` 希望上述内容能够对您有所帮助!如果您还有其他问题,欢迎随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值