当前位置: 首页 > news >正文

51单片机学习——LED功能一系列实现

目录

一、开发前准备

二、点亮LED

三、LED闪烁

四、LED流水灯

五、LED流水灯plus


一、开发前准备

开发工具软件

烧录软件

其次还需要一块51单片机学习开发板及原理图

keil创造project文件及开启生成.hex文件

二、点亮LED

看二位进制对照原理图;

#include <REGX52.H>
void main()
{P1=0xFE;
}

三、LED闪烁

了解数据类型

在STC-isp中,在软件延时计算器中; 

生成C代码后;复制粘贴到keil中;

添加头文件;延迟函数头文件;

include<INTRINS.H>

 循环向左递位

 运行main.c;生成.hex文件,用烧录文件进行烧录;

#include <REGX52.H>
sbit p1_1=P1^0;
unsigned int a;
void main()
{while(1){a=50000;p1_1=0;while(a--);a=50000;p1_1=1;while(a--);}
}

四、LED流水灯

调用延迟函数返回参数;

  1. 初始化temp变量为0xfe,这表示P1端口的高7位是高电平,最低位是低电平。如果P1端口连接了8个LED灯,这意味着除了最右边的LED灯外,其余的LED灯都是关闭状态。

  2. 在主循环中,使用_crol_内建函数将temp的值循环左移一位。这个操作会将temp最低位的值移动到最高位,其余位向左移动。因此,每次调用_crol_后,temp的值都会改变,使得下一个LED灯被点亮。

  3. 调用delay函数来实现延时。这个延时确保LED灯的点亮和熄灭足够慢,从而形成流水灯的动态效果。

  4. 更新P1端口的值,将temp的当前值输出到P1端口,这样LED灯的状态就会根据temp的值改变。

  5. 重复步骤2到4,形成一个连续的流水灯效果。

//Á÷Ë®µÆ
#include <REGX52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp; //8λÎÞ·ûºÅ×Ö·ûÐÍ
void delay(uint z)//ÑÓʱº¯Êý£»µ÷ÓòÎÊý£»ºÁÃ룻
{uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);
}void main()
{temp =0xfe;P1=temp;while(1){temp=_crol_(temp,1);delay(600);P1=temp;}
}

五、LED流水灯plus

用生成1ms的函数来实现流水灯,这样就不需要一个一个换数了,和上面类似

#include <REGX52.H>
#include <intrins.h>void Delay1ms(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){P1=0xfe;//1111 1110Delay1ms(100);P1=0xfd;Delay1ms(100);P1=0xfb;Delay1ms(100);P1=0xf7;Delay1ms(100);P1=0xff;Delay1ms(100);P1=0xef;Delay1ms(100);P1=0xdf;Delay1ms(100);P1=0xbf;Delay1ms(100);P1=0x7f;Delay1ms(100);//0111 1111}}

这代码用于8051微控制器的C语言程序,实现了一个简单的LED流水灯效果。

1. `#include <REGX52.H>` - 包含针对AT89C52(一种8051系列微控制器)的寄存器定义和特殊功能寄存器(SFR)的头文件。

2. `#include <intrins.h>` - 包含一些内建函数的头文件,比如`_nop_()`(空操作,用于延时)。

3. `void Delay1ms(unsigned int xms)` - 定义了一个名为`Delay1ms`的函数,它接受一个无符号整型参数`xms`,表示需要延时的毫秒数。

4. `unsigned char i, j;` - 在`Delay1ms`函数内部声明了两个无符号字符变量`i`和`j`,用于实现延时。

5. `while(xms)` - 一个循环,当`xms`不为0时继续执行。

6. `i = 2;` - 将`i`初始化为2。

7. `j = 239;` - 将`j`初始化为239。

8. `do { ... } while (--i);` - 一个`do...while`循环,内部是一个`while`循环,执行`j`次,每次`j`递减直到0,然后`i`递减。这个循环用于实现微秒级的延时。

9. `while (--j);` - 内部的`while`循环,直到`j`递减到0。

10. `xms--;` - 每次外层循环结束时,`xms`递减1。

11. `void main()` - 主函数的开始。

12. `while(1)` - 一个无限循环,使得程序持续运行。

13. `P1=0xfe;` - 将P1端口的值设置为`0xfe`(二进制`11111110`),如果P1端口连接了LED灯,这将点亮除了最右边的LED之外的所有LED。

