独立按键控制LED(基于51单片机)

师从江科大

独立按键

轻触按键:

相当于是一种电子开关,按下开关接通,松开开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通好和断开

独立按键原理图:

 注:没有按下独立按键是高电平,按下则是低电平

注:K1是P3_1,K2是P3_0,K3是P3_2,K4是P3_3

独立按键控制LED亮灭代码

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
}

 注:在51单片机中,寄存器是以8位为基本单位的。

C51数据运算

 注:C=5/2       C=2

        C=5%2     C=1

0011 1100<<1    ->      0111 1000  (按位左移)

0011 1100>>1    ->      0000 1111 (按位右移)

0001 1000 & 0010 1010     ->      0000 1000     (按位与)(对应位全为1才为1)

0001 1000 | 0010 1010     ->       0000 1000      (按位或)(对应位有1就为1)

0001 1000 ^ 0010 1010     ->       0011 001~0   (按位异或)(对应位一样为0,不一样为1)

~0001 1000                       ->       1110 0111      (按位取反)

按键抖动

 按键消抖

消除按键抖动通常有两种方法:硬件消抖和软件消抖。

硬件消抖

  1. RC滤波电路: 在按键的输入端接一个RC(电阻-电容)低通滤波器,利用电容充电放电的时间常数来延长按键信号变化的时间,自然过滤掉快速的抖动信号。当按键闭合或断开时,由于电容的存在,电压不会立刻稳定在高电平或低电平,而是经过一定时间后才稳定下来。

  2. 双稳态触发器: 使用如施密特触发器、D触发器或RS触发器等双稳态电路,只有当按键信号稳定在一个阈值以上或以下一段时间后,才会翻转状态,从而忽略短暂的抖动信号。

软件消抖

  1. 延时检测法: 当检测到按键按下时,程序并不立即响应,而是等待一段微秒或毫秒级别的延时(例如5ms~20ms),之后再次检查按键的状态。如果按键仍然保持在按下状态,则认为此次按键有效,进行相应的处理。

    1if (KEY == 0) { // 检测到按键按下
    2    DELAY_MS(15); // 延时消抖
    3    if (KEY == 0) { // 再次检测按键是否仍为按下状态
    4        // 执行按键处理代码
    5    }
    6}
  2. 循环检测法: 另一种软件消抖方式是在检测到按键按下的瞬间进入循环,循环内延时并持续判断按键是否释放,确保在按键稳定后执行一次操作。

    1while (KEY == 0) {
    2    DELAY_MS(10); // 循环延时
    3}
    4// 按键松开后,执行按键处理代码

通过这些方法可以有效地避免因机械开关触点接触不稳定导致的多次误触发问题,确保单次按键动作只被识别一次。

这里主要用到软件消抖。

独立按键控制LED状态代码

#include <REGX52.H>

void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
	while(xms)
	{	
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	while(1)
	{
		if(P3_1==0)//如果按键按下
		{
			Delay(20);//消除按下抖动
			while(P3_1==0);//检测松手
			Delay(20);消除松手抖动
			P2_0=~P2_0;
		}
	}
	
}

代码注意点:

执行 while(P3_1==0); 这个循环,它会持续检查P3.1引脚的状态,只有当按键被释放(P3.1变为高电平)时,才会退出这个循环。这样做的目的是确保在执行后续操作(如状态翻转)前,按键确实已经稳定在释放状态,避免因按键弹起过程中的机械抖动而产生误操作

独立按键控制LED显示二进制代码

#include <REGX52.H>

void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
  while(xms--)
		{
				i = 2;
			j = 239;
			do
			{
				  while (--j);
			} while (--i);
		}
	
}

void main()
{
	unsigned char LEDNum=0;
	
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			P2=~LEDNum;
		}
	}
}

独立按键控制LED位移代码

#include <REGX52.H>
void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
  while(xms--)
		{
				i = 2;
			j = 239;
			do
			{
				  while (--j);
			} while (--i);
		}
	
}
	unsigned char LEDNum;
