首页 > 其他分享 >独立按键的扫描

独立按键的扫描

时间:2024-12-04 11:59:47浏览次数:4  
标签:P2 P1 扫描 独立 数码管 KeyIn4 按键 sbit

电路原理分析

按键部分[以使用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 为 0
    ADDR0 = 0;
    ADDR1 = 1;
    ADDR2 = 1;
    
    //keyOut3 为0,其他均为1
    P2 = 0xFD;
    
    while (1)
    {
        LED9 = KeyIn1;//K9控制LED9
        LED8 = KeyIn2;//K10控制LED8
        LED7 = KeyIn3;//K11控制LED7
        LED6 = 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++;//按键次数+1
				if (cnt >= 10)//只用一个数码管显示,所以加到10就清零重新开始
					cnt = 0;
				P0 = LedChar[cnt];
			}
			backup = KeyIn4;//更新备份为当前值,以备进行下次比较
		}
	}
}

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

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

标签:P2,P1,扫描,独立,数码管,KeyIn4,按键,sbit
From: https://www.cnblogs.com/EricsT/p/18562826

相关文章

  • Nexpose 7.0.0 for Linux & Windows - 漏洞扫描
    Nexpose7.0.0forLinux&Windows-漏洞扫描Rapid7on-premVulnerabilityManagement,releasedDec03,2024请访问原文链接:https://sysin.org/blog/nexpose-7/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNexposeVulnerabilityScanner您的本地漏洞扫......
  • 底部导航栏新增功能按键
    场景需求:在底部导航栏添加power案件,单击息屏,长按关机如下实现图借此需求,需要掌握技能:底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。比如放不下、顺序排列、坑点如何修改等修改-新增文件:新增\vendor\mediatek\proprietary\pac......
  • 【恐怖の算法】 扫描线
    【恐怖の算法】扫描线引入扫描线一般运用在图形上面,它和它的字面意思十分相似,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积,周长,以及二维数点等问题。二维矩形面积并问题在二维坐标系上,给出多个矩形的左下以及右上坐标,求出所有矩形构成的图形的面积。过程根据图片......
  • 功能最全的在线客服源码-独立链接-自动回复-消息提醒与手机接待回复等
    在当今数字化时代,客户服务已成为企业竞争的关键要素之一。一个高效、稳定且用户友好的在线客服聊天系统,不仅能提升客户满意度,还能有效提高企业运营效率。本文将详细介绍如何使用Golang开发一个美观且强大的在线客服聊天系统,并提供二进制运行的傻瓜式安装教程,帮助企业快速搭建自己......
  • DevExpress-独立使用的控件介绍-02
    XtraEditors库提供了只能独立使用的控件,即这些控件只能依附于其他控件配合使用,不能单独使用。这些控件包括:几种类型的列表控件、数据导航控件、滚动条和一个按钮控件,这些控件都是继承于BaseStyleControl,因此支持所有Dev控件共有的样式、外观与感觉、以及工具提示机制,为应用......
  • testnet 资产管理系统 侦察|扫描|信息收集|网络空间搜索
    TestNet简介TestNet资产管理系统旨在提供全面、高效的互联网资产管理与监控服务,构建详细的资产信息库。该系统能够帮助企业安全团队或渗透测试人员对目标资产进行深入侦察和分析,提供攻击者视角的持续风险监测,协助用户实时掌握资产动态,识别并修复安全漏洞,从而有效收敛攻击面,提升......
  • 星际争霸2按键核心键位
    核心键位the_core_5.0_Left_Plus编队操作按键操作按键操作按键操作按键选中编队0X添加到编队1并转移控制权Ctrl+X创建编队0Shift+X添加至编队0Ctrl+Shift+X选中编队1E添加到编队2并转移控制权Ctrl+E创建编队1Shift+E添加至编队1Ctrl+Shift+E......
  • 端口扫描工具(信息收集)
    1.masscan(kali自带)Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。masscan的扫描结果类似于nmap(一个很著名的端口扫描器),在内部,它更像scanrand,unicornscan,andZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,mass......
  • 按键 芯片型号max7359 linux驱动程序
    /*max7359_keypad.c-MAX7359KeySwitchControllerDriverCopyright©2009SamsungElectronicsBasedonpxa27x_keypad.cThisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseversion2asp......
  • 按键 芯片jornada680 linux驱动程序
    /*drivers/input/keyboard/jornada680_kbd.cHPJornada620/660/680/690scankeyboardplatformdriverBasedonhp680_keyb.cCopyright©2006PaulMundtCopyright©2005AndriySkulyshSplitfromdrivers/input/keyboard/hp600_keyb.cCopyright©2000YaegashiT......