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流水灯
调用延迟函数返回参数;
-
初始化
temp变量为0xfe,这表示P1端口的高7位是高电平,最低位是低电平。如果P1端口连接了8个LED灯,这意味着除了最右边的LED灯外,其余的LED灯都是关闭状态。 -
在主循环中,使用
_crol_内建函数将temp的值循环左移一位。这个操作会将temp最低位的值移动到最高位,其余位向左移动。因此,每次调用_crol_后,temp的值都会改变,使得下一个LED灯被点亮。 -
调用
delay函数来实现延时。这个延时确保LED灯的点亮和熄灭足够慢,从而形成流水灯的动态效果。 -
更新P1端口的值,将
temp的当前值输出到P1端口,这样LED灯的状态就会根据temp的值改变。 -
重复步骤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 看二位进制对照原理图; #include <…...
互联网大厂核心知识总结PDF资料
我们要敢于追求卓越,也能承认自己平庸,不要低估3,5,10年沉淀的威力 hi 大家好,我是大师兄,大厂工作特点是需要多方面的知识和技能。这种学习和积累一般人需要一段的时间,不太可能一蹴而就&…...
设计模式-状态模式和策略模式
1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…...
Java NIO Buffer概念
针对每一种基本类型的 Buffer ,NIO 又根据 Buffer 背后的数据存储内存不同分为了:HeapBuffer,DirectBuffer,MappedBuffer。 HeapBuffer 顾名思义它背后的存储内存是在 JVM 堆中分配,在堆中分配一个数组用来存放 Buffe…...
Kubernetes在Java应用部署中的最佳实践
Kubernetes在Java应用部署中的最佳实践 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Java应用程序中使用Kubernetes进行最佳部署实践。K…...
IOS Swift 从入门到精通:@escaping 和PreferenceKey
@escaping 在Swift中,@escaping是一个属性关键字,用于标记闭包参数。当一个闭包在函数返回之后才被调用时,这个闭包被称为逃逸闭包(Escaping Closure)。使用@escaping关键字可以告诉Swift编译器,传递给函数的闭包可能会在函数执行完毕后被调用,因此它需要“逃逸”函数的…...
基于PHP技术的校园论坛设计的设计与实现-计算机毕业设计源码08586
摘 要 本项目旨在基于PHP技术设计与实现一个校园论坛系统,以提供一个功能丰富、用户友好的交流平台。该论坛系统将包括用户注册与登录、帖子发布与回复、个人信息管理等基本功能,并结合社交化特点,增强用户之间的互动性。通过利用PHP语言及其…...
开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法
在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“开机提示找不到OpenCL.dll”。那么,这个错误提示到底是怎么回事呢?它又对电脑有什么影响?我们又该如何解决这个问题并预防OpenCL.dll再次丢失呢࿱…...
IIS 服务器安装SSL证书
IIS 服务器安装SSL证书 步骤一:准备好 SSL 证书 准备好.pfx 格式的证书文件。 步骤二:安装 SSL 证书 1、打开【开始】菜单,找到【管理工具】,打开【Internet 信息服务(IIS)管理器】。 2、单击服务器名…...
二叉树第二期:堆的实现与应用
若对树与二叉树的相关概念,不太熟悉的同学,可移置上一期博客 链接:二叉树第一期:树与二叉树的概念-CSDN博客 本博客目标:对二叉树的顺序结构,进行深入且具体的讲解,同时学习二叉树顺序结构的应用…...
python-求出 e 的值
[题目描述] 利用公式 e11/1!1/2!1/3!⋯1/𝑛!,求 e 的值,要求保留小数点后 10 位。输入: 输入只有一行,该行包含一个整数 n,表示计算 e 时累加到1/n!。输出: 输出只有一行,该行包含计…...
模型微调方法
文章目录 LoRADoRAMoRA 以下部分参考自: https://mp.weixin.qq.com/s/OxYNpXcyHF57OShQC26n4g LoRA LoRA是微软于2021年推出的一种经济型微调模型参数的方法。 它在冻结大部分的模型参数的情况下,仅仅更新额外的部分参数。其性能与全参数微调相似。 LoRA假设微调期间…...
cesium使用cesium-navigation-es6插件创建指南针比例尺
cesium-navigation-es6 是一个为 Cesium.js 提供导航控件的库,它提供了一些常见的用户界面组件,用于在 Cesium 场景中实现用户导航和交互。下面将介绍如何在项目中使用 cesium-navigation-es6。 使用步骤 1. 安装 cesium-navigation-es6 首先…...
go sync包(七)Sync.Map
Sync.Map 原理 通过 read 和 dirty 两个字段实现数据的读写分离,读的数据存在只读字段 read 上,将最新写入的数据存在 dirty 字段上。读取时会先查询 read,不存在再查询 dirty,写入时则只写入 dirty。读取 read 并不需要加锁&am…...
Batch文件中的goto命令:控制流程的艺术
Batch文件,也称为批处理脚本,是Windows操作系统中用于自动化任务的一种脚本文件。在Batch脚本中,goto命令是一个至关重要的控制结构,它允许脚本跳转到指定的标签位置,从而实现循环、条件分支等复杂的控制流程。本文将详…...
【chatgpt】两层gcn提取最后一层节点输出特征,如何自定义简单数据集
文章目录 两层gcn,提取最后一层节点输出特征,10个节点,每个节点8个特征,连接关系随机生成(无全连接层)如何计算MSE 100个样本,并且使用批量大小为32进行训练第一个版本定义数据集出错࿰…...
Java面试题:讨论你如何保持对Java生态系统中新技术的了解
保持对Java生态系统中新技术的了解可以通过以下几种方法: 官方资源: Oracle的官方博客和新闻:Oracle是Java的主要维护者,其官方网站和博客会定期发布Java的新版本、功能更新和最佳实践。Java SE Documentation:Java官方…...
深度学习之Transformer模型的Vision Transformer(ViT)和Swin Transformer
Transformer 模型最初由 Vaswani 等人在 2017 年提出,是一种基于自注意力机制的深度学习模型。它在自然语言处理(NLP)领域取得了巨大成功,并且也逐渐被应用到计算机视觉任务中。以下是两种在计算机视觉领域中非常重要的 Transformer 模型:Vision Transformer(ViT)和 Swi…...
玩个游戏 找以下2个wordpress外贸主题的不同 你几找到几处
Aitken艾特肯wordpress外贸主题 适合中国产品出海的蓝色风格wordpress外贸主题,产品多图展示、可自定义显示产品详细参数。 https://www.jianzhanpress.com/?p7060 Ultra奥创工业装备公司wordpress主题 蓝色风格wordpress主题,适合装备制造、工业设备…...
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…...
DashClaw:模块化命令行工具的设计哲学与实战应用
1. 项目概述:一个为开发者打造的“瑞士军刀”式命令行工具最近在折腾一个自动化部署脚本时,遇到了一个老生常谈的问题:我需要从一堆杂乱的日志文件里,快速提取出特定时间段的错误信息,同时还要把这些信息按照严重程度分…...
AI智能体可观测性实战:用AgentOps实现全链路追踪与性能优化
1. 项目概述:当AI智能体遇上“黑匣子”,我们如何看清它的每一步?如果你最近在折腾AI智能体(Agent),无论是用LangChain、AutoGPT还是自己手搓的框架,大概率会遇到一个共同的痛点:调试…...
为AI智能体设计的任务管理后端:构建标准化、机器友好的任务元模型
1. 项目概述:一个为AI而生的待办清单最近在折腾各种AI工具链和自动化流程时,我遇到了一个挺普遍的问题:如何让AI助手,比如ChatGPT、Claude或者本地部署的大语言模型,更好地理解并管理我手头一堆零散、动态的任务&#…...
555定时器深度解析:从RC电路到三种工作模式的原理与应用
1. 项目概述在电子设计的工具箱里,有那么几颗芯片,你几乎可以在任何时代的电路板上找到它们的身影。它们可能不是性能最强的,但一定是应用最广、最经久不衰的。今天要聊的555定时器,就是这样一个“活化石”级别的存在。自上世纪70…...
Android Studio中文界面终极指南:3个步骤告别英文开发障碍
Android Studio中文界面终极指南:3个步骤告别英文开发障碍 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Andr…...
UI-TARS桌面版:用自然语言控制计算机的智能GUI助手
UI-TARS桌面版:用自然语言控制计算机的智能GUI助手 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop …...
仅0.3%用户掌握的胶片叙事技巧:用Midjourney实现“过期胶卷”时间衰减效果(含Exif元数据欺骗指令集)
更多请点击: https://intelliparadigm.com 第一章:胶片叙事与数字时代的时间诗学 胶片影像的物理性——帧率、显影时长、机械快门延时——曾将时间锚定为可触摸的物质存在;而数字媒介则以纳秒级采样、无损复制与非线性剪辑,将时间…...
腾讯 Marvis 操作系统层 AI 助手内测:多场景显身手,“AI 打工人”雏形初现但仍待打磨
多场景显身手近日,腾讯开始内测一款名为 Marvis(马维斯)的操作系统层个人 AI 助手。这一 AI 助手通过多个 Agent 的协作完成 App 操作、EXE 操作、电脑操作、文件管理、文档生成以及各种复杂任务,24 小时持续在线,并支…...
避坑指南:ENVI5.6在Win10/Win11系统下的常见安装失败问题与解决
ENVI5.6安装避坑实战:从报错排查到系统级调优 当你在Windows 10/11系统上双击ENVI5.6安装程序时,可能没想到这个看似标准的安装过程会变成一场技术冒险。不同于常规教程只展示理想路径,我们将直面那些让科研工作者抓狂的"安装已终止&quo…...
告别Canvas截图:用MediaProjection搞定Android状态栏和视频画面的完整截取方案
Android屏幕捕获终极方案:MediaProjection深度解析与实战 在移动应用开发中,屏幕捕获功能的需求日益增长,从用户反馈收集到操作演示录制,再到远程协作支持,这一功能已成为许多应用的核心竞争力。然而,传统基…...