void main()
{
	P2=~0x01;
	while(1)
	{
		if(P3_1==0)
		{
	     Delay(20);
				while(P3_1==0)
				Delay(20);
				LEDNum++;
				if(LEDNum>=8)
					LEDNum=0;
				P2=~(0x01<<LEDNum);
		}		
		if(P3_0==0)
		{
	     Delay(20);
				while(P3_0==0)
				Delay(20);
				if(LEDNum==0)
					LEDNum=7;
				else
					LEDNum--;
				P2=~(0x01<<LEDNum);
		}
	}
	
}

若有侵权,请联系作者

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对同一文件多次mmap

abstract 问&#xff1a;对同一个文件多次mmap&#xff0c;返回的地址相同吗? 答&#xff1a;不相同 code #ifdef __linux__#include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> …

1.D支撑线

从时间复杂度上来看&#xff0c;极点是O(n4)&#xff0c;极边是O(n3)&#xff0c;那么&#xff0c;还有没有可能使时间复杂度更小呢&#xff1f; 如上图所示将外部点X加入到原凸包&#xff0c;&#xff08;即S黄Vt蓝V所在的凸包&#xff09;那么可以观察到&#xff0c;将会组成…

【Java程序设计】【C00205】基于(JavaWeb+SSM)的商场停车服务管理系统(论文+PPT)

基于&#xff08;JavaWebSSM&#xff09;的商场停车服务管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的商场停车服务管理系统 本系统分为管理员和用户2个功能模块。 管理员&#xff1a;管理员进入主页面&…

网络协议与攻击模拟_12DNS协议及Windows部署DNS服务器

1、了解域名的结构 2、DNS查询过程 3、Windwos server部署DNS服务器 4、分析流量 实施DNS欺骗 再分析 一、DNS域名系统 1、DNS简介 DNS&#xff08;Domain Name system&#xff09;域名系统&#xff0c;作为将域名的IP地址的相互映射关系存放在一个分布式的数据库&#xff0c…

二分查找-迭代法

Go 算法 每天5道&#xff0c;开心快乐每一天 一点都不开心 哈哈哈哈哈哈 -2.1 day 1 1.22&#xff08;1.23 1.25 1.29&#xff09; 1.23 已复习 704. 二分查找 力扣题目链接 //左闭右开 func search(nums []int, target int) int { right : len(nums) left : 0; for le…

6个AI写作工具,让你的文字变得生动有力

写作是一项需要耐心和技巧的任务&#xff0c;对于许多人来说&#xff0c;写作可能是一项困难的挑战。然而&#xff0c;随着人工智能的发展&#xff0c;AI智能写作软件逐渐崭露头角&#xff0c;为我们提供了更加便捷和高效的写作体验。在本文中&#xff0c;我们将介绍几款好用的…

算法练习01——哈希部分双指针

