51单片机 stc-B板学习——关于数码管和流水灯显示实现原理

先来看看数码管和发光二极管硬件原理图

这个项目要实现两个功能:使LED亮且不和数码管同时亮。

从这个原理图出发,要想实现这两个功能,我们可以得出以下分析:

  • 要让LED灯亮,首先需要将P0的8个引脚以及P2.3设置成推挽输出(工作模式)
  • 数码管和LED灯不同时亮。通过E3实现:E3 既是反相器输出信号也是数码管的使能信号,当E3=0时,LED灯(共阴极)亮,数码管位选信号的使能信号为0,数码管不亮;反之,数码管亮而LED不亮。

控制它们亮了还不够,我们还需要控制合适的频率,这个时候就需要用到我们的定时器了。

这个定时器经历了两次分频的过程:

第一次:每1ms flag++,加至8(扫描速度够快),控制位选,视觉错觉感觉每一位都亮,也即是实现数码管每一位都显示数字的效果,而具体的显示的数字是多少,在第二次分频中实现

第二次:count++,加至100,数字更新一次,让每一位分开显示(视觉),如果速度很快,眼睛看到的效果是很多个数字重叠显示在一位(无法分辨)

另外还需要用到的一个部分就是按键消抖的过程。

首先,按键消抖分为硬件消抖和软件消抖

 

 

 

下面是硬件消抖的电路图部分。

当按键未按下时,输出为 1;当键按下时,输出为 0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开 B),只要按键不返回原始状态 A,双稳态电路的状态不改变,输出保持为 0,不会产生抖动的波形。

下面我们主要来说一下软件消抖。

软件消抖有两种方式实现。

一种是使用延时的方式。也就是比如在某一时刻监测到按键按下,延时一段时间,如果发现这个按键仍然处于按下状态,则说明按键是真的按下了,可以继续进行按下这个按键后的继续操作。

另外一种是采用检测多次的方式。假设检测到按下的总次数是 100 次,每检测到一次减一。Key1_count 初始值
0x80+NMAX_KEY/3*2,经 Key1_count--后,小于 0x80 说明次数大于 2/3,按键按下。

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stcb学习课程设计是指在一次创新大作业中,学生选择使用STC-B学习来实现一个“打地鼠游戏”项目。这个项目的设计主要包括以下几个方面的内容: 1. 选题概述:学生选择了“打地鼠游戏”作为项目的选题,认为这个题目较为新颖而且具有娱乐性,可以激发学习热情,并锻炼单片机编程能力。 2. 实现功能:项目的具体实现功能包括以下内容: - 程序运行:将代码生成的hex文件通过stc-isp下载到STC-B学习上,并按下按键k2来启动程序运行。 - 地鼠显示:在按下按键延迟1s后,数码管开始显示“地鼠”图样,图样的大小为数码管的两位显示位,形如“凸”字。考虑到按键k1、k2、k3只有三个,所以八位数码管左中右位置三个“地鼠”随机出现。 - 地鼠击中:按下对应位置的按键(k3左k2中k1右)可以“击中”地鼠。当地鼠全部出现完毕后,数码管显示击中个数,并发出蜂鸣器声音,以及显示图案提示挑战成功或结束等待下一次开始。 3. 实现原理:项目的实现原理主要包括以下几个部分: - 主函数:通过调用Init()初始化函数来初始化接口数据,并进入一个死循环来不断检测按键k2的值。当k2 = 0即按键k2按下时,进入if分支进行相应的处理,并调用延时函数delay_20ms( int n )精确延时20ms。 - 按键消除前沿抖动:利用软件手段对按键进行稳定检测,确保按键的稳定性。 综上所述,stcb学习课程设计是指利用STC-B学习来实现一个“打地鼠游戏”项目,通过编程和硬件控制实现地鼠的显示和击中的功能。<span class="em">1</span> #### 引用[.reference_title] - *1* [STC-B学习单片机编程](https://blog.csdn.net/XMPTFQ/article/details/108819384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值