多路复用的LED设计程序怎么写?(急.急.急...)

zd169   2009-5-19 23:20 楼主
最普通的行列矩阵式驱动,可以用N+M个IO驱动N*M个LED。而这种被叫做Charlieplexing的方法可以用N个IO驱动N*(N-1)个LED。也就是说要驱动6个LED,用行列式需要5个口,而这种方法只要3个。LED也多,节省的IO越多。比方说驱动20个LED,行列式要用9个,而这种只要5个。  

这么做有个前提,IO口要有三种状态:高电平输出、低电平输出、高阻输入,利用“行列分时复用”的思想,设计电路。   

     如下图:



用汇编语言如何进行程序编写?(80c51)
哪位兄弟能发表一下高见?
谢谢啦!

回复评论 (19)

大概感觉了一下它的设计想法

轮循切换限流电阻上的那个IO

它做为控制线

不停地扫这个控制线以及给出别的IO值,达到点亮特定管子的目的

这样想法是不错

不过有个小问题,按说是可以驱动很多的LED,但是LED太多,扫描的代价太大

这会不会太郁闷?

呵呵
点赞  2009-5-20 09:27
呵呵,当LED多了,其占空比很低的!(这无关紧要的)
我只是想就上面的电路图写个程序试试
可不知道怎么写,一点思路都没有!
你说的扫描又是怎么回事的?
请多多指点下!!!
点赞  2009-5-20 09:56
感觉说的这些很像俺前一阵子刚用上的4*4键盘。
LED不知道怎么保证常亮长灭,硬件不懂哈~

键盘的思路:
1、第一行给低电平,其他三行高电平,看第几列被拉低了。(1行n列键被按下)
2、第二行……
3、……
4、……
点赞  2009-5-20 15:20
“高电平输出”“高阻输入”两种情况下都是不亮吧?
没看到图,是ouravr的哪个帖子?
点赞  2009-5-20 16:33
对呀!我怎么没想到呢!?
呵呵`~多谢slowhand指点!不小虾咪在这里恭候
多时,还是希望更多的大虾来指点迷津,有程序参考更好.......
谢谢诸位!
点赞  2009-5-20 16:41
恩,就是ouravr上面的,其图为:

我很想知道是怎么用汇编编程的?
点赞  2009-5-20 17:33
提供下面的真值表给你参考:

IO_01  IO_02  IO_03  哪个LED亮
输出高  输出低  高阻态   LED12
输出低  输出高  高阻态   LED13
输出高  高阻态  输出低   LED9
输出低  高阻态  输出高   LED10
高阻态  输出高  输出低   LED8
高阻态  输出低  输出高   LED11
点赞  2009-5-21 11:07
请问zhkflying:
一个简单的问题,当I/O口为高阻态,用汇编怎么写的?或者说LED12亮怎么写?
请大虾们指点指点.........
点赞  2009-5-21 11:37
如果你用的是Intel的8051:

;IO定义
sbit IO_01=P1^1;
sbit IO_02=P1^2;
sbit IO_03=P1^3;

;让LED12亮
SETB IO_01     ;输出高
CLR  IO_02     ;输出低
SETB IO_03     ;先置1
NOP            ;
MOV  C,IO_03   ;作为输入

当然你如果用的是其它类型的MCU,也许有专门设置I/O口作为输入或输出的寄存器。
点赞  2009-5-21 11:52
请问zhkflying:又有一个新的问题:当我用proteus仿真时,6个LED是每二个一起亮的,即(LED9,LED12),(LED8,LED13),(LED10,LED11)依次循环点亮,而不是一个接一个的循环点亮的.
让LED12亮
SETB IO_01    ;输出高
CLR  IO_02    ;输出低
SETB IO_03    ;先置1
NOP            ;
MOV  C,IO_03  ;作为输入

此时LED12点亮,而IO_3还是出1使得LED9点亮;是不是当I/O口设为高阻态输入的,没有起到真正高阻态的作用呢?
请各路大虾指点!
点赞  2009-5-22 11:37
此时LED12点亮,而IO_3还是出1使得LED9点亮;是不是当I/O口设为高阻态输入的,没有起到真正高阻态的作用呢?
——如果是Intel的8051,那么P1口内部有个上拉电阻,确实不是高阻态!
点赞  2009-5-22 11:57
请问zhkflying:
那怎么办?有别的办法没?我改用P0口,它不是没上拉嘛,外接上拉之后,若P0.0为高阻态,我能不能控制其上拉不用从而转为高阻态,能的话又是怎么控制的?
   
点赞  2009-5-22 12:21
E:\Intel\8051_IO三态.bmp
点赞  2009-5-22 12:38
如果一定要用Intel的8051,那么请看上面的电路图:

SETB P1.1  ;P1.1输出高,三极管导通
SETB P0.1  ;P0.1为高阻,综合则IO_01输出高

CLR  P1.1  ;P1.1输出低,三极管截止
SETB P0.1  ;P0.1为高阻,综合则IO_01为高阻

CLR  P1.1  ;P1.1输出低,三极管截止
CLR  P0.1  ;P0.1输出低,综合则IO_01输出低

请验证,如果可以换带有三态输出I/O的MCU那最好
点赞  2009-5-22 12:48
回应ZHKFLYING:
上面的电路图看不到,麻烦你发给我,我的QQ:296015908(296015908@qq.com)

谢谢!
点赞  2009-5-22 18:17
     嘿嘿   楼上的  请问 版主 加了你好友没? 关于那个电路图看到啦吗?
点赞  2009-5-22 23:27
回复LVWUWEI;
        呵呵`` 没有啦,正急着、、、、等待中!
   请问你有什么高见没?
         
点赞  2009-5-23 12:09
这几天比较忙,没有上eeworld,今天刚上来,发邮件给你了,请查收图纸。
点赞  2009-5-29 14:13
回应ZHKFLYING:
     邮件已收到,谢谢你啦!
点赞  2009-5-30 22:16
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复