目录 1. 两数之和(*)242. 有效的字母异位词(easy)49. 字母异位词分组(*)349. 两个数组的交集202. 快乐数(1.使用Set存哈希&#xff0c;2.快慢指针)454. 四数相加 II383. 赎金信15. 三数之和*(双指针)18. 四数之和*(双指针)128. 最长连续序列 1. 两数之和(*) https://leetcode.…

边缘计算网关在智能制造中有哪些应用?-天拓四方

在智能制造和工业生产环境中&#xff0c;数据已经成为新的生产要素&#xff0c;工业生产对实时性、灵活性和智能化也提出了更高的要求。而在这个过程中&#xff0c;边缘计算网关发挥着不可或缺的作用。它作为设备层与网络层之间的关键桥梁&#xff0c;确保了数据的实时、高效处…

STM32F407移植OpenHarmony笔记6

继上一篇笔记&#xff0c;编译好STM32的裸机程序&#xff0c;能点亮LED灯了。 下一步就是启动liteos_m内核了。 不过为了更好的调试代码&#xff0c;需要先把printf重定向到串口&#xff0c;基于gcc的printf重定向和Keil不一样。 直接新建printf.c&#xff0c;在里面重写printf…

基于 NOVATEK NT98530 Multiview Stitching 应用解决方案

感测技术近来于影像监控系统应用有了进一步的发展&#xff0c;多镜头的应用也与日俱增&#xff0c;如 AI 视觉感测会议相机&#xff0c;能满足远端多人聚会、远距教育训练的多元需求等&#xff0c;相关应用层面广泛涵盖了在生活中所面对的各种场景&#xff0c;带动更加可观的潜…

【安装指南】nodejs下载、安装与配置详细教程

目录 &#x1f33c;一、概述 &#x1f340;二、下载node.js &#x1f337;三、安装node.js &#x1f341;四、配置node.js &#x1f33c;一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、…

各品牌主板快速启动热键对照表及CMOS进入方法

各品牌主板快速启动热键对照表 主板品牌 启动按键 笔记本品牌 启动按键 主机品牌 启动按键 华硕主板 F8 联想笔记本 F12 联想台式机 F12 技嘉主板 F12 宏碁笔记本 F12 惠普台式机 F12 微星主板 F11 华硕笔记本 ESC 宏碁台式机 F12 梅捷主板 F9 惠普笔…

机器学习数学基础

机器学习基础 1、标量、向量、矩阵、张量2、概率函数、概率分布、概率密度、分布函数3、向量的线性相关性4、最大似然估计5、正态分布(高斯分布)6、向量的外积(叉积)7、向量的内积(点积)8、超平面(H)1、标量、向量、矩阵、张量 标量、向量、矩阵和张量是线性代数中不同…

Java基础学习:System类和Static方法的实际使用

一、System类 1.在程序开发中&#xff0c;我们需要对这个运行的结果进行检验跟我们预判的结果是否一致&#xff0c;就会用到打印结果在控制台中显示出来使用到了System类。System类定义了一些和系统相关的属性和方法&#xff0c;它的属性和方法都是属于静态的&#xff0c;想使用…

win11安装wsl作为linux子系统并当作服务器

wsl安装 打开控制面板&#xff0c;找到启用或关闭windows功能 开启windows虚拟机监控平台和适用于Linux的Windows子系统&#xff0c;重启电脑。 打开microsoft store搜索ubuntu&#xff0c;找到合适的版本下载安装 输入wsl -l如下所示&#xff0c;即为安装成功。 安装过程比较…

怎么进行视频压缩大小?常见的4种压缩方法

在当今数字化的时代&#xff0c;我们经常处理大量的视频文件&#xff0c;无论是用于社交媒体分享、视频制作还是存储在我们的设备中。然而&#xff0c;随着视频质量的提升和分辨率的增加&#xff0c;视频文件的大小也相应地变得更加庞大&#xff0c;给存储、分享和传输带来了一…

HTTPS之使用acme.sh申请免费ssl证书

1、步骤一&#xff1a;安装 acme.sh acme.sh 是一个集成了 ACME 客户端协议的 Bash 脚本 a、安装命令 curl https://get.acme.sh | sh -s emailusernameexample.com 或者 git clone --depth 1 https://github.com/acmesh-official/acme.sh.git cd acme.sh ./acme.sh --ins…

循环系统的血流方向 Circulatory System‘s Pathway of Blood Through the Heart

循环系统的血流方向 目录 循环系统的血流方向前置知识&#xff1a;心脏腔室和阀门&#xff1a;血液路线&#xff1a;心脏瓣膜病 循环系统是由心脏、血管和血液组成的复杂系统&#xff0c;负责输送氧气、营养和其他物质到身体的各个部位&#xff0c;并将代谢产物带回肺和肾脏等器…

【力扣经典面试题】189. 轮转数组

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 …

SIT1145AQ带选择性唤醒及故障保护的低功耗 CAN FD 总线收发器

特点 符合 ISO 11898-2:2016 和 SAE J2284-1 至 SAE J2284-5 标准 ➢ AEC-Q100 认证 ➢ 拥有低功耗休眠模式以及待机模式 ➢ 支持标准 CAN 唤醒帧的远程唤醒&#xff0c;兼容 ISO 11898- 2:2016 标准的选择性唤醒帧远程唤醒 ➢ 唤醒源诊断识别功能 ➢ 总…