51单片机--点亮LED灯和流水灯

news2024/9/20 22:34:55

文章目录

  • 前言
  • LED模块的原理
  • 点亮一个LED灯
  • LED灯的闪烁
  • LED流水灯

前言

大家好,这里是诡异森林。我使用的是普中科技的A2的51开发板,适合新手入门。用到的应用是Keil5和Stc-isp,第一个软件主要用来写代码的,第二个是将代码程序输送到单片机上,当然上面还提供一些经常使用的函数模块。
在这里插入图片描述
在这里插入图片描述

LED模块的原理

在这里插入图片描述

上图是LED模块的原理图,LED是基于数字信号控制LED灯的亮灭。在这里,是一行由8个LED灯组成的模块。电流会向LED发送高电平信号,使LED处于熄灭状态,我们可以通过改变信号的状态来决定它的亮灭。
首先电路从正极(VCC)出发,然后通过一个1k欧的电阻(限流作用),然后流入发光二极管的正极,负极流出,最后到电路中的P2口。
这个P2口是与芯片链接的。

在这里插入图片描述
在这里插入图片描述
如上图,P2是寄存器,CPU可通过程序来直接控制寄存器;寄存器通过驱动器控制电压,当驱动器为1时,为高电平(5V),为0时低电平(0V),所以程序可以通过二进制1/0来控制电路的高低电平,进而控制LED的亮灭。

点亮一个LED灯

在电路中,能识别的信号就是正负极,我们用1/0的二进制数字信号来进行表示,在写程序中,习惯用16进制来进行表示。
当电路接通后,电路中的LED默认为高电平(1),我们需要把它改为低电平(0),LED灯才会被点亮,所以我们可以这么写:

#include <REGX52.H>
//这是一个51单片机的头文件
int main()
{
		P2=0xFE;//P2已被包含在文件中,表示寄存器,可控制LED
		//二进制为 1111 1110
}

效果:
在这里插入图片描述

LED灯的闪烁

我们可以通过程序让它不断形成高低电平,那么LED灯将会闪烁。所以可以用while循环,但这里要注意的是,由于led引脚的电平持续在0、1之间变化,变化频率非常快,在MHz量级,导致的结果就是百直接看不到灯闪烁。所以我们还需要一个延迟函数减缓它的闪烁频率。

#include <REGX52.H>
#include <INTRINS.H>//包括nop函数
void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	_nop_();//单周期指令,可由晶振频率来延迟时间
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


int main()
{
	while(1)
	{
		P2=0xFE;
		//亮 1111 1110
		Delay500ms();
		//延迟500毫秒
		P2=0xFF;
		//灭 1111 1111
		Delay500ms();
	}
}

LED流水灯

当我们明白这些原理之后,就可以通过控制每一个LED灯来跑流水灯了。
代码:

