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

点亮你的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输出低电平),间隔点亮、熄灭
c 复制代码
#include <reg52.h>

const int TIME_MS = 100;

sbit LED1 = P2^0;    // 定义LED1对应到P2.0引脚

void delay_10us(int delay_time) {  // 比较暴力的延时方法,执行一个--循环耗时大概是10us
	while(delay_time--);
}

void main() {
    while(1) {
	    LED1 = 0;  // 引脚输出低电平,可以驱动LED点亮
		delay_10us(500 * TIME_MS);   //  约500ms
		LED1 = 1;	 
		delay_10us(500 * TIME_MS);
	}
}

3.LED流水灯

  • 结合之前讲的知识,可以直接操作P2端口的输出值来操控LED的状态,可以实现如下流水灯程
c 复制代码
#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开始移动,取反之后就可以变为移动0
		if (count >= 8){ 
		    count = 0;	  // 重置计数
		} else  {
		    count++;
		    delay_10us(100 * TIME_MS);
		}
	}
}
c 复制代码
#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站-普中官方视频

相关推荐
iCxhust6 小时前
51单片机电力载波应用开发(4)单片机发PC端接收
单片机·嵌入式硬件·51单片机
国科安芯9 小时前
断电也隔离、听得真:ASL3159S 单通道 SPDT 模拟开关的“断电保护 + 音频保真“账
单片机·嵌入式硬件·安全·商业航天·抗辐射
自小吃多9 小时前
【Verilog/FPGA】存储器(数组)
嵌入式硬件·fpga开发
szxinmai主板定制专家9 小时前
RK3588+FPGA异构架构|高速数据采集+边缘AI落地应用全解析
人工智能·嵌入式硬件·fpga开发·架构·zynq
M78佐菲9 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲9 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
小程序设计9 小时前
基于STM32的智慧厨房多参数安全监测与预警系统设计
stm32·嵌入式硬件·安全
小诗懂技术10 小时前
【裸机lcd】framebuffer的配置与小型图像库的移植
arm开发·单片机·嵌入式硬件·裸机
comyccccc11 小时前
3.3V稳压电源设计与PCB实现学习笔记
单片机·嵌入式硬件
小程序设计12 小时前
基于STM32森林火灾远程监测模块设计
stm32·单片机·嵌入式硬件