标题: 51单片机将四个引脚作为端口,控制30个灯该如何定义? [打印本页]

作者: 1027669350    时间: 2021-11-25 12:35
标题: 51单片机将四个引脚作为端口,控制30个灯该如何定义?
本帖最后由 1027669350 于 2021-11-25 12:37 编辑

怎么将COM和对应的led组合在一起,定义之后,可以直接用结构体分别控制

51hei图片_20211125123205.png (112.47 KB, 下载次数: 52)

51hei图片_20211125123205.png

51hei图片_20211125123311.png (42.73 KB, 下载次数: 49)

51hei图片_20211125123311.png

作者: 188610329    时间: 2021-11-25 14:43
你图不是都画出来了么? 通过 4x8 分时控制啊。
作者: yzwzfyz    时间: 2021-11-25 15:34
四个端口,理论上只有16人状态,不足32个。所以必须分时控制。
建议:用移位寄存器驱动32个灯,用四个端口控制移位寄存器。
作者: 188610329    时间: 2021-11-25 15:44
yzwzfyz 发表于 2021-11-25 15:34
四个端口,理论上只有16人状态,不足32个。所以必须分时控制。
建议:用移位寄存器驱动32个灯,用四个端口 ...

他实际是12个引脚, 阳极他是接到 SEG1~SEG8的。 所以直接按他这图来讲,直接可以分时复用了,不需要也没有必要外接移位寄存器了。
作者: mtdzok    时间: 2021-11-25 16:03
这实际就是借用典型的4位数码管显示电路,要动态扫描COM1-4,可参考数码管显示程序
作者: 1027669350    时间: 2021-11-25 16:06
188610329 发表于 2021-11-25 15:44
他实际是12个引脚, 阳极他是接到 SEG1~SEG8的。 所以直接按他这图来讲,直接可以分时复用了,不需要也没 ...

请教一下怎样写控制COM的开关让他们互不影响,我按照数码管的思路写的没能实现
switch(Index++)
        {
                case 0:
                        COM3=0;
                  COM1=1;
            COM2=1;
                  COM4=1;
                  if(bai==1)
                        {
                                LEDbuf1.U8&=0xFC;
                        }
                case 1:
                        COM1=0;
                  COM2=1;
                  COM3=1;
                        COM4=1;
                        LEDbuf1.U8=table[shi];
                        break;
                case 2:
                        COM2=0;
                  COM1=1;
                  COM3=1;
                        COM4=1;
                  LEDbuf1.U8=table[ge]&0x7F;
                        Index = 0;
                        break;
   }
作者: 188610329    时间: 2021-11-25 16:48
既然是数码管思路,就应该遵从数码管的点亮思路,通过定时器,每5毫秒,让一个COM下的LED点亮一次。即:把30个LED当作 4位数码管, 4个COM就是4个位,每个COM对应的7~8个LED就是数码管的段,然后利用视觉暂留原理不停的轮流点亮熄灭。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1