找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 646|回复: 18
收起左侧

查理复用控制十二个灯

  [复制链接]
ID:1131666 发表于 2024-9-9 16:23 | 显示全部楼层 |阅读模式
四个引脚控制十二个灯,每次亮四颗灯(1234、2345、3456……)程序和思路怎么实现....
回复

使用道具 举报

ID:101869 发表于 2024-9-14 18:38 来自手机 | 显示全部楼层
基本思路,把每个灯点亮熄灭做成函数,然后放在1毫秒定时器中
回复

使用道具 举报

ID:192020 发表于 2024-9-14 16:17 | 显示全部楼层
188610329 发表于 2024-9-13 17:56
你这是偷懒的接法, 你这样接, 只能一次点一个灯, 12次点灯完成一个循环,不然会亮度不一致,
但是,如果 ...

假如三个LED同时亮功率也是个问题吧?还得加驱动电路?
回复

使用道具 举报

ID:624769 发表于 2024-9-13 17:56 | 显示全部楼层
qq475878026 发表于 2024-9-10 15:14
看图就懂了,就是反复配高阻态和高低电平,最容易理解就是搞12个判断来亮灯。首先需要单片机支持IO高阻态

你这是偷懒的接法, 你这样接, 只能一次点一个灯, 12次点灯完成一个循环,不然会亮度不一致,
但是,如果把电阻都接在 LED正极,或者都接在 LED负极,就能1次点三个灯,4次点灯完成一个循环。
回复

使用道具 举报

ID:57657 发表于 2024-9-12 15:29 | 显示全部楼层
黄youhui 发表于 2024-9-10 16:02
如果我是你,我会直接用74HC595  138 之类的IC

这几个型号不能直接驱动,还要加74HC125或74HC126
回复

使用道具 举报

ID:466505 发表于 2024-9-12 09:28 | 显示全部楼层
4x3阵列.jpg
单片机要能设IO为高阻,如阵列所示,控制要亮灯的LED两端的IO,其它的IO设为高阻,然后依次扫描就可以了
回复

使用道具 举报

ID:712493 发表于 2024-9-11 16:30 | 显示全部楼层
黄youhui 发表于 2024-9-10 16:02
如果我是你,我会直接用74HC595  138 之类的IC

确实,搞一次生不如死
回复

使用道具 举报

ID:1034262 发表于 2024-9-11 12:04 | 显示全部楼层
驱动原理(共阴):
任意一个IO输出低(COM),另外3个IO显示的输出高,不显示的高阻,驱动3个灯。
同理,一共12个灯。
移动电源、无线话筒、小家电等等用的数码管好多都是这样的,比如9脚的可以驱动9个数码管或72个LED。
N个IO可以驱动N*(N-1)个LED。
回复

使用道具 举报

ID:67199 发表于 2024-9-10 20:51 | 显示全部楼层
发表于 2024-9-10 15:14
看图就懂了,就是反复配高阻态和高低电平,最容易理解就是搞12个判断来亮灯。首先需要单片机支持IO高阻态

正解!四口复用,逐点扫描。端口用得少,编程麻烦点。
回复

使用道具 举报

ID:195666 发表于 2024-9-10 18:40 | 显示全部楼层
还有一个思路:用WS2812灯珠或灯带
回复

使用道具 举报

ID:807651 发表于 2024-9-10 16:11 | 显示全部楼层
和扫描矩阵按键一样?3 SEG和 1 CON  分时间开关3组?
回复

使用道具 举报

ID:344848 发表于 2024-9-10 16:04 | 显示全部楼层
只需使用三个引脚即可,为何使用四个引脚?使用本站销售的实验板即可实现,并含有所需的程序!
回复

使用道具 举报

ID:592807 发表于 2024-9-10 16:02 | 显示全部楼层
如果我是你,我会直接用74HC595  138 之类的IC
回复

使用道具 举报

ID:192020 发表于 2024-9-10 15:14 | 显示全部楼层
看图就懂了,就是反复配高阻态和高低电平,最容易理解就是搞12个判断来亮灯。首先需要单片机支持IO高阻态
Snipaste_2024-09-10_15-05-46.png

评分

参与人数 1黑币 +15 收起 理由
1109 + 15

查看全部评分

回复

使用道具 举报

ID:78835 发表于 2024-9-10 14:34 | 显示全部楼层
定时扫描就好了
回复

使用道具 举报

ID:404160 发表于 2024-9-10 14:30 | 显示全部楼层
硬件部分:
假设4个控制引脚分别连接到单片机的P0.0~P0.3。
12个灯分别连接到外部电路,通过控制引脚的高低电平来点亮或熄灭。
软件部分:
循环控制: 采用循环语句实现灯的顺序点亮。
数据表示: 使用一个12位的二进制数来表示12个灯的状态,每一位对应一个灯。
移位操作: 通过移位操作来实现灯的顺序变化。
输出控制: 将表示灯状态的二进制数输出到P0口。
C51代码实现
C
#include <reg51.h>

unsigned char led_data[] = {0x0F, 0x3C, 0x78, 0xF0, 0xC3, 0x8F};  // 存储灯的顺序状态

void delay(unsigned int t) {
    while(t--);
}

void main() {
    unsigned char i;

    while(1) {
        for(i = 0; i < 6; i++) {
            P0 = led_data[i];  // 输出到P0口
            delay(5000);     // 延时500ms
        }
    }
}
请谨慎使用代码。
代码解释
led_data数组:
存储了6种灯的点亮状态,每种状态对应4个灯亮。
比如0x0F表示二进制的1111,即前4个灯亮。
delay函数:
用于产生延时,控制灯亮的时长。
main函数:
无限循环,不断重复点亮灯的顺序。
外层循环遍历led_data数组,每次取出一个状态。
内层循环产生延时,控制每个状态的保持时间。
回复

使用道具 举报

ID:1131074 发表于 2024-9-10 11:52 | 显示全部楼层
一个灯一个灯亮,分12次。
回复

使用道具 举报

ID:1131666 发表于 2024-9-9 16:25 | 显示全部楼层
跑马灯每次亮四颗,大神们应该怎么实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表