找回密码
 立即注册
楼主: ESP8266

最给力的stc32G12K128视频——

[复制链接]

1

主题

30

回帖

71

积分

注册会员

积分
71
 楼主| 发表于 2026-7-29 07:00:21 | 显示全部楼层
第16期74H595驱动2~8位数码管,

截图202607290700183500.jpg
回复

使用道具 举报 送花

1

主题

30

回帖

71

积分

注册会员

积分
71
 楼主| 发表于 2026-7-29 07:00:37 | 显示全部楼层
第17期74H595级联驱动2~8位数码管,
while(1)
{
  SEG_Disp(2,1);     //数码管左边第1位显示数字2
  delayms(1);       //延时1毫秒  
  SEG_Disp(0,2);     //数码管左边第2位显示数字0
  delayms(1);       //延时1毫秒
  SEG_Disp(2,3);     //数码管左边第3位显示数字2
  delayms(1);       //延时1毫秒

  SEG_Disp(3,4);     //数码管左边第4位显示数字3
  delayms(1);       //延时1毫秒

  SEG_Disp(0,5);     //数码管左边第5位显示数字0
  delayms(1);   


第18期 独立按键使用  :需要进行程序消抖

if(KEY1 == 0)     //判断按键KEY1是否按下
{
  delayms(10);    //延时消抖
  if(KEY1 == 0)    //再次判断KEY1是否按下
  {
   LED1 = 0;     //共阳极LED电路,低电平点亮,点亮LED1
  }

第19期 多功能按键,单击、双击、长按 按键使用
一、按键识别的基本原理
按键识别主要依赖以下几个核心概念:
  • 消抖:机械按键在按下和释放时会产生抖动(通常持续5~20ms),需要通过软件延时或定时器采样来消除。
  • 状态检测:检测按键的按下(高→低)和释放(低→高)边沿。
  • 计时:通过定时器记录按键按下的持续时间,区分短按(单击/双击)和长按。
  • 状态机:用有限状态机管理按键的不同阶段,逻辑清晰且易于扩展。

二、状态机设计
我们设计一个包含以下状态的按键状态机:
状态
含义
说明

KEY_IDLE
空闲状态
等待按键按下

KEY_PRESS
按下消抖中
检测到按下,开始消抖计时

KEY_SHORT_WAIT
短按等待
按键已释放,等待是否出现第二次按下(双击)

KEY_LONG
长按确认
按键持续按下超过长按阈值

KEY_DOUBLE_WAIT
双击消抖中
检测到第二次按下,消抖确认
四、关键设计要点说明4.1 时间参数的选择
参数
推荐值
说明

消抖时间
10~20ms
机械按键抖动通常在此范围内

长按阈值
500~1000ms
根据用户体验调整,太短易误触,太长不灵敏

双击间隔
200~400ms
两次按键之间的最大间隔时间
IDLE  │  ├── 检测到按下 ──→ PRESS_DEBOUNCE(消抖10ms)  │                     │  │                     ├── 消抖完成 ──→ PRESS_CONFIRM  │                     │                 │  │                     │                 ├── 持续按下≥1s ──→ LONG_PRESS(触发长按事件)  │                     │                 │                    │  │                     │                 │                    └── 释放 ──→ IDLE  │                     │                 │  │                     │                 └── 释放 ──→ SHORT_WAIT(等待300ms)  │                     │                                │  │                     │                                ├── 再次按下 ──→ DOUBLE_CLICK(触发双击事件)→ IDLE  │                     │                                │  │                     │                                └── 超时 ──→ SINGLE_CLICK(触发单击事件)→ IDLE  │                     │  │                     └── 消抖中释放 ──→ IDLE(视为干扰)  │  └── 未检测到按下 ──→ 保持IDLE注意事项
  • 定时器时基:建议使用硬件定时器产生1ms或5ms的固定时基,不要在主循环中用 delay() 软件延时,否则会影响其他任务的实时性。
  • 消抖策略:上述代码使用了延时消抖(连续采样10ms都稳定才确认),这是最可靠的方式。也可以使用连续多次采样一致的方法(如连续采样3次都相同)。
  • 事件处理:按键事件通过全局变量传递,处理完必须清除,防止重复触发。建议在中断中只设置标志,在主循环中处理具体逻辑。
  • 长按重复触发:上述代码中长按只触发一次。如果需要长按连续触发(如音量连续调节),可以在 KEY_STATE_LONG_PRESS 状态中增加周期性的重复事件触发。
  • 抗干扰:对于强干扰环境,建议增加硬件滤波(RC低通滤波)和软件多次采样




第20期 多功能按键
  此视频主要通过行列扫描的方法进行应,对键盘的按键进行识别用了switch语句case语句switch case 是一种多分支选择结构,它根据一个整型表达式的值,从多个代码块中选择一个执行。相比于使用多个 if...else if 语句,switch case 在代码可读性和执行效率上通常更优,尤其是在判断条件较多且基于同一个变量时。

1. 基本语法结构switch (表达式) {    case 常量表达式1:        // 当 表达式 == 常量表达式1 时执行的代码        break;  // 跳出 switch 结构,可选但通常需要    case 常量表达式2:        // 当 表达式 == 常量表达式2 时执行的代码        break;  // 跳出 switch 结构    // ... 可以有任意多个 case ...    default:        // 当 表达式 的值与所有 case 都不匹配时执行的代码        // 可选,但建议加上以处理意外情况        break;}📋
关键点:
  • 表达式:必须是一个整型(int、char、short、long、enum 枚举类型等)或能隐式转换为整型的表达式。不能是浮点数或字符串。
  • 常量表达式:case 后面的值必须是编译时可确定的常量,不能是变量。例如 case 1:、case 'A':、case (2+3): 都是合法的。
  • break 语句:用于跳出 switch 结构,防止“穿透”(fall-through)。如果省略 break,程序会继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。
  • default 子句:处理所有未匹配的情况,是可选的。通常放在最后,但也可以放在任何位置。

2. 在STC单片机中的典型应用场景
在STC单片机开发中,switch case 常用于:
  • 解析串口命令:根据接收到的命令字节,执行不同操作。
  • 状态机实现:根据当前状态,执行对应的处理逻辑并跳转到下一个状态。
  • 按键扫描与处理:根据按键值,执行不同功能。
  • 菜单选择:根据用户输入的选项,进入不同子菜单。
截图202607290704458718.jpg
截图202607290705353609.jpg
截图202607290713576594.jpg
截图202607290713577704.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 14:24 , Processed in 0.064174 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表