博客
关于我
51单片机——LED流水灯
阅读量:681 次
发布时间:2019-03-17

本文共 1719 字,大约阅读时间需要 5 分钟。

51单片机——LED流水灯

一、查表法实现流水灯

通过对51单片机开发板的原理图进行分析,我们了解到控制LED2~LED7的I/O端口为P0口。通过对P0口进行赋值,可以实现发光二极管的亮灭控制。具体而言,使用十六进制表示P0的值时,可以实现所需的效果。例如,P0=0xfe时,仅LED2发光,其余LED熄灭。为了实现流水灯效果,需要让发光二极管从LED2到LED7顺序发光。这意味着P0口的值依次为0xfe、0xfd、0xfb、0xf7、0xef、0xdf、0xbf、0x7f。实现起来非常简单。

通过查表法,我们可以将P0口需要的值存储在循环器中的数组中,这样在程序运行时,只需读取数组中的相应值即可完成控制。这种方法具有简单易懂的优点,同时能够有效实现流水灯的效果。

Note: 下面提供的代码示例可以帮助更好地理解查表法的实现方式。

#include 
sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void delay(unsigned char x) { unsigned n; while(--x) { for(n = 0; n < 250; n++) { } }}unsigned char code aa[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};void main() { unsigned i; ADDR0 = 0; // 初始化I/O端口 ADDR1 = 1; ADDR2 = 1; ADDR3 = 1; ENLED = 0; while(1) { for(i = 0; i < 8; i++) { P0 = aa[i]; delay(250); } }}

二、循环法

在查表法的基础上,我们可以采用另一种实现流水灯的方法——循环法。这一方法的核心思想是利用对P0口值的左移操作来完成LED的流水灯效果。通过将左移操作嵌入到循环中,可以无需手动储存所有可能的P0值,从而实现流水灯的自动渐变效果。

这种方法的实现极为简单,只需要包含[intrins.h]头文件即可完成。在程序中,可以通过声明照度器时标志并持续进行左移操作来实现流水灯效果。

Note: 下面提供的代码示例展示了循环法的实现方式。

#include 
#include
sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void delay(unsigned char x) { unsigned n; while(--x) { for(n = 0; n < 250; n++) { } }}void main() { unsigned char i, a = 0xfe; ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1; ENLED = 0; while(1) { for(i = 0; i < 8; i++) { P0 = a; a = _crol(a, 1); // 左移一位 delay(250); } }}

这些代码示例提供了实现LED流水灯的两种不同方法。查表法通过提前定义并存储所有需要的P0口值来实现流水灯效果,而循环法则利用对P0口值的连续左移操作来实现流水灯的渐变效果。两种方法都非常简单易于实现,并且能够在短时间内完成流水灯的开发和测试工作。

转载地址:http://jmgqz.baihongyu.com/

你可能感兴趣的文章
Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
查看>>
Pandas:将一列与数据帧的所有其他列进行比较
查看>>
PANDA:基于多列对数据表的行运行计算,并将输出存储在新列中
查看>>
PandoraFMS 监控软件 SQL注入漏洞复现
查看>>
PandoraFMS 监控软件 任意文件上传漏洞复现
查看>>
PanTools多网盘登录神器
查看>>
Papyrus项目常见问题解决方案
查看>>
Parallel.ForEach使用示例
查看>>
Parallel.ForEach的基础使用
查看>>
parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
查看>>
parallelStream导致LinkedList遍历时空指针的问题
查看>>
Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
查看>>
ParameterizedThreadStart task
查看>>
Paramiko exec_命令的实时输出
查看>>
Spring security之管理session
查看>>
paramiko模块
查看>>
param[:]=param-lr*param.grad/batch_size的理解
查看>>
spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
查看>>
Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
查看>>
Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
查看>>