【51单片机】02LED流水灯实验

news/2025/1/8 12:59:41/

点亮你的LED

  • 一、点亮第一个LED
    • 1.GPIO介绍
    • 2.P1、P2、P3端口
  • 二、LED实验
    • 2.尝试点亮LED
    • 3.LED流水灯

一、点亮第一个LED

1.GPIO介绍

这块内容这里可以做简单的了解,与数电知识强相关。后续可以再回过头来学习

  • GPIO (general purpose input output) 通用输入输出端口的简称,可以通过软件来控制其输入与输出
    在这里插入图片描述

  • GPIO的工作原理
    在这里插入图片描述

  • P0口作为输出端口的时候,多路开关是连接到D锁存器的
    在这里插入图片描述

  • P0作为输入端口时,直接与读缓冲器相连
    在这里插入图片描述

2.P1、P2、P3端口

  • P1口只能作为单独的IO口使用,他有上拉电阻,可以输出高电频
    在这里插入图片描述
  • P2端口同时具有P0和P1的特点,有上拉电阻、也有多路选择开关
    在这里插入图片描述
  • P3口,相比P1多了一个第二功能的输入端口
    在这里插入图片描述

二、LED实验

2.尝试点亮LED

  • D1-D8的LED和单片机的P2端口相连,原理图如下,只要让P2.x的引脚为低电平,就能使发光二极管导通
    在这里插入图片描述
  • 设计实验目标:点亮D1指示灯(P2.0输出低电平),间隔点亮、熄灭
#include <reg52.h>const int TIME_MS = 100;sbit LED1 = P2^0;    // 定义LED1对应到P2.0引脚void delay_10us(int delay_time) {  // 比较暴力的延时方法,执行一个--循环耗时大概是10uswhile(delay_time--);
}void main() {while(1) {LED1 = 0;  // 引脚输出低电平,可以驱动LED点亮delay_10us(500 * TIME_MS);   //  约500msLED1 = 1;	 delay_10us(500 * TIME_MS);}
}

3.LED流水灯

  • 结合之前讲的知识,可以直接操作P2端口的输出值来操控LED的状态,可以实现如下流水灯程
#include "reg52.h"
// 小灯循环跑
const int TIME_MS = 100;void delay_10us(int time_us) {while(time_us--);
}void main() {int count = 0; P2 = 0xff;	// 将P2口赋初值,高电平,小灯全部熄灭  while(1){P2 = ~(0x01<<count);  // 这里用低位为1开始移动,取反之后就可以变为移动0if (count >= 8){ count = 0;	  // 重置计数} else  {count++;delay_10us(100 * TIME_MS);}}
}
#include "reg52.h"
// 小灯来回跑
const int TIME_MS = 100;void delay_10us(int time_us) {while(time_us--);
}void main() {int count = 0; char flag = 0;P2 = 0xff;	// 将P2口赋初值,高电平,小灯全部熄灭while(1){switch(flag) {case 0:P2=~(0x01<<count);count++;if (count > 8) flag = 1;break;case 1:P2=~(0x80>>(8 - count));count--;if (count < 0) flag = 0;break;}delay_10us(30 * TIME_MS);}
}

源码+实验程序
学习视频来源:B站-普中官方视频


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

相关文章

IDEA使用Git同步教程

目录 &#x1f552; 1. IDEA配置&#x1f552; 2. 项目上传到本地仓库&#x1f558; 2.1 创建本地git仓库&#x1f558; 2.2 Add&#x1f558; 2.3 Commit &#x1f552; 3. 项目上传到Github&#x1f552; 4. 报错解决 &#x1f552; 1. IDEA配置 首先下载安装好Git&#xff…

whowantstobeking靶场

1.扫描靶机IP与端口 2.访问端口 3. 将文件复制到kali中使用strings进行访问文件&#xff0c;得到ZHJhY2FyeXMK 4.进行base64位解码得到 dracarys 5.使用ssh远程登录访问 6.查看隐藏文件 7.去访问.local文件 8.解压压缩包&#xff0c;访问得到root密码 去登录root用户 9.进入n…

如何解决数据库和缓存不一致的问题

目录 一、Cache-Aside模式&#xff08;旁路缓存模式&#xff09; 二、Write-Through模式&#xff08;写透缓存模式&#xff09; 三、Write-Behind模式&#xff08;写回缓存模式&#xff09; 四、先删除缓存再更新数据库&#xff08;不推荐&#xff0c;存在风险&#xff09;…

使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋

目录 1.工具以及概念介绍 &#xff08;1&#xff09;Clion软件简介 &#xff08;2&#xff09;交叉编译 &#xff08;3&#xff09;远程编译 2.操作原理 3.详细操作步骤 &#xff08;1&#xff09;配置Clion与虚拟机ubuntu的ssh连接 CLion远程开发Ubuntu&#xff0c;并显…

mybatisPlus拦截sql失败----已解决

1. 在使用MybatisPlusInterceptor想对数据权限做限制&#xff0c;但是发现使用寻常的配置&#xff0c;在执行sql后也不会被拦截 代码如下&#xff1a; Configuration public class MybatisPlusConfig { public MybatisPlusInterceptor setMybatisPlusInterceptor(){ MybatisPlu…

SQL使用视图

本文将介绍什么是视图&#xff0c;它们怎样工作&#xff0c;何时使用它们。 1. 视图 视图是虚拟的表。与包含数据的表不一样&#xff0c;视图只包含使用时动态检索数据的查询。 说明&#xff1a;SQLite 的视图 SQLite 仅支持只读视图&#xff0c;所以视图可以创建&#xff…

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能&#xff0c;选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其&#xff0c;在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换&#xff0c;特别方便。VS文件另…

CSS语言的多线程编程

CSS语言的多线程编程探讨 1. 引言 在现代前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;已经成为了网页设计中不可或缺的重要组成部分。它不仅负责网页的外观和布局&#xff0c;还通过各种工具和框架扩展了其功能和特性。然而&#xff0c;随着网页复杂度的提升…