【51单片机】按键操作(单个灯闪烁流水灯)

news2024/11/26 22:24:38

🎊专栏【51单片机】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【如愿】

大一同学小吉,欢迎并且感谢大家指出我的问题🥰

目录

🍔同一个灯 

🏳️‍🌈效果

🏳️‍🌈代码

🏳️‍🌈问题分析

⭐注意

⭐P3_1=0,表示按下按键 

⭐为什么while(P3_1==0);后面要加上分号呢?

⭐两个Delay(20)的作用

⭐P2_0=~P2_0;

🍔不同灯

🏳️‍🌈效果

🏳️‍🌈代码

🏳️‍🌈原因

🍔流水灯

🏳️‍🌈效果

🏳️‍🌈代码

🏳️‍🌈解释 


🍔同一个灯 

🏳️‍🌈效果

led灯闪烁

🏳️‍🌈代码

#include <REGX52.H>

void Delay(unsigned int xms)		
{
	unsigned char 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(1)
    {
        if(P3_1==0)
        {
            Delay(20);
            while(P3_1==0)
            Delay(20);
            P2_0=~P2_0;
        }
    }

🏳️‍🌈问题分析

⭐注意

1.在这个程序里面,最好用类似于P3_1=0的代码,不要用类似于P2=0xFE的代码,因为后者很容易迷糊

(如果是流水灯,可以用P2=0xFE)

2.Delay()函数里面用的是自动延时代码,可以由软件自动生成,如果不明白是怎么肥四,可以参考下面这篇文章

【51单片机】使用STC烧录软件自动生成延时代码_在下 小吉的博客-CSDN博客

⭐P3_1=0,表示按下按键 

为什么while(P3_1==0);后面要加上分号呢?

在观察现象的时候发现,按一次松手,灯亮了再按一次松手,灯灭了

所以,这样子主要是为了一直按着按键的时候,防止灯亮

(而且不能改为P3_1=0,因为这里必须是循环语句或者判断语句)

⭐两个Delay(20)的作用

如图

第一个Delay(20)是作用于前面抖动的部分

第二个Delay(20)是作用于后面抖动的部分(防止松手时影响灯的亮度) 

⭐P2_0=~P2_0;

就是控制LED的开关状态,使其可以闪烁

🍔不同灯

🏳️‍🌈效果

多个led灯亮

🏳️‍🌈代码

#include <REGX52.H>

void Delay(unsigned int xms)		
{
	unsigned char i, j;

	while(xms){
		i = 2;
		j = 239;
		do
		{
				while (--j);
			
		} while (--i);
		xms--;
	}
}

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

🏳️‍🌈原因

请看下图

P2=~LEDNum;由于二进制数字的变化,所以会引起灯的变化

🍔流水灯

🏳️‍🌈效果

WeChat_20230425133443

🏳️‍🌈代码

#include <REGX52.H>

unsigned char LEDNum;

void Delay(unsigned int xms)		
{
	unsigned char 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);
			
			if(LEDNum>=8) 
				LEDNum=0;
			
			P2=~(0x01<<LEDNum);
			LEDNum++;
				
		}
		
		if(P3_0==0)//多个按键操作
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			
			if(LEDNum==0)//反方向的流水灯
				LEDNum=7;
			else
				LEDNum--;
			
			P2=~(0x01<<LEDNum);
		}
	}
}

🏳️‍🌈解释 

首先 led=0x01,而且LEDNum=0,因为 LED 是低电平点亮 ,所以 (0x01<<LEDNum) 取反 后的结果是 0xFE, 对应二进制数为 1111 1110,即最低位为 0,因此最开始的 D1 指示灯会点亮 ,然后延时一段时间进入while循环, 由于要实现8个LED从D1->D8 循环点亮,因此可以使用 for 循环语句循环 8 次,每循环一次,点亮的小灯向右 移动一个即 P2 口输出的低电平要左移一位,因此可以使用 P2=~(0x01<<i);语句实现 。0x01<<LEDNum 表示每次 LEDNum 增加 1 次,0x01 中的 1 就移动多少位, 因为 1不会让 LED 点亮,需要取反后变为低电平 0 才能点亮,所以最后的结果需要
取反后给 P2 口

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么把png图片压缩到100k以内,3个工具高效处理

