查看: 1698|回复: 0

[经验] STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

[复制链接]
  • TA的每日心情
    开心
    2020-1-8 09:17
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-4-14 11:04:54 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 liujieshui 于 2020-4-14 11:01 编辑

    软件开发第四讲 - 按键检测(状态机)

    二、学习板获取方式
      方法1:自己设计PCB,自行打板焊接;
      方法2:用硬件家园设计的PCB,自行打板焊接;
      方法3:向硬件家园购买。

    STC15实战项目 - 样机图.PNG

    三、程序功能
    1、单击按键2,运行指示灯状态翻转;
    2、长按按键2超过2s,运行指示灯闪一下;
    3、双击按键2,运行指示灯闪三下;

    四、硬件部分

    1 - 按键2.PNG

    运行指示灯 -> P34;
      按键2      -> P33
      说明:设计了硬件消抖,提高抗干扰能力。

    四、  有限状态机
    有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。
       单片机C语言的状态机编程,是利用条件选择语句(switch -- case)切换状态,通过函数内部指令改变状态机状态,让程序按设定的顺序执行。


    五、按键状态机示意图
    1、按键动作示意图

    2 - 按键动作示意图.PNG

    2、状态图

    3 - 按键状态图.PNG

    编程说明
    1、文件结构如下:

    4 - 文件结构.PNG

    main.c  -> 主函数文件,包含main函数等;
         Public.c -> 公共函数文件,包含Delay延时函数等;
         Sys_init -> 系统初始化函数,包含GPIO初始化函数等;
         LED.c    -> LED外设函数,包含LED打开、关闭函数等;
    Timer0.c -> 定时器函数,包含定时器初始化,中断函数等;
    KEY1.c   -> 按键1函数,包含按键检测,中断函数等;
    KEY2.c   -> 按键2函数,包含按键状态机检测函数等;
    2、主函数如下:
        5 - 主函数.PNG
      通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO的初始化,接着进入主循环,进行按键2状态机检测。
    3、状态机参数定义
      
        6 - 按键2状态机参数.PNG
      利用枚举定义状态机的四个状态;
      利用结构体定义状态机的其它参数。
    4、按键检测程序思路
       版权需要,这部分内容,请在微信公众号阅读。
    5、源代码
    版权需要,这部分内容,请在微信公众号阅读。
    说明:公众号文章附了源代码下载链接。
          
       七直播说明
      固定周六21:00在B站进行单片机实战教学直播,搜索硬件家园。

    实战项目计划:
    1、STC15单片机实战项目;           正在进行
    2、STM32+GPRS 物联网实战项目;
    3、基于STM8的太阳能对锂电池充电实战项目;
    4、

    原文出处:硬件家园(微信公众号 - yjjy168168168)刘杰编辑


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 23:02 , Processed in 0.127299 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.