14. `Delay1ms(100);` - 调用`Delay1ms`函数,延时100毫秒。

15. 接下来的几行代码重复上述步骤,但是每次将P1端口的值设置为下一个二进制数,实现LED灯逐个点亮的效果。

16. `P1=0xff;` - 将P1端口的值设置为`0xff`(二进制`11111111`),所有LED灯都熄灭。

17. 最后几行代码是将LED灯从最左边开始逐个点亮,直到所有LED灯都亮起。

整个程序通过改变P1端口的输出值,控制连接到P1端口的LED灯依次点亮和熄灭,从而形成一种流水灯的效果。`Delay1ms`函数用于控制每次LED灯状态改变之间的延时,使得流水灯效果更加明显。这个延时函数是基于8051微控制器在12MHz时钟频率下的实现,实际延时效果可能需要根据具体的时钟频率进行调整。
 

 

相关文章:

51单片机学习——LED功能一系列实现

目录 一、开发前准备 二、点亮LED 三、LED闪烁 四、LED流水灯 五、LED流水灯plus 一、开发前准备 开发工具软件 烧录软件 其次还需要一块51单片机学习开发板及原理图 keil创造project文件及开启生成.hex文件 二、点亮LED 看二位进制对照原理图&#xff1b; #include <…...

互联网大厂核心知识总结PDF资料

我们要敢于追求卓越&#xff0c;也能承认自己平庸&#xff0c;不要低估3&#xff0c;5&#xff0c;10年沉淀的威力 hi 大家好&#xff0c;我是大师兄&#xff0c;大厂工作特点是需要多方面的知识和技能。这种学习和积累一般人需要一段的时间&#xff0c;不太可能一蹴而就&…...

设计模式-状态模式和策略模式

1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为&#xff1b; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…...

Java NIO Buffer概念

针对每一种基本类型的 Buffer &#xff0c;NIO 又根据 Buffer 背后的数据存储内存不同分为了&#xff1a;HeapBuffer&#xff0c;DirectBuffer&#xff0c;MappedBuffer。 HeapBuffer 顾名思义它背后的存储内存是在 JVM 堆中分配&#xff0c;在堆中分配一个数组用来存放 Buffe…...

Kubernetes在Java应用部署中的最佳实践

Kubernetes在Java应用部署中的最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Java应用程序中使用Kubernetes进行最佳部署实践。K…...

IOS Swift 从入门到精通:@escaping 和PreferenceKey

@escaping 在Swift中,@escaping是一个属性关键字,用于标记闭包参数。当一个闭包在函数返回之后才被调用时,这个闭包被称为逃逸闭包(Escaping Closure)。使用@escaping关键字可以告诉Swift编译器,传递给函数的闭包可能会在函数执行完毕后被调用,因此它需要“逃逸”函数的…...

基于PHP技术的校园论坛设计的设计与实现-计算机毕业设计源码08586

摘 要 本项目旨在基于PHP技术设计与实现一个校园论坛系统&#xff0c;以提供一个功能丰富、用户友好的交流平台。该论坛系统将包括用户注册与登录、帖子发布与回复、个人信息管理等基本功能&#xff0c;并结合社交化特点&#xff0c;增强用户之间的互动性。通过利用PHP语言及其…...

开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“开机提示找不到OpenCL.dll”。那么&#xff0c;这个错误提示到底是怎么回事呢&#xff1f;它又对电脑有什么影响&#xff1f;我们又该如何解决这个问题并预防OpenCL.dll再次丢失呢&#xff1…...

IIS 服务器安装SSL证书

IIS 服务器安装SSL证书 步骤一&#xff1a;准备好 SSL 证书 准备好.pfx 格式的证书文件。 步骤二&#xff1a;安装 SSL 证书 1、打开【开始】菜单&#xff0c;找到【管理工具】&#xff0c;打开【Internet 信息服务&#xff08;IIS&#xff09;管理器】。 2、单击服务器名…...

二叉树第二期:堆的实现与应用

若对树与二叉树的相关概念&#xff0c;不太熟悉的同学&#xff0c;可移置上一期博客 链接&#xff1a;二叉树第一期&#xff1a;树与二叉树的概念-CSDN博客 本博客目标&#xff1a;对二叉树的顺序结构&#xff0c;进行深入且具体的讲解&#xff0c;同时学习二叉树顺序结构的应用…...

