打印
[其他]

用查理复用法驱动LED

[复制链接]
楼主: everyrobin
手机看帖
扫描二维码
随时随地手机跟帖
21
在任意两个GPIO引脚之间串联两个方向相反的并联LED,形成6个LED的连接关系。

使用特权

评论回复
22
earlmax| | 2025-3-12 21:11 | 只看该作者
#include <reg51.h>

// 定义 I/O 引脚
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;

// 延时函数
void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++) {
        for (j = 0; j < 1275; j++);
    }
}

// 点亮指定的 LED
void charlieplex_led(unsigned char led_num) {
    switch (led_num) {
        case 0: // 点亮第一个 LED
            P0_0 = 1; P0_1 = 0; P0_2 = 1;  // 设置引脚电平
            break;
        case 1: // 点亮第二个 LED
            P0_0 = 0; P0_1 = 1; P0_2 = 1;
            break;
        // 其他 LED 的控制代码...
        default:
            break;
    }
    delay(1); // 延时
    P0_0 = 0; P0_1 = 0; P0_2 = 0;  // 关闭所有 LED
}

void main() {
    unsigned char i;
    while (1) {
        for (i = 0; i < 6; i++) {
            charlieplex_led(i);
        }
    }
}

使用特权

评论回复
23
minzisc| | 2025-3-14 10:34 | 只看该作者
采用格雷码顺序更新引脚状态,减少电压波动。

使用特权

评论回复
24
jackcat| | 2025-3-14 12:44 | 只看该作者
如果需要同时点亮多个LED,可以通过交替点亮它们的方法实现。只要切换的速度足够快,利用人眼的视觉暂留效应,这些LED就会给人以同时亮起的视觉效果。

使用特权

评论回复
25
mickit| | 2025-3-14 14:59 | 只看该作者
查理复用法可以有效地驱动多个LED,节省I/O资源

使用特权

评论回复
26
hudi008| | 2025-3-14 17:03 | 只看该作者
相比其他复杂的 LED 驱动电路,查理复用法的电路结构较为简单,只需要将 LED 以特定的方式连接到 I/O 引脚上即可。

使用特权

评论回复
27
olivem55arlowe| | 2025-3-14 21:00 | 只看该作者
对于一些复杂的电路,可能还需要添加上拉电阻或下拉电阻

使用特权

评论回复
28
louliana| | 2025-3-15 00:05 | 只看该作者
需要注意的是,当某个引脚设置为输出低时,它实际上是在吸收电流;而当设置为输出高时,则是在提供电流。因此,在设计电路时要考虑单片机引脚的最大拉电流和灌电流能力。

使用特权

评论回复
29
1988020566| | 2025-3-15 03:13 | 只看该作者
由于LED的点亮完全依赖于单片机的GPIO输出电流,因此对GPIO的电流驱动能力有一定要求。在设计电路时,需要查阅所使用MCU的电流驱动能力详情。

使用特权

评论回复
30
benjaminka| | 2025-3-15 07:36 | 只看该作者
将LED的正极和负极分别连接到对应的IO口上,注意LED的极性要正确连接,避免短路或损坏LED。同时,根据需要串联合适的限流电阻,以限制流过LED的电流,一般可选择100Ω到1kΩ之间的电阻,具体阻值可根据电源电压和LED的参数确定。

使用特权

评论回复
31
51xlf| | 2025-3-15 10:27 | 只看该作者
在电路设计中,任意两个GPIO引脚之间都串联了两个方向相反的并联LED。

使用特权

评论回复
32
wengh2016| | 2025-3-15 12:19 | 只看该作者
如果需要同时点亮多个 LED 或实现动态显示效果,可以通过循环不断切换要点亮的 LED,让每个 LED 依次点亮。

使用特权

评论回复
33
yorkbarney| | 2025-3-15 14:03 | 只看该作者
每个LED连接到两个不同的GPIO引脚(如PA0和PA1),形成一个节点。
通过将其中一个引脚置为高电平(1)、另一个置为低电平(0)或高阻态(Z),控制LED的点亮或熄灭。

使用特权

评论回复
34
ingramward| | 2025-3-15 15:53 | 只看该作者
可以用较少的 I/O 引脚驱动较多的 LED,有效解决了单片机 I/O 引脚资源有限的问题。

使用特权

评论回复
35
claretttt| | 2025-3-15 17:34 | 只看该作者
LED数量越多,扫描周期越长,刷新率越低

使用特权

评论回复
36
uiint| | 2025-3-15 19:18 | 只看该作者
由于查理复用法是分时复用的方式驱动 LED,需要保证足够高的刷新频率,以避免人眼看到 LED 闪烁。

使用特权

评论回复
37
mickit| | 2025-3-15 21:14 | 只看该作者
查理复用算法利用单片机IO口的三种状态(高电平、低电平、高阻态)以及LED的单向导电性来实现对多个LED的控制。通过合理设置IO口的状态,可以控制不同LED的点亮与熄灭。例如,对于3个IO口控制6个LED的情况,每个IO口都有特定的高低电平组合来对应一个LED的点亮状态。

使用特权

评论回复
38
sanfuzi| | 2025-3-15 22:57 | 只看该作者
由于不是所有的LED都能同时被点亮,所以实际观察到的亮度会比直接驱动要暗一些。可以通过增加扫描频率或采用PWM调光技术来调节亮度。

使用特权

评论回复
39
zephyr9| | 2025-3-16 07:30 | 只看该作者
为了降低成本,单片机设计中会尽量节省I/O口。

使用特权

评论回复
40
哪吒哪吒| | 2025-3-17 11:51 | 只看该作者
查理复用法就像一根线串多个珠子,一个LED灯可以控制多个LED灯亮。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则