如何使用单片机点亮LED灯,并使用按键控制[51单片机]

news/2025/4/1 2:13:00/

首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同

我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯

 

那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上,那么只需要操作这几个接口的高低电频,就可以让他亮起来,0是亮1是不亮

 而这几个接口对应着二进制数字,比如我输入11111110,注意这里是8位数字,对应着板子上的8个灯,只有最后一位是0,那么就只有最后一位会亮,但是板子他不识别2进制代码,我们要转换为16进制代码

 例如就刚刚的11111110,转换为2进制就是FE,因为F是1111,E是1110,两个加起来就对了

上代码

#include <REGX52.H>
void main(){//我是重复执行while(1){//我是注释,0x代表他是16进制P2=0xFE;}
}

 结果:

接下来我们需要用按键来控制,那其实按键也是靠正低电平来区分

按键模块

 

我们可以看见按键模块是连接在p3.多少的位置,那如果你要控制p31的按键那么就要去找p3.1,要控制p32的按键,就要去找p3.2

 那接下来我们来控制灯光,我们还要一种新的办法来控制灯,不用一直写二进制来找灯的位置,而是通过选中某个灯来决定,还是这张图,例如我们要控制p20的灯,那么就去单片机核心去找他连接的位置,我们可以看见p20连接的是p2.0,那么我们就可以对他进行控制

上代码:

这段代码很简单,就是按下的时候就亮,不按就不亮。

#include <REGX52.H>
void main(){while(1){//判断是否被按下,按下是0,不按是1if (P3_1==0){//如果按下就让他亮P2_0=0;}else{//否则,就等于是1,就不亮P2_0=1;}}
}

接下来我们要通过按键来控制,例如按下一次我们依次让灯亮起来,那其实按照我们之前给他设定二进制的值的时候,他的数值就是,11111110,11111101,这样依次往前变化,他就能实现了,关键我们要怎么去处理这件事情

>>> int('00000001',2)
1
>>> int('00000010',2)
2
>>>  int('00000100',2)SyntaxError: unexpected indent
>>> int('00000100',2)
4
>>> int('00001000',2)
8
>>> int('00010000',2)
16

可以看到这个代码,2进制的数字是不是也每次向前动了一位,不过动的是1,但是1是不亮啊,0才是亮,所以最后我们可以对他们进行取反,0取反就是1,所以00000001,取反就是11111110,那么就可以完成了,再看他们的十进制数字的规律,每次都是乘以2,那么我们是不是可以用十进制的数字来解决这道题,(这里会有些绕,需要大家理解,或者直接看代码)

#include <REGX52.H>
#include <stdio.h>
void Delay1ms(unsigned int xms)     //这是一个延时器,不用管他,每次调用延时
{unsigned char i, j;while(xms){i = 11;j = 190;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNum=1;//设置一个变量{while(1){//判断是否按下if (P3_1==0){//延时2o毫秒Delay1ms(20);while(P3_1==0);Delay1ms(20);//重要看这里,我们将值取反P2=~LEDNum;//然后每次乘以2LEDNum=LEDNum*2;}}}
}

这样我们每次按下按键就会依次点亮


http://www.ppmy.cn/news/69662.html

相关文章

【Python】【进阶篇】35、Django Model三种继承模型详解

目录 35、Django Model三种继承模型详解1. objects查询管理器2. Model的继承模型1) 抽象基类2) 多表继承3) 代理模型 35、Django Model三种继承模型详解 在 Django 中每个 Model 都是一个 Pyhton 类&#xff0c;前文之前提到过 Model 继承自django.db.models.Model。通过类之间…

《Netty》从零开始学netty源码(五十八)之NioEventLoop.execute()

目录 NioEventLoop.execute()addTask()startThread()NioEventLoop.run()select()处理keys与执行任务processSelectedKeys()处理AbstractNioChannelselectAgain() runAllTasks()fetchFromScheduledTaskQueue()runAllTasksFrom()afterRunningAllTasks() 带截止时间的runAllTasks(…

直流电机 PID 控制系统仿真研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

声音合成——Foley Sound——DECASE项目——多模态智能感知与应用——项目复现

文章目录 概述项目复现配置环境下载并配置文件运行代码第一阶段&#xff0c;训练提取DTFR特征的模型资料搜集 train_vqvae.py 第二阶段&#xff0c;使用训练好的模型提取声音的DTFR特征torch.cuda.OutOfMemoryError: CUDA out of memory. 第三阶段&#xff0c;基于特征训练合成…

vue项目

npm run serve 运行项目 cd …/ 返回上一级目录 cd abc 进入当目录的abc文件 vue -V 查看vue-cli版本 npm i 将package.json中文件下载一遍 更改vue.config.js内容 需要重启项目才能生效 创建vue文件时选择Options API /views/indexView.vue 直接从src文件 开始找 npm i --…

etcd和redis 区别和对比

Etcd 特点 etcd是一种分布式存储&#xff0c;更强调的是各个节点之间的通信&#xff0c;同步&#xff0c;确保各个节点上数据和事务的一致性&#xff0c;使得服务发现工作更稳定&#xff0c;本身单节点的写入能力并不强。 简单&#xff1a;定义清晰、面向用户的API&#xff0…

SpringBoot @JsonProperty + @JsonMixin注解 实现返回json数据key的转换

参考资料 Springboot 一个注解搞定返回参数key转换 【实用】Spring Boot 2.7新特性&#xff1a;JsonMixin 目录 一. 需求二. 前期准备三. 解决方式一: JsonProperty注解三. 解决方式二: JsonProperty JsonMixin注解3.1 方式1 混入单个类3.1.1 创建一个被JsonMixin注解修饰的抽…

网络:网络分层与协议/OSI七层模型/(TCP/IP模型)

一、简单理解 OSI模型(Open System Interconnection)&#xff1a; 七层模型&#xff0c;亦称OSI&#xff08;Open System Interconnection&#xff09;。参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一般…