单片机学习笔记---独立按键控制LED显示二进制

这节我们来实现独立按键的第三个功能,独立按键控制LED显示二进制

新创建一个工程文件,然后上来我们就要把基本框架写好,这是基本的习惯

老规矩,然后把Delay 1ms的代码复制过来

复制过来后改造一下:

把1ms删掉,然后给Delay函数传个参数unsigned int xms

把延时1ms的那段代码移到一个while(xms--)里面

Delay函数定义后之后,先写程序点亮测试一下

编译无错误下载程序,重启板子看看效果

点亮

延时500ms

灭掉

延时500ms

此时它正在以1秒为周期闪烁,证明程序写的没错

把测试程序的这段代码删掉

换成上一节的按键判断程序

这节主要讲解状态取反的新形式

上一节我们只是对P2的0口取反(P2_0=~P2_0)

那如果我们想要对P2的8个口都取反怎么办?

我们要引入一个变量,变量名为LEDnum,类型是unsigned char(因为char类型占1个字节,8个比特位,刚好等于寄存器的一组,寄存器以8个为一组)

我们可以先让LEDnum++然后再让它取反,赋值给P2的8个口

代码如下:

代码逻辑如下:

LEDnum原本是0,即0000 0000

第一次循环后:

LEDnum++;//0000 0001

~LEDnum;//1111 1110 (D1亮)

第二次循环后:

LEDnum++;//0000 0010

~LEDnum;//1111 1101 (D2亮)

第三次循环后:

LEDnum++;//0000 0011

~LEDnum;//1111 1100 (D1,D2亮)

第四次循环后:

LEDnum++;//0000 0100

~LEDnum;//1111 1011

第五次循环后:

LEDnum++;//0000 0101

~LEDnum;//1111 1010

第六次循环后:

LEDnum++;//0000 0110

~LEDnum;//1111 1001

第七次循环后:

LEDnum++;//0000 0111

~LEDnum;//1111 1000

第八次循环后:

LEDnum++;//0000 1000

~LEDnum;//1111 0111

第九次循环后:

LEDnum++;//0000 1001

~LEDnum;//1111 0110

第十次循环后:

LEDnum++;//0000 1010

~LEDnum;//1111 0101

第十一次循环后:

LEDnum++;//0000 1011

~LEDnum;//1111 0100

第十二次循环后:

LEDnum++;//0000 1100

~LEDnum;//1111 0011

第十三次循环后:

LEDnum++;//0000 1101

~LEDnum;//1111 0010

第十四次循环后:

LEDnum++;//0000 1110

~LEDnum;//1111 0001

第十五次循环后:

LEDnum++;//0000 1111

~LEDnum;//1111 0000

第十六次循环后:

LEDnum++;//0001 0000

~LEDnum;//1110 1111

第十七次循环后:

LEDnum++;//0001 0001

~LEDnum;//1110 1110

第十八次循环后:

LEDnum++;//0001 0010

~LEDnum;//1110 1101 

......

第255次循环后:

LEDnum++;//1111 1111

~LEDnum;//0000 0000 (全灭)

完整代码如下

#include <REGX52.H>

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)//后置--操作完之后给xms减1
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	unsigned char LEDnum=0;//0000 0000
	while(1)
	{
		if(P3_1==0)
		{
			//按键判断
			Delay(20);//按下要消抖
			while(P3_1==0);//判断是否松手,松手变成==1
			Delay(20);//松开要消抖
			
			//状态取反
			LEDnum++;//0000 0001
			P2=~LEDnum;//1111 1110
	}
}

编译无错误下载查看效果

按第一次,D1亮

按第二次,D2亮

按第二次,D1,D2亮

......

按第254次时才是全亮

按第255次时全灭

按256次之后开启第二轮循环

以上就是这节要实现的效果!

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

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

相关文章

近20k stars,GSYVideoPlayer一款优秀的视频播放器

近20k stars&#xff0c;GSYVideoPlayer一款优秀的视频播放器 引言 在现代社会中&#xff0c;视频已经成为人们获取信息和娱乐的重要形式。为了提供更好的观看体验&#xff0c;开发一款优秀的视频播放器变得至关重要。而GSYVideoPlayer作为一款功能强大、稳定可靠的视频播放器…

03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…

最新多功能PHP图床源码 /兰空图床Lsky Pro开源版v2.1/ 单纯的图床程序源码

源码介绍&#xff1a; Lsky Pro 是一个用于在线上传、管理图片的图床程序&#xff0c;中文名&#xff1a;兰空图床&#xff0c;你可以将它作为自己的云上相册&#xff0c;亦可以当作你的写作贴图库。 该程序的最初版本诞生于2017年10月&#xff0c;由ThinkPHP 5框架精心打造而…

20240127使用ffmpeg合并音轨和视频通道为mp4

