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

文章目录

  • 前言
  • 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 1110Delay500ms();//延迟500毫秒P2=0xFF;//灭 1111 1111Delay500ms();}
}

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.hqwc.cn/news/12863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔 安装/使用Apollo(阿波罗)参数配置中心-图文小白教程

官方安装教程手册&#xff1a;Apollo apollo&#xff08;阿波罗&#xff09;是一款可靠的分布式配置管理中心&#xff0c;诞生于携程框架研发部&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的…

Langchain的新课程;Mozilla开发的AI文档工具遭到开发者批评

&#x1f989; AI新闻 &#x1f680; Mozilla开发的AI文档工具遭到开发者批评&#xff0c;已下线 摘要&#xff1a;Mozilla开发的基于生成式AI的工具AI Help在开发者群体中遭到广泛批评。开发者认为该工具提供的信息常常错误&#xff0c;甚至认为它没有这个功能反而更好。针对…

win10 python3.7 pycharm安装dlib库报错

使用pycharm安装dlib一直报错 心态有点崩 好在没有放弃 解决了 报错 note: This is an issue with the package mentioned above, not pip. hint: See above for output from the failure. 解决&#xff1a;直接好用的就是安装.whl文件 将下载好对应Python3.7版本的.whl…

无线基站与无线频谱资源

文章目录 基站的主要组成天线馈线&#xff08;电缆线&#xff09;RRU&#xff08;射频拉远单元&#xff0c;Remote Radio Unit&#xff09;BBU&#xff08;室内基带处理单元&#xff0c;Building Base band Unit&#xff09;AAU&#xff08;有源天线单元&#xff0c;Active Ant…

【异常错误】Unexpected option: --local_rank=0(pycharm可以run但是不可以debug)

今天在使用用run运行shell文件转为的cmd命令后&#xff0c;run可以正常运行&#xff0c;但是debug却出现问题&#xff0c;错误信息&#xff1a; Usage:pydevd.py --port N [(--client hostname) | --server] --file executable [file_options] Traceback (most recent call la…

在前端页面正确展示后端返回的验证码图片

前言&#xff1a; 在开发登录界面时&#xff0c;通过接口请求验证码&#xff1b;后端给返回的格式是Blob&#xff0c;直接用src引用没办法显示。 在控制台输入结果是&#xff1a; 第一想法就是通过 window.URL.createObjectURL(new Blob([res.data],{type:image/png}))转换成u…

【计算机网络】集线器和交换机的区别

1. 早期–总线型以太网 2. 集线器–星型以太网 3.以太网交换机 4. 集线器和以太网交换机的对比 4.1 单播、多播、同时单播 4.2 扩展以太网的单播 4.3 扩展以太网的多播 4.4 小结

数学建模常用模型(五):多元回归模型

数学建模常用模型&#xff08;五&#xff09;&#xff1a;多元回归模型 由于客观事物内部规律的复杂性及人们认识程度的限制&#xff0c;无法分析实际对象内在的因果关系&#xff0c;建立合乎机理规律的数学模型。所以在遇到有些无法用机理分析建立数学模型的时候&#xff0c;…

交易所行情基础相关知识

目录 一、行情基本概念 二、简单交易模型 三、行情系统结构 四、各种行情协议 1.FIX 2.STEP 3.FAST 4.Binary 五、集合竞价和连续竞价 1.集合竞价 2.连续竞价 六、上交所LDDS和深交所Binary行情对比 一、行情基本概念 行情是描述市场繁荣状态的数据&#xff0c;…

Docker学习笔记26

Docker stack应用&#xff1a; 1&#xff09;Docker 层级关系中的最高层次——stack&#xff0c;一个stack就是一组有关联的服务的组合&#xff0c;可以一起编排&#xff0c;一起管理。 早期&#xff0c;使用service来发布服务。但是service每次只能发布一个service。 yaml可…

基于matlab检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离(附源码)

一、前言 此示例演示如何检测使用校准的立体摄像头拍摄的视频中的人物&#xff0c;并确定他们与摄像头的距离。 二、加载立体摄像机的参数 加载对象&#xff0c;这是使用应用程序或函数校准相机的结果。 三、创建视频文件阅读器和视频播放器 创建用于读取和显示视频的系统对…

使用easyexcel出现的错误

说明&#xff1a;easyexcel&#xff08;官网&#xff1a;https://easyexcel.opensource.alibaba.com/&#xff09;是阿里巴巴提供的&#xff0c;用于项目中读取/导出excel文件的工具&#xff0c;本文介绍使用easyexcel常见的两种错误。 错误一&#xff1a;java.lang.NoSuchMet…