单片机定时器一1ms12MHz_STC15单片机实战项目软件开发第四讲 按键检测(状态机)...

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

一、工具链接

1、Keil c51 UV4

     https://yunpan.360.cn/surl_yrIfYYmeRFk

   2、STC-ISP下载软件

     https://yunpan.360.cn/surl_yxH4CuUUvI3

     说明:复制网址到浏览器,即可下载

 二、学习板获取方式

方法1:自己设计PCB,自行打板焊接;

  方法2:用群主设计的PCB,自行打板焊接;

  方法3:向群主购买,淘宝链接:

https://item.taobao.com/item.htm?ft=t&id=612010801228

2c63433595d0051719846f3c2eb8d95c.png

 三、程序功能

1、单击按键2,运行指示灯状态翻转;

2、长按按键2超过2s,运行指示灯闪一下;

3、双击按键2,运行指示灯闪三下;

 四、硬件部分

3976b1613037ea2dba2609230e3dd078.png

  运行指示灯 -> P34;

  按键2      -> P33

  说明:设计了硬件消抖,提高抗干扰能力。

四、  有限状态机

有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。

   单片机C语言的状态机编程,是利用条件选择语句(switch -- case)切换状态,通过函数内部指令改变状态机状态,让程序按设定的顺序执行。

五、按键状态机示意图

1、按键动作示意图

550eeaf81868e925e1cfbf5827584a87.png

2、状态图

9499eda4eea3d145c066dbc6f634bd21.png

编程说明

1、文件结构如下:

4e82137f28983d652b8adace8bc45018.png

     main.c  -> 主函数文件,包含main函数等;

     Public.c -> 公共函数文件,包含Delay延时函数等;

     Sys_init -> 系统初始化函数,包含GPIO初始化函数等;

     LED.c    -> LED外设函数,包含LED打开、关闭函数等;

Timer0.c -> 定时器函数,包含定时器初始化,中断函数等;

KEY1.c   -> 按键1函数,包含按键检测,中断函数等;

KEY2.c   -> 按键2函数,包含按键状态机检测函数等;

2、主函数如下:

038cb7008e8060c1dd565f232ad2ff0a.png

  通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO的初始化,接着进入主循环,进行按键2状态机检测。

 3、状态机参数定义

6a5fbac0c0690e7bc0e92f7052c9da43.png

  利用枚举定义状态机的四个状态;

  利用结构体定义状态机的其它参数。

4、按键检测程序思路

 ① 单击与双击

  按键第一次检测到单击时,将单击状态缓存,同时启动双击定时器,超过一定时间,比如200ms,认定按键为单击;如果没超过200ms,又检测到了单击,认定按键为双击。

  ② 长按

   检测到按键按下后,启动长按定时器,过了一段时间,比如2s,按键依然为按下状态 ,认定按键为长按。

5、源代码

360云盘链接:

   https://yunpan.360.cn/surl_yxtxeXzhG8S

说明:复制网址到浏览器,即可下载

、直播

     4月4号,21:00,在bilibili平台进行直播。有时间的朋友,可以看直播,没时间的朋友,可以看回播。

  直播地址: https://live.bilibili.com/21988510

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

4、

单片机产品实战项目教学,开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号。

decd6ba480bb811ed3a5d177695e5f98.png

扫描二维码

获取更多精彩

硬件家园

6bf16f19248362c8744fd648bb11b178.png 80f564e8386b42e917b6fe78354cc5de.png

9c6591cc7d054503f1fab965f8a1c41e.png

讲师:刘杰,软硬件工程师,10多年单片机产品开发经验。长期进行单片机实战项目教学。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值