#include <REGX52.H>
void Delay1ms(unsigned int x)		//@11.0592MHz
{
	unsigned char i, j;
	while(x--)//可通过循环来延迟时间频率
	{

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

int main()
{
	int i;
	char hex[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
	//写一个数组表示不同灯亮起
	while(1)
	{
		for( i=0;i<8;i++)
		{
			P2=hex[i];
			Delay1ms(500-50*i);
			//时间频率越来越快
		}
	}
}

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

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

相关文章

RocketMQ5.0--部署与实例

RocketMQ5.0–部署与实例 一、Idea调试 1.相关配置文件 在E:\rocketmq创建conf、logs、store三个文件夹。从RocketMQ distribution部署目录中将broker.conf、logback_namesrv.xml、logback_broker.xml文件复制到conf目录。如下图所示。 其中logback_namesrv.xml、logback_b…

2.2.cuda驱动API-初始化和检查的理解,CUDA错误检查习惯

目录 前言1. cuInit-驱动初始化2. 返回值检查总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记 本次课程学习精简 CUDA 教程-Driver API 案例…

氢燃料电池汽车储氢技术及其发展现状

摘要&#xff1a; 氢能的发展可有效地解决经济发展和生态环境间日益增长的矛盾。氢燃料汽车将处于氢能产业体系中核心地位&#xff0c;加快对氢燃料电池车的技术研发&#xff0c;大范围提高氢能源利用率&#xff0c;对于全世界形成以低碳排放为特征的工业体系具有重要意义。在…

【数据库】忘记mysql本地密码

目录 说明 操作步骤操作失败解决1.在以上操作步骤的第四步&#xff0c;输入mysql&#xff0c;报错第一种报错解决办法如下 第二种报错解决办法如下 2.从上面操作第二步后重新操作步骤如下报错解决办法如下 参考链接 说明 太久没使用本地mysql数据库&#xff0c;忘记了密码。 …

禅意工作-诗意生活

“禅意工作&#xff0c;诗意生活”能做到这两点&#xff0c;非常非常非常难。 AI的解释&#xff1a; “禅意工作&#xff0c;诗意生活”是一种追求内心平和与幸福的生活方式&#xff0c;它将工作与生活相结合&#xff0c;达到一种和谐的状态。以下是一些关于如何实现“禅意工…

GitHub快速上手--GitHub高效操作教程

一、前言 如果你正在看我的这篇文章&#xff0c;说明你已经对GitHub有了一些基础的了解&#xff0c;下面我们将详细叙述每一步的操作&#xff0c;以保证你能够快速上手GitHub&#xff0c;完成对代码的管理。 二、创建仓库 登录GitHub账号&#xff0c;点击页面右上角的加号&am…

flutter聊天界面-自定义表情键盘实现

flutter聊天界面-自定义表情键盘实现 flutter 是 Google推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App&#xff0c;一套代码同时运行在 iOS 和 Android平台。 flutter开发基础腾讯IM的聊天应用&#xff0c;使用的是t…

PADS Layout中显示与布线标签页参数设置

1.“显示”标签页如图1 所示&#xff1a; 图1 显示标签页 显示标签页是用于去设置网络名以及管脚编号的字体大小的设置&#xff0c;建议是可以采取默认设置的&#xff0c;如果自己设计有另外要求&#xff0c;也是可以去进行设置。 2.“布线”标签也有三个子标签&#xff0c;首先…

基于matlab使用两个图像估计校准相机的姿势(附源码)

一、前言 运动结构 &#xff08;SfM&#xff09; 是从一组 3-D 图像估计场景的 2-D 结构的过程。此示例演示如何从两个图像估计校准相机的姿势&#xff0c;将场景的三维结构重建为未知比例因子&#xff0c;然后通过检测已知大小的对象来恢复实际比例因子。 此示例演示如何从使…

2.标识符、关键字、保留字

1、标识符 标识符&#xff1a;就是指开发人员为变量、属性、函数、参数取的名字 注意&#xff1a;标识符不能是关键字或保留字 JavaScript标识符 在JavaScript中&#xff0c;标识符&#xff08;Identifier&#xff09;是用于标识变量、函数、对象、属性或其他编程元素的名称。…

如何实现CesiumJS的视效升级?

CesiumJS作为一款强大的地理可视化引擎&#xff0c;为我们提供了丰富的地球数据可视化和交互展示的能力。然而&#xff0c;随着用户需求的不断增加和技术的不断进步&#xff0c;如何进一步提升CesiumJS的视觉效果成为了一个重要的问题。 首先&#xff0c;为了实现CesiumJS视觉…

Docker(二)之容器技术所涉及Linux内核关键技术

容器技术所涉及Linux内核关键技术 一、容器技术前世今生 1.1 1979年 — chroot 容器技术的概念可以追溯到1979年的UNIX chroot。它是一套“UNIX操作系统”系统&#xff0c;旨在将其root目录及其它子目录变更至文件系统内的新位置&#xff0c;且只接受特定进程的访问。这项功…

国内几款常用热门音频功放芯片-低功耗、高保真

音频功放芯片&#xff0c;又称为音频功率放大器芯片&#xff0c;是指一种将音频信号转换成线性的输出功率的集成电路芯片&#xff0c;在音频功放领域中一类是传统意义上的模拟功放&#xff1b;另一类是数字功放&#xff0c;它们都可以实现模拟信号到数字信号的转换。 随着智能…

[Java基础] StringBuffer 和 StringBuilder 类应用及源码分析

系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用及源码分析 [Java基础] String&#xff0c;分析内存地址&#xff0c;源码 文章目录 系列文章目录前言1、特性1.1、操作StringBuffer不会生成新的对象1.2、对比操作String会生成新…

el-tab-pane 和el-tooltip及el-tree 组合使用

<el-tabs v-model"groupId" tab-click"handleClick"><el-tab-pane label"全部" name"0"></el-tab-pane><el-tab-pane v-for"items in editableTabs" :key"items.group_id" :name"item…

Rust环境配置

专栏简介&#xff1a;本专栏作为Rust语言的入门级的文章&#xff0c;目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言&#xff0c;虽然历史没有C、和python历史悠远&#xff0c;但是它的优点可以说是非常的多&#xff0c;既继承了C运行速度&#xff0c;还拥有了Java…

动态规划之 70爬楼梯(第2道)

题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例&#xff1a; 解法&#xff1a; class Solution { public:int climbStairs(int n) {vector<int> dp(n1);//n1个数…

IDEA+SpringBoot+mybatis+SSM+layui+Mysql学生学籍管理系统

IDEASpringBootmybatisSSMlayuiMysql学生学籍管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.专业管理3.班级管理4.学生管理5.老师管理6.公告管理7.课程管理8.开课管理9.用户管理 三、部分代码UserDao.javaUserController.javaUser.java 四、其他获取源码 一、系…

WEB中表单案例

一、题目&#xff1a;书写如下图的web前端 二、解题代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Webstorm+Nodejs+webpack+vue-cli+Git搭建vue环境

此笔记归纳整理webstorm搭建vue项目&#xff0c;仅作记录使用。 一、安装Webstorm1、双击运行安装包2、设置安装路径3、按需选择4、安装5、运行6、激活 二、安装node.js1、双击运行安装包2、设置安装路径3、验证安装4、修改全局模块下载路径5、更换npm源6、全局安装基于淘宝源…