怎么把png图片压缩到100k以内&#xff1f;为什么要压缩图片呢&#xff1f;当我们在提交资料的时候&#xff0c;而系统却提示图片过大无法上传的情况&#xff0c;大多都限制100K以内&#xff0c;这个时候我们就需要压缩图片。当我们网站打开的速度很慢的时候&#xff0c;这个时候…

DevExpress:报表在winform窗体上显示(使用documentViewer控件)

一&#xff1a;控件认识 documentViewer&#xff08;版本DX22.2&#xff09;,老版本中的可能是printControl&#xff08;工具箱面板中可能找不到&#xff09;&#xff0c;通过官网搜索发现&#xff0c;这个控件现在继承于documentViewer这个控件。因此&#xff0c;使用documen…

HTML 5 画布(canvas)

canvas 元素使用 JavaScript 在网页上绘制图像&#xff0c;本身是没有绘图能力。 canvas 是一个矩形区域&#xff0c;可以控制其每一像素。 canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 下面来做几个示例&#xff1a; 1、填充画布 <canvas id"…

ZLMediaKit 流媒体服务器RTSP推流时候 directProxy不同设置 时候的处理

1.directProxy默认值为1 也就是开启代理 我们先看默认设置下的推流流程 断点断在ringbuffer.h文件的write函数这里不管怎样都要经过这里 然后看堆栈 整理一下 RingBuffer<std::shared_ptr<toolkit::List<std::shared_ptr<mediakit::RtpPacket> > > >…

架构运维篇(八):Centos7/Linux中Nginx配置HTTPS支持

文章目标 在Nginx中安装HTTPS证书配置Nginx域名映射映射到shop-web和shop-admin两个项目 版本说明 Nginx : 1.22 配置域名 域名&#xff1a;www.baidu.com Nginx安装目录 /www/server/nginx 第一步&#xff1a;安装HTTPS证书 证书一共有两个文件&#xff1a; 1、www…

深入探究AD域审计:ADAudit Plus为您提供全方位保障

AD域审计是一项至关重要的任务&#xff0c;可以帮助组织保护其网络和数据免受黑客和内部威胁的攻击。ADAudit Plus是一种广泛使用的工具&#xff0c;可以帮助IT团队监控域控制器并检测任何安全问题。 ADAudit Plus 首先&#xff0c;ADAudit Plus提供了实时监视和警报功能&…

数字孪生与元宇宙:数字化科技的双向融合之路

概念 &#xff08;1&#xff09;元宇宙&#xff08;Metaverse&#xff09;是一个虚拟的三维世界&#xff0c;由数字内容和物理世界中的现实空间相互交织而成&#xff0c;能够提供各种虚拟体验&#xff0c;例如虚拟现实、增强现实、虚拟社交、虚拟经济等。在元宇宙中&#xff0…

可观测性的力量:性能和可靠性!

可观测性已成为现代 IT 的一个重要方面&#xff0c;预计其重要性在未来几年只会增加。实时监控和了解系统行为的能力为组织提供了大量信息&#xff0c;可以帮助他们提高网络和应用程序的性能、可靠性和整体健康状况。 通过收集和分析来自各种来源的数据&#xff0c;可观察性使组…

JavaWeb-Tomcat

目录 1.什么是Tomcat 2.Tomcat 概述 3.Tomcat基本使用 1.什么是Tomcat Tomcat官网&#xff1a;Apache Tomcat - Welcome! 【摘自百度百科】 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apac…

测试人必备技能:如何进行WebSocket接口测试?

目录 前言 WebSocket介绍 HTTP与WebSocket的区别 二者关系 WebSocket测试方法 使用Postman 使用Jmeter 使用Python 结语 前言 随着Web应用的日益普及&#xff0c;WebSocket作为一种全双工通信协议&#xff0c;在移动端、游戏、视频会议等方面得到广泛应用。 而对于需…

