找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 217|回复: 15
打印 上一主题 下一主题
收起左侧

查理复用控制十二个灯

  [复制链接]
跳转到指定楼层
楼主
四个引脚控制十二个灯,每次亮四颗灯(1234、2345、3456……)程序和思路怎么实现....
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1131074 发表于 2024-9-10 11:52 | 只看该作者
一个灯一个灯亮,分12次。
回复

使用道具 举报

板凳
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:78835 发表于 2024-9-10 14:34 | 只看该作者
定时扫描就好了
回复

使用道具 举报

5#
ID:192020 发表于 2024-9-10 15:14 | 只看该作者
看图就懂了,就是反复配高阻态和高低电平,最容易理解就是搞12个判断来亮灯。首先需要单片机支持IO高阻态

Snipaste_2024-09-10_15-05-46.png (93.97 KB, 下载次数: 1)

Snipaste_2024-09-10_15-05-46.png

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:592807 发表于 2024-9-10 16:02 | 只看该作者
如果我是你,我会直接用74HC595  138 之类的IC
回复

使用道具 举报

7#
ID:344848 发表于 2024-9-10 16:04 | 只看该作者
只需使用三个引脚即可,为何使用四个引脚?使用本站销售的实验板即可实现,并含有所需的程序!
回复

使用道具 举报

8#
ID:807651 发表于 2024-9-10 16:11 | 只看该作者
和扫描矩阵按键一样?3 SEG和 1 CON  分时间开关3组?
回复

使用道具 举报

9#
ID:195666 发表于 2024-9-10 18:40 | 只看该作者
还有一个思路:用WS2812灯珠或灯带
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

12#
ID:712493 发表于 2024-9-11 16:30 | 只看该作者
黄youhui 发表于 2024-9-10 16:02
如果我是你,我会直接用74HC595  138 之类的IC

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

使用道具 举报

13#
ID:466505 发表于 2024-9-12 09:28 | 只看该作者

单片机要能设IO为高阻,如阵列所示,控制要亮灯的LED两端的IO,其它的IO设为高阻,然后依次扫描就可以了
回复

使用道具 举报

14#
ID:57657 发表于 2024-9-12 15:29 | 只看该作者
黄youhui 发表于 2024-9-10 16:02
如果我是你,我会直接用74HC595  138 之类的IC

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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