独立按键的扫描

news/2024/12/4 12:00:13/文章来源:https://www.cnblogs.com/EricsT/p/18562826

电路原理分析

按键部分[以使用K9\K10\K11\K12为例]

首先,将 KeyOut3 置 0 ,其他三条分路[KeyOut1、KeyOut2、KeyOut4]置1,此时, KeyOut3 分路的按键 K9\K10\K11\K12 作为 4 个独立按键处理

将此 4 个按键的状态直接送给小灯,即可控制小灯的亮灭:

按下 K9 ,此时 KeyIn1 变为 0

按下 K10 ,此时 KeyIn2 变为 0

按下 K11 ,此时 KeyIn3 变为 0

按下 K12 ,此时 KeyIn4 变为 0

小灯部分

小灯部分的电路原理分析详见https://www.cnblogs.com/EricsT/p/18442768

以下做简单概要

P1.4 置 0,即 ENLED 置0

在下图中将跳线连接在显示译码部分,即 ADDR0 与 P1.0 连线,ADDR1 与 P1.1 连线,ADDR2 与 P1.2 连线,ADDR3 与 P1.3 连线

P1.3 置 1,即 ADDR3 置1

通过以上使能下图的U3[74HC138]芯片

P1.0 置 0,即 ADDR0 置 0

P1.1 置 1,即 ADDR1 置 1

P1.2 置 1,即 ADDR2 置 1

通过以上,则U3芯片 A2 置 1,A1 置 1,A0 置 0,查询下图真值表可知 LEDS6 为 0

通过以上,下图中的Q16[9012]三极管导通,此时,只要DBX为0,则小灯就被点亮

即小灯被点亮:P1.0 = 0; P1.1 = 1; P1.2 = 1; P1.3 = 1; P1.4 = 0;

综合分析

KeyOut3 置 0,即 P2.1 置 0

P1.0 = 0; P1.1 = 1; P1.2 = 1; P1.3 = 1; P1.4 = 0; P2.1 = 0;其余为默认值

将 KeyIn1 的值给 DB7 ,则 K9 的状态控制 LED9 的状态

将 KeyIn2 的值给 DB6 ,则 K10 的状态控制 LED8 的状态

将 KeyIn3 的值给 DB5 ,则 K11 的状态控制 LED7 的状态

将 KeyIn4 的值给 DB4 ,则 K12 的状态控制 LED6 的状态

代码实现


#include <reg52.h>sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;sbit LED9 = P0 ^ 7;
sbit LED8 = P0 ^ 6;
sbit LED7 = P0 ^ 5;
sbit LED6 = P0 ^ 4;sbit KeyIn4 = P2 ^ 7;
sbit KeyIn3 = P2 ^ 6;
sbit KeyIn2 = P2 ^ 5;
sbit KeyIn1 = P2 ^ 4;void main(void)
{//使能U3[74HC138]芯片ADDR3 = 1;ENLED = 0;// LEDS6 为 0ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;//keyOut3 为0,其他均为1P2 = 0xFD;while (1){LED9 = KeyIn1;//K9控制LED9LED8 = KeyIn2;//K10控制LED8LED7 = KeyIn3;//K11控制LED7LED6 = KeyIn4;//K12控制LED6}
}

电路原理分析

数码管部分

LEDS2为低电平,Q14导通,数码管可使用

数码管电路以及真值表内容详见https://www.cnblogs.com/EricsT/p/18460817

代码部分


#include <reg52.h>sbit ADDR0 = P1 ^ 0;
sbit ADDR1 = P1 ^ 1;
sbit ADDR2 = P1 ^ 2;
sbit ADDR3 = P1 ^ 3;
sbit ENLED = P1 ^ 4;sbit KeyIn4 = P2 ^ 7;unsigned char code LedChar[] =//数码管显示字符转换表
{0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};void main(void)
{bit backup = 1;//定义一个位变量,保存前一次扫描的按键值unsigned char cnt = 0;//定义一个计数变量,记录按下的次数ENLED = 0;//选择数码管DS3进行显示ADDR3 = 1;ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P2 = 0xF7;//P2.3置0,即keyOut1输出低电平P0 = LedChar[cnt];//显示按键次数初值while (1){if (backup != KeyIn4)//当前值与前次值不相等说明此时按键有动作{if (0 == backup)//如果前次值为0,则说明当前由0变1,即按键弹起{cnt++;//按键次数+1if (cnt >= 10)//只用一个数码管显示,所以加到10就清零重新开始cnt = 0;P0 = LedChar[cnt];}backup = KeyIn4;//更新备份为当前值,以备进行下次比较}}
}

 bit51单片机特有的变量类型,bit型是1位数据,只占用一个位(bit)的内存,用法和其他的基本数据类型一样。优点:节省内存空间,8个bit变量才相当于一个char变量所占用的空间。只有0和1两个值

