找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问使用4个IO引脚这种配置,如何实现上面三个不同类型的灯可以同时亮

  [复制链接]
跳转到指定楼层
楼主
请问使用4个IO引脚这种配置,如何实现上面三个不同类型的灯可以同时亮

1111.PNG (25.64 KB, 下载次数: 58)

1111.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2023-11-7 09:15 | 只看该作者
分时扫描就可以了
回复

使用道具 举报

板凳
ID:819526 发表于 2023-11-7 09:17 | 只看该作者
你这少了个灯吧,应该是连到LED1 LED4,看样子你是三个一组进行分类分了四组,如果想要不同组之间同时显示,我建议利用数码管的那种动态扫描方式点亮,如果你是同一组的三个同时点亮,就直接阳极引脚拉高其余引脚拉低就行了。
回复

使用道具 举报

地板
ID:161164 发表于 2023-11-7 09:39 | 只看该作者
线路不正确,如LD1和LD4必定同时亮
LD4需掉换一下方向
可以看一下查理复用
引脚必须具备推挽和高阻能力
回复

使用道具 举报

5#
ID:925236 发表于 2023-11-7 09:59 | 只看该作者
你这个灯怎么这样接法,io口又当正极又当负极吗?还要全部同时亮,应该是不现实,改一下布线吧
回复

使用道具 举报

6#
ID:1093268 发表于 2023-11-7 10:37 | 只看该作者
用扫描的方式就可以实现。一瞬间让某个灯亮起:12  -> 13 -> 21 -> 23 -> 24 -> 31 -> 32 -> 34 -> 41 -> 42 -> 43,只要扫描够快,就看起来所有灯都亮起来了。线路是正确的,楼上说法有误。
回复

使用道具 举报

7#
ID:1097287 发表于 2023-11-7 10:43 | 只看该作者
lkc8210 发表于 2023-11-7 09:39
线路不正确,如LD1和LD4必定同时亮
LD4需掉换一下方向
可以看一下查理复用

LD1和LD4方向不同啊,应该不会同时亮的吧
回复

使用道具 举报

8#
ID:1097287 发表于 2023-11-7 10:45 | 只看该作者
哦豁~ 发表于 2023-11-7 10:37
用扫描的方式就可以实现。一瞬间让某个灯亮起:12  -> 13 -> 21 -> 23 -> 24 -> 31 -> 32 -> 34 -> 41 -> 4 ...

如何才算是扫描过快,我现在后面六个灯用按键控制的,然后当有个亮的时候第一或第二个灯会亮,但是会暗些
回复

使用道具 举报

9#
ID:1097287 发表于 2023-11-7 10:51 | 只看该作者
哦豁~ 发表于 2023-11-7 10:37
用扫描的方式就可以实现。一瞬间让某个灯亮起:12  -> 13 -> 21 -> 23 -> 24 -> 31 -> 32 -> 34 -> 41 -> 4 ...

我前两个灯以及后面六个灯用按键来控制的,第一二个灯按键长按切换,后六个按键短按实现一个灯亮到六个灯全亮,现在的现象是后面的灯有时会影响到前两个灯亮,扫描的方式怎么样才能更好的消除这二者的影响,方便写一下吗,谢谢。
回复

使用道具 举报

10#
ID:384109 发表于 2023-11-7 11:01 | 只看该作者
板凳说的是对的,不过线路是没错的
回复

使用道具 举报

11#
ID:1093268 发表于 2023-11-7 11:13 | 只看该作者
Bikho 发表于 2023-11-7 10:45
如何才算是扫描过快,我现在后面六个灯用按键控制的,然后当有个亮的时候第一或第二个灯会亮,但是会暗些

程序上确保这3点:
1. 调用扫描LED程序的时间,间隔是稳定的,这个可以用定时器中断来做,因为扫描程序本身不会占用多少时间。比如每100uS调用它一次,不要这会100uS等下变成200uS;
2. 通常我是100uS刷一次。CPU主频更快程序进程少的话,也就是条件允许,可以刷得更快;
3. 刷某一个灯时,这个灯对应的2个管脚是输出脚,其余脚设置成高组态;

代码我不会帮你写,平台不一样。且我认为提供解决思路与办法,永远比直接给代码更加负责。根据别人的思路或自己想出来思路,然后自己用代码实现出来,自己才会得到提升。
回复

使用道具 举报

12#
ID:161164 发表于 2023-11-7 21:14 | 只看该作者
Bikho 发表于 2023-11-7 10:43
LD1和LD4方向不同啊,应该不会同时亮的吧

你说的对,我看错了
回复

使用道具 举报

13#
ID:574482 发表于 2023-11-7 21:55 | 只看该作者
先LED1为1,其它LED2~4 轮流持续1毫秒为0再拉高,同样,再到LED2为1,重复前面方法,不断循环即可全亮。
回复

使用道具 举报

14#
ID:1094811 发表于 2023-11-7 22:54 来自手机 | 只看该作者
矩阵正反扫,不亮的IO要高阻态才行
回复

使用道具 举报

15#
ID:195496 发表于 2023-11-8 08:16 | 只看该作者
采用双向扫描法,平时我们用的LED都是单向扫描,电流方向不会变,你如果减少口线数量,就采用双向扫描,电路要改改,
回复

使用道具 举报

16#
ID:1097455 发表于 2023-11-13 15:17 | 只看该作者
分时扫描
回复

使用道具 举报

17#
ID:1054554 发表于 2023-11-28 14:01 | 只看该作者
减少口线数量,就采用双向扫描,电路要改改,
回复

使用道具 举报

18#
ID:491577 发表于 2023-11-29 23:30 | 只看该作者
这种接法IO口必须有推挽模式和高阻模式,89C52不可以,每次只点亮一个LED,一个IO推挽输出1,另一个IO输出0,其它2个IO必须为高阻。通过动态扫描方式可以实现全部LED点亮,类似数码管的点亮方式,n个IO最多可以控制n*(n-1)个LED,楼主4个IO最多控制4*3=12个LED。
回复

使用道具 举报

19#
ID:278457 发表于 2023-11-30 03:49 | 只看该作者
你可以用中断优先级,让不同的灯,一起亮
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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