博客
关于我
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/

你可能感兴趣的文章
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>
notepad++正则表达式替换字符串详解
查看>>
notepad如何自动对齐_notepad++怎么自动排版
查看>>
Notes on Paul Irish's "Things I learned from the jQuery source" casts
查看>>
Notification 使用详解(很全
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
NotImplementedError: Could not run torchvision::nms
查看>>
nova基于ubs机制扩展scheduler-filter
查看>>
Now trying to drop the old temporary tablespace, the session hangs.
查看>>
nowcoder—Beauty of Trees
查看>>
np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
查看>>
np.power的使用
查看>>
NPM 2FA双重认证的设置方法
查看>>
npm build报错Cannot find module ‘html-webpack-plugin‘解决方法
查看>>
npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法
查看>>
npm build报错Cannot find module ‘webpack‘解决方法
查看>>