《程序员面试金典(第6版)》面试题 16.03. 交点(直线的一般式方程,克莱姆法则,行列式,C++)

题目描述 给定两条线段&#xff08;表示为起点start {X1, Y1}和终点end {X2, Y2}&#xff09;&#xff0c;如果它们有交点&#xff0c;请计算其交点&#xff0c;没有交点则返回空值。 要求浮点型误差不超过10^-6。若有多个交点&#xff08;线段重叠&#xff09;则返回 X 值最…

为什么软件测试外包公司更受软件企业欢迎?软件测试报告需要多少钱?

劳动派遣或劳务派遣的用工模式古已有之&#xff0c;是人力资源销售市场不可避免的态势。软件测试顺应时代开展检测业务外包这一行业细分领域&#xff0c;越来越多软件外包公司尤其是小微型企业慢慢意识到了软件测试业务外包通常能够持续减少企业的各种成本费&#xff0c;使企业…

video 视屏播放器详细控制

介绍 canplay、play、pause是video提供的API&#xff0c;在视频加载完成后需要设置视频的总时长duration也是来源于自身的API但是需要格式化时间 设置当前播放时间通过自身API&#xff0c;currentTime function playing(){#id.innerHTMl 格式化时间函数(video.currentTime)…

《用于估计血压变化的光电体积描记图和心电图的特征》阅读笔记

目录 一、摘要 二、十大问题 Q1论文试图解决什么问题&#xff1f; Q2这是否是一个新的问题&#xff1f; Q3这篇文章要验证一个什么科学假设&#xff1f; Q4有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课题在领域内值得关注的研究员&#xff1f; Q5论文中提…

maven简单使用

实验课的作业用一大堆框架/库&#xff0c;统统要用maven管理。 头一次用&#xff0c;真痛苦。 所幸得以解决&#xff0c;maven真香&#xff5e; 一步一步来。 1. maven 不是java人&#xff0c;只能说说粗浅的理解了。 简单来说&#xff0c;maven是一个管理项目的工具&…

自定义编码生成

自定义自增编码规则生成 需求场景开发需求需求实现其它 在项目中遇到的需求&#xff0c;这里记录下实现。以下仅供参考&#xff0c;代码有所删减&#xff0c;但核心代码在需求场景 1.需要多个编号规则&#xff0c;不同的场景使用的编码规则不同。 2.编码需要可自定义灵活选择配…

ts定义对象类型Record<string, any>;和object、Object的区别

Record Record 是 TS 内置的一个高级类型&#xff0c;是通过映射类型的语法来生成索引类型的&#xff1a; type Record<K extends string | number | symbol, T> { [P in K]: T; } 比如传入 a | b 作为 key&#xff0c;1 作为 value&#xff0c;就可以生成这样索引类…

Linux安装tomcat以及 对tomcat服务的操作

目录 1、使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 2、解压安装包&#xff08;解压到指定位置&#xff0c;-C后面指定位置即可&#xff09; 3、进入Tomcat的bin目录去启动服务&#xff08;两种方式&#xff09; 4、验证Tomcat启动是否成功 方式一&#…

你如何看待,“国内ChatGPT还没成熟,但ChatGPT的付费模式已经成熟了?”

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 说来奇怪&#x1f914;&#xff0c;我们从0到1的事往往较少&#xff0c;但从1到100的嫁衣神功却很多也很快。就像 ChatGPT 还没有…

自有品牌与新兴渠道双轮驱动,丽人丽妆提速起航

2023年4月12日&#xff0c;上海市电子商务行业协会评选出上海市数字商务优秀企业&#xff0c;丽人丽妆凭借在数智化营销领域的专业能力&#xff0c;荣获“上海市数字商务优秀企业”称号。 此次获奖&#xff0c;也反映了丽人丽妆以科技赋能企业高效运营&#xff0c;已经取得突出…