【二】【单片机】有关独立按键的实验
自定义延时函数Delay
分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中,直接使用。
//Delay.c
void Delay(unsigned int xms) //@11.0592MHz
{while(xms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}}
//Delay.h
void Delay(unsigned int xms); //@11.0592MHz
独立按键控制LED灯亮灭

GND表示是低电平,P31对应K1按键,P30对应K2按键,P32对应K3按键,P33对应K4按键。
K1按键按下去,表示P31为低电平,也就是P31=0。K1按键被弹起,P31为高电平,也就是P31=1。其他的按键以此类推。
#include <REGX52.H>
void main(){while(1){if(P3_1==0){P2_0=0;}else{P2_0=1;}}
}
独立按键控制LED亮灭
独立按键控制LED灯状态
独立按键控制LED灯亮灭实验中,每当我们按下K1按键,灯亮起,如果K1被弹起,灯不亮。我们是否可以控制每当按键按下、抬起一整个阶段结束,灯才完成一次变化,亮到灭或者灭到亮?
独立按键控制LED灯的状态,每当我们按下抬起整个阶段完成,灯发生一次变化,亮到灭或者灭到亮。
#include <REGX52.H>
#include "Delay.h"
void main(){while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);P2_0=~P2_0;}}}
代码中添加Delay(20)是为了对应按键抖动。