python-求出 e 的值

[题目描述] 利用公式 e11/1!1/2!1/3!⋯1/&#x1d45b;!&#xff0c;求 e 的值&#xff0c;要求保留小数点后 10 位。输入&#xff1a; 输入只有一行&#xff0c;该行包含一个整数 n&#xff0c;表示计算 e 时累加到1/n!。输出&#xff1a; 输出只有一行&#xff0c;该行包含计…...

模型微调方法

文章目录 LoRADoRAMoRA 以下部分参考自: https://mp.weixin.qq.com/s/OxYNpXcyHF57OShQC26n4g LoRA LoRA是微软于2021年推出的一种经济型微调模型参数的方法。 它在冻结大部分的模型参数的情况下&#xff0c;仅仅更新额外的部分参数。其性能与全参数微调相似。 LoRA假设微调期间…...

cesium使用cesium-navigation-es6插件创建指南针比例尺

cesium-navigation-es6 是一个为 Cesium.js 提供导航控件的库&#xff0c;它提供了一些常见的用户界面组件&#xff0c;用于在 Cesium 场景中实现用户导航和交互。下面将介绍如何在项目中使用 cesium-navigation-es6。 使用步骤 1. 安装 cesium-navigation-es6 首先&#xf…...

go sync包(七)Sync.Map

Sync.Map 原理 通过 read 和 dirty 两个字段实现数据的读写分离&#xff0c;读的数据存在只读字段 read 上&#xff0c;将最新写入的数据存在 dirty 字段上。读取时会先查询 read&#xff0c;不存在再查询 dirty&#xff0c;写入时则只写入 dirty。读取 read 并不需要加锁&am…...

Batch文件中的goto命令:控制流程的艺术

Batch文件&#xff0c;也称为批处理脚本&#xff0c;是Windows操作系统中用于自动化任务的一种脚本文件。在Batch脚本中&#xff0c;goto命令是一个至关重要的控制结构&#xff0c;它允许脚本跳转到指定的标签位置&#xff0c;从而实现循环、条件分支等复杂的控制流程。本文将详…...

【chatgpt】两层gcn提取最后一层节点输出特征,如何自定义简单数据集

文章目录 两层gcn&#xff0c;提取最后一层节点输出特征&#xff0c;10个节点&#xff0c;每个节点8个特征&#xff0c;连接关系随机生成&#xff08;无全连接层&#xff09;如何计算MSE 100个样本&#xff0c;并且使用批量大小为32进行训练第一个版本定义数据集出错&#xff0…...

Java面试题:讨论你如何保持对Java生态系统中新技术的了解

保持对Java生态系统中新技术的了解可以通过以下几种方法&#xff1a; 官方资源&#xff1a; Oracle的官方博客和新闻&#xff1a;Oracle是Java的主要维护者&#xff0c;其官方网站和博客会定期发布Java的新版本、功能更新和最佳实践。Java SE Documentation&#xff1a;Java官方…...

深度学习之Transformer模型的Vision Transformer(ViT)和Swin Transformer

Transformer 模型最初由 Vaswani 等人在 2017 年提出,是一种基于自注意力机制的深度学习模型。它在自然语言处理(NLP)领域取得了巨大成功,并且也逐渐被应用到计算机视觉任务中。以下是两种在计算机视觉领域中非常重要的 Transformer 模型:Vision Transformer(ViT)和 Swi…...

玩个游戏 找以下2个wordpress外贸主题的不同 你几找到几处

Aitken艾特肯wordpress外贸主题 适合中国产品出海的蓝色风格wordpress外贸主题&#xff0c;产品多图展示、可自定义显示产品详细参数。 https://www.jianzhanpress.com/?p7060 Ultra奥创工业装备公司wordpress主题 蓝色风格wordpress主题&#xff0c;适合装备制造、工业设备…...

React Native优质开源项目推荐与解析

目录 2. React Native的优势 2.1. 跨平台开发 2.2. 热更新 2.3. 丰富的社区资源 2.4. 优秀的性能 3. 优质开源项目推荐 3.1. React Navigation 3.1.1 项目简介 3.1.2 特点和优势 3.1.3 应用场景 3.2. Redux 3.2.1 项目简介 3.2.2 特点和优势 3.2.3 应用场景 3.3…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...