20240127使用ffmpeg合并音轨和视频通道为mp4 2024/1/27 11:11 百度&#xff1a;ffmpeg 合并 音频和视频 mp4 ffmpeg -i 视频文件名.mp4 -i 音频文件名.mp3 -c:v copy -c:a aac -strict experimental 输出文件名.mp4ffmpeg -i "videoplayback (1).mp4" -i videoplay…

vue项目中使用Element多个Form表单同时验证

一、项目需求 在项目中一个页面中需要实现多个Form表单&#xff0c;并在页面提交时需要对多个Form表单进行校验&#xff0c;多个表单都校验成功时才能提交。 二、实现效果 三、多个表单验证 注意项&#xff1a;多个form表单&#xff0c;每个表单上都设置单独的model和ref&am…

Python tkinter (6) Listbox

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…

51-16 FusionAD 用于自动驾驶预测与规划任务的多模态融合论文精读

今天要分享的是基于BEV的多模态、多任务、端到端自动驾驶模型FusionAD&#xff0c;其专注于自动驾驶预测和规划任务。这项工作首次发表于2023年8月2日&#xff0c;性能超越了2023 CVPR最佳论文UniAD模型。论文题目是FusionAD: Multi-modality Fusion for Prediction and Planni…

【Java 数据结构】LinkedList与链表

LinkedList与链表 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3. LinkedList的模拟实现4.LinkedList的使用4.1 什么是LinkedList4.2LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用&#xff0c;并且…

vue3+elementPlus pc和小程序ai聊天文生图

websocket封装可以看上一篇文章 //pc端 <template><div class"common-layout theme-white"><el-container><el-aside><div class"title-box"><span>AI Chat</span></div><div class"chat-list&…

VMware安装RHEL-磁盘划分和分区

本文探讨了在VMware虚拟机上安装RHEL时遇到的磁盘划分和分区问题。文章详细介绍了磁盘划分过程中可能出现的问题&#xff0c;特别是在选择磁盘类型时可能导致找不到磁盘的情况。通过清晰的步骤和解决方法&#xff0c;读者可以更好地理解如何正确进行磁盘划分以及如何解决磁盘无…

银行数据仓库体系实践(3)--数据架构

狭义的数据仓库数据架构用来特指数据分布&#xff0c;广义的数据仓库数据架构还包括数据模型、数据标准和数据治理。即包含相对静态部分如元数据、业务对象数据模型、主数据、共享数据&#xff0c;也包含相对动态部分如数据流转、ETL、整合、访问应用和数据全生命周期管控治理。…

AWS 专题学习 P12 (CloudWatch、CloudTrail、AWS Config)

文章目录 专题总览1. CloudWatch1.1 Amazon CloudWatch Metrics1.2 CloudWatch Metric Streams1.3 CloudWatch LogsCloudWatch Logs - SourcesCloudWatch Logs Metric Filter & InsightsCloudWatch Logs – S3 ExportCloudWatch Logs SubscriptionsCloudWatch Logs Aggrega…

jetson-inference----训练自己的目标检测模型(一)

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 jetson-inference----训练自己的目标检测模型&#xff08;一&#xff09; 文章目录 系列文章目录前言一、jetson-inference docker环境介绍二、SSD目标检测三、训练自己的目标检测模型总结 前言 …

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

淘宝扭蛋机小程序:新时代的互动营销与娱乐体验

随着科技的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。在众多的小程序中&#xff0c;淘宝扭蛋机小程序以其独特的互动性和趣味性&#xff0c;吸引了大量用户。本文将深入探讨淘宝扭蛋机小程序的特色、用户体验以及未来发展。 一、淘宝扭蛋机小程序的…

Mybatis 拦截器

MyBatis 拦截器&#xff08;Interceptor&#xff09;是 MyBatis 提供的一种强大机制&#xff0c;允许开发者在 SQL 映射语句执行过程中的特定节点进行拦截和定制处理。通过实现 org.apache.ibatis.plugin.Interceptor 接口并注册到 MyBatis 的配置文件中&#xff0c;可以插入自…

Python开发实例 – Lambda表达式

Python开发实例 – Lambda表达式 Python Development Examples – Lambda expression By JacksonML 普通的函数我们很常用&#xff0c;只需要通过 def 声明&#xff0c;并且产生一段代码&#xff0c;包含&#xff08;但不限于&#xff09;参数&#xff0c;返回&#xff08;或…

解决:‘chromedriver’ executable needs to be in PATH

解决&#xff1a;chromedriver’ executable needs to be in PATH 文章目录 解决&#xff1a;chromedriver’ executable needs to be in PATH背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff1a;检查python安装路径有没有添加到环境变量里面方法二&#xff1…

element-ui 树形控件 实现点击某个节点获取本身节点和底下所有的子节点数据

1、需求&#xff1a;点击树形控件中的某个节点&#xff0c;需要拿到它本身和底下所有的子节点的id 1、树形控件代码 <el-tree:data"deptOptions"node-click"getVisitCheckedNodes"ref"target_tree_Speech"node-key"id":default-ex…

漏洞复现-万户OA text2Html 任意文件读取(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…