所以我们延时20毫秒,此时按键一定处于稳定的状态。因为前后抖动加起来的时间不超过20毫秒。
所以延时20毫秒后,按键的状态可以是按下或者抬起。此时都是处于稳定的状态。
如果此时按键一直处于按下的状态,也就是P3_1=0,一直让程序空跑,直到按键被抬起,才使灯发生改变。
因为我们要使某个LED灯状态改变,所以只需要对对应二进制数进行取反即可。
独立按键控制LED灯状态
独立按键控制LED灯显示二进制
独立按键控制LED灯呈现二进制数显示。我们模拟二进制数的计算过程即可,每次进行++操作。比如说十进制的5,对应的二进制数是101,我需要让显示1的亮,显示0的不亮,所以我们还需要对二进制数进行取反。
检测范围,八个灯,全部亮是1111 1111对应的十进制数是2^8-1=255。而unsigned char的范围就是0~255。因此我们可以用unsigned char 作为二进制数的模拟数据类型。
模拟按键是完成一整个操作,状态发生一次改变。
#include <REGX52.H>
#include "Delay.h"void main(){unsigned char LEDNum=0;while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);LEDNum++;P2=~LEDNum;}}}
独立按键控制LED二进制显示
独立按键控制LED灯移位
独立按键控制LED灯移位,K1按键控制LED灯左移,K2按键控制LED灯右移。
#include <REGX52.H>
#include "Delay.h"void main(){unsigned char LEDNum=0;P2=~0x01;while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);if(LEDNum==0){LEDNum=7;}else{LEDNum--;}P2=~(0x01<<LEDNum);}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);LEDNum++;if(LEDNum>=8){LEDNum=0;}P2=~(0x01<<LEDNum);} }}
这段代码是用来控制一个8位LED灯的亮灭和切换的程序,编写在51单片机上,利用了外部的两个按钮来控制LED灯的左右移动。
#include <REGX52.H>这一行代码是包含一个特定的头文件REGX52.H,这个文件中定义了使用51单片机系列中某个型号(如REGX52)时需要的一些特定功能和寄存器的地址。这是为了方便编程而直接使用单片机中的资源。
#include "Delay.h"这里包含了一个叫Delay.h的头文件,这个文件应该定义了一些延时函数,用于在程序中创建延迟。延迟在这种硬件控制程序中非常常见,用来等待硬件响应或者创建定时任务。
unsigned char LEDNum=0;定义了一个无符号字符变量LEDNum,并初始化为0。这个变量用来记录当前点亮的LED灯的编号(0-7)。
P2=~0x01;这行代码是将P2端口的值设置为~0x01(即11111110),使得第一个LED灯亮起。这里用到了位操作,~是位取反操作符,0x01是二进制的00000001,取反后变为11111110。
while(1){这是一个无限循环,意味着下面的代码会不断重复执行。
if(P3_1==0){这行代码检查P3端口的第二个引脚(P3_1)的状态是否为0(即是否被按下)。
Delay(20);调用Delay函数进行20ms的延时,用于消抖。消抖是因为当按键按下时,会有一个短暂的不稳定期,这时按键的电平可能会不断跳变。
while(P3_1==0);这是一个空的循环体,如果P3_1仍然为0,则一直在这里等待,直到按钮被释放。
Delay(20);再次调用Delay函数进行20ms的延时,进一步确保消抖完成,避免误操作。
if(LEDNum==0){ LEDNum=7; }else{ LEDNum--; }这部分逻辑是用于当P3_1被按下时,如果当前点亮的是第一个LED(LEDNum为0),则将LEDNum设置为7,即跳转到最后一个LED。否则,LEDNum减1,即向左移动一个LED。
P2=~(0x01<<LEDNum);这行代码是将P2端口的值设置为~(0x01<<LEDNum),通过左移操作和取反操作,来控制对应编号的LED灯亮起。
剩余的部分代码是处理另一个按钮(P3_0)的按下事件,逻辑与处理P3_1的按下类似,只是它是用于控制LED灯向右移动。
独立按键控制LED灯移位
结尾
最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。
同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。
谢谢您的支持,期待与您在下一篇文章中再次相遇!
相关文章:
【二】【单片机】有关独立按键的实验
自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中,直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…...
AJAX踩坑指南(知识点补充)
JWT JSON Web Token是目前最为流行的跨域认证解决方案 如何获取:在使用JWT身份验证中,当用户使用其凭据成功登录时,将返回JSON Web Token(令牌) Token本质就是一个包含了信息的字符串 如何获取Token:登录成功之后,服务…...
备战蓝桥杯Day29 - 拼接最大数字问题
问题描述 有n个非负整数,将其按照字符串拼接的方式拼接为一个整数如何拼接可以使得得到的整数最大? 例: 32,94,128,1286,6,71可以拼接除的最大整数为 94716321286128。 问题思路 1.比较两个字符串的第一个数字,数值大的在前面,数值小的在…...
基于springboot的mysql实现读写分离
前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段?常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等,在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…...
Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】
目录: 每篇前言:1.使用分布式爬取豆瓣电影信息(1)settings.py文件中的配置:(2)spider文件的更改:(3)items.py文件(两个项目一致!&…...
提升效率,稳定可靠:亚信安慧AntDB的企业价值
亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势,在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力,也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…...
洛谷入门——P1567 统计天数
统计天数 题目描述 炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。 经历千辛万苦,他收集了连续 N ( 1 ≤ N ≤ 1 0 6 ) N(1 \leq N …...
C++概述
目录 一、C关键字(63个) 二、C几个关键点: 三、C语言缺陷一:命名冲突 四、C新概念:命名空间(namespace) 五、命名空间的嵌套: 六、展开命名空间:(using …...
Linux学习笔记16 - 系统命令
1. Linux 常见系统管理命令 命令含义格式su切换用户su [选项] [用户名]ps显示系统由该用户运行的进程列表ps [选项]top动态显示系统中运行的程序(一般为每隔 5s)topkill输出特定的信号给指定 PID(进程号)的进程,并根据…...
读书笔记--阅读华为数据治理之旅有感
通过阅读华为的数据治理之旅,了解到华为公司作为高科技企业的引领者,在数据治理工作、数字化智能化转型方面的确有许许多多值得大家学习的地方,华为公司的业务范围广泛,市场竞争压力大,迫切需要用一些高效的手段来减轻员工的工作量,让员工各司其职,在各自承担的主营业务…...
网络安全协议基本问题
Http和Https协议的端口号: Http:80 Https:443 网络监听: 网络监听是一种监视网络状态、数据流程以及网络上信息传输的工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息。但是网络监…...
面试(一)
一. 说一下进程和线程的区别? (1)进程是资源分配的最小单位,线程是CPU调度的最小单位。 (2)线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程。 (3)进程有自己独立地址空间&a…...
libVLC windows开发环境搭建
1.简介 LibVLC是一个强大的开源库,它构成了VLC媒体播放器的核心部分。 LibVLC提供了一系列的功能接口,使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。 跨平台性:VLC作为一个跨平台的多媒体播放器&#x…...
【Netty】Netty的使用和常用组件详解
目录 一、简述 1.1 什么是Netty 1.2 Netty 的优势 1.3 为什么不用 Netty5? 1.4 为什么 Netty 使用 NIO 而不是 AIO? 1.5 为什么不用 Mina? 二、第一个 Netty 程序 2.1 Bootstrap、EventLoop(Group) 、Channel 2.1.1 Bootstrap 2.1.…...
Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!
前言 前面讲了很多很多关于安装系统、重装系统的教程。但唯独没有讲到电脑换了新的硬盘之后,怎么把旧系统迁移到新的硬盘上。 今天小白就来跟各位小伙伴详细唠唠: 开始之前需要把系统迁移的条件准备好,意思就是在WinPE系统下,可…...
Windows 11 安装 Scoop
[Windows 11 安装 Scoop](Windows 11 安装 Scoop) 0. 引言 Scoop 从命令行安装您熟悉和喜爱的程序,差异最小。 它的主要功能如下: 消除权限弹出窗口 隐藏 GUI 向导样式的安装程序 防止PATH污染安装大量程序 避免安装和卸载程序的意外副作用 自动查…...
新能源汽车小三电系统
小三电系统 新能源电动汽车的"小三电"系统,一般指车载充电机(OBC)、车载 DC/DC 变换器,和高压直流配电盒(PDU)。一辆纯电动汽车一般配备一台OBC 和一台车载 DC/DC 变换器。OBC将外部输入的交流电转化为直流电输出给电池,DC/DC衔接…...
面试问答示范
文章目录 请做个自我介绍您的学历是统招吗?可以在学信网查询吗是全日制吗是双证吗?请介绍一下你上家公司的情况。介绍一下你们公司的服务器架构(网络架构)。说说你在工作中处理过的最棘手的技术问题讲一讲上家公司做过的项目为什么…...
嵌入式3-22
4.输入一个秒数,输出几时几分几秒 eg:输入3670 1小时1分钟10秒 5,输入一个数,使用条件运算符实现,如果是水仙花则赋值1否则赋值0 6.终端输入一个年份,使用条件运算符实现,如果是润年则赋值1否则赋值0 …...
JAVA Synchronized对象锁和类锁区别(牛逼)
一个类就像一个四合院,四合院的大门叫做构造方法,盖房子必须经过大门,每new一个对象,就表示在四合院里再盖一间新房子,大门上面的锁,叫做构造锁,里面每一间房子就是一个实例,每间房子…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