以上代码实现的主要功能:在按下按键后弹起的过程中,数码管会显示按键弹起次数,当按键弹起10次数码管会变成0,重新开始计数,按下的时候,不作任何处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846614.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

diffusion model 理论基础

Diffusion Model理论基础 基于最大似然的生成模型,给定一个数据集\(x_{D}\),训练使得模型最大化似然估计\(p_{\phi}(x_{D})\)模型希望学习得到关于x的概率分布,然后可以通过采样的方式生成想要的图片

LLM大模型: CV领域常见attention思路变种及其作用(二)

attention机制的效果非凡,但本身也是有缺陷的:Q*K矩阵的复杂度高达O(n^2);如果用在CV领域,还涉及到如下问题:局部性、全局性 稀疏性 多尺度问题   为了更好地把attention机制应用于CV,上述的几个问题是需要解决的!1、DilateFormer: Multi-Scale DilatedTransformer fo…

哈哈,我好像知道 Cursor 为什么叫 Cursor 了,真相竟然是。。。

最近 Cursor 太火了,到处都是 Cursor 的文章和视频。它就像一个能实时查看你代码的编程高手,可以提供建议,捕捉错误,还可以帮你重构代码。 你不用写一行代码,只需要动动嘴,它就能一顿操作猛如虎给你写一个官网、一个 Chrome 插件、一个卡密系统、一个。。。按这速度发展下…

QEMU中虚拟Linux网络配置

QEMU中虚拟Linux网络配置 baidu: 只有在ping的时候才想起我,对吗 初 刚才使用qemu测试驱动的时候,忽然发现ssh不能顺利的接入到虚拟操作系统之中,原以为是物理机资源紧张导致qemu启动变慢,结果摸鱼半天之后依然无法通过ssh访问。使用vnc接入后发现虚拟机无法上网,没有被分…

精橙FPGA,一个承接FPGA代码设计的资深工程师团队。

一、我们是谁 精橙FPGA,一个承接FPGA代码设计的资深工程师团队。 二、服务内容 面向在校学生、职场工程师等人员,提供FPGA入门指导和FPGA代码设计外包服务。 三、业务范围 主要提供Xilinx/Altera以及国产FPGA的入门指导和FPGA代码设计外包服务,包括但不限于以下内容: 3.1 F…

Vue项目访问路径加统一前缀(若依)

如果多个项目要发布至同一个域名下,或Vue项目要加项目名访问时,则可以通过域名后加统一前缀来区分及路由至指定的服务,例如同一域名下:站点A:https://www.abc.com站点B:https://www.abc.com/bbb站点B-接口API:https://www.abc.com/bbb/api Vue项目访问路径加统一前缀步骤…

ERP术语 中日英对照表

<table><tr><td>客户</td><td>Customer</td><td>得意先</td></tr><tr><td>供应商</td><td>Supplier</td><td>仕入先</td></tr><tr><td>仓库</td>&l…

2024 PyCharm安装激活使用教程 (至2099年)

Pycharm 简介 Pycharm 是一款非常强大的Python集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 要求 在开始之前,请确保您的计算机满足以下系统要求:操作系统:Windows、macOS或Linux 处理器:至少1 GHz的处理器…

想提高工作效率?试试这些实用技巧!

在现代企业的日常运营中,工作效率低下似乎已成为许多团队和项目管理中的普遍现象。无论是在软件开发、市场营销、产品设计还是其他行业中,团队成员往往面临着进度滞后、任务拖延、沟通不畅等问题,导致整体工作效率低下,影响项目的顺利推进。这些问题不仅给团队带来了很大的…

elasticsearch 学习笔记之二 常见接口

一、索引操作类 1、创建索引(PUT /索引名称) PUT /my-index-000001 请求body{"settings": {"index": {"number_of_shards": 3, //创建3个主片"number_of_replicas": 2 //每个主片都会有两个副本}} } 未指定mapping的情况下,使…

为什么Unity里的变体数和UWA工具测出来的不一样

1)为什么Unity里的变体数和UWA工具测出来的不一样2)使用TextureArray为什么会导致L1 Cache Miss率变高3)Gfx.PresentFrame耗时异常高4)AO方案中哪个更适合移动端这是第412篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家…

abb喷涂机器人维修齿轮泵电机不转了怎么办?

ABB喷涂机器人齿轮泵电机常见的故障表现有哪些?1、电机振动过大:这可能是由于电机安装不当、轴承磨损或者不平衡导致的。振动过大会影响电机的稳定性和工作效率。2、电机无法启动:这可能是由于电源故障、电机内部短路或者过载保护触发导致的。无法启动会导致生产线停工,影响…