多路复用的LED设计程序怎么写?(急.急.急...)
最普通的行列矩阵式驱动,可以用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)
哪位兄弟能发表一下高见?
谢谢啦!
大概感觉了一下它的设计想法
轮循切换限流电阻上的那个IO
它做为控制线
不停地扫这个控制线以及给出别的IO值,达到点亮特定管子的目的
这样想法是不错
不过有个小问题,按说是可以驱动很多的LED,但是LED太多,扫描的代价太大
这会不会太郁闷?
呵呵
呵呵,当LED多了,其占空比很低的!(这无关紧要的)
我只是想就上面的电路图写个程序试试
可不知道怎么写,一点思路都没有!
你说的扫描又是怎么回事的?
请多多指点下!!!
感觉说的这些很像俺前一阵子刚用上的4*4键盘。
LED不知道怎么保证常亮长灭,硬件不懂哈~
键盘的思路:
1、第一行给低电平,其他三行高电平,看第几列被拉低了。(1行n列键被按下)
2、第二行……
3、……
4、……
“高电平输出”“高阻输入”两种情况下都是不亮吧?
没看到图,是ouravr的哪个帖子?
对呀!我怎么没想到呢!?
呵呵`~多谢slowhand指点!不小虾咪在这里恭候
多时,还是希望更多的大虾来指点迷津,有程序参考更好.......
谢谢诸位!
恩,就是ouravr上面的,其图为:
我很想知道是怎么用汇编编程的?
提供下面的真值表给你参考:
IO_01 IO_02 IO_03 哪个LED亮
输出高 输出低 高阻态 LED12
输出低 输出高 高阻态 LED13
输出高 高阻态 输出低 LED9
输出低 高阻态 输出高 LED10
高阻态 输出高 输出低 LED8
高阻态 输出低 输出高 LED11
请问zhkflying:
一个简单的问题,当I/O口为高阻态,用汇编怎么写的?或者说LED12亮怎么写?
请大虾们指点指点.........
如果你用的是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口作为输入或输出的寄存器。
请问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口设为高阻态输入的,没有起到真正高阻态的作用呢?
请各路大虾指点!
此时LED12点亮,而IO_3还是出1使得LED9点亮;是不是当I/O口设为高阻态输入的,没有起到真正高阻态的作用呢?
——如果是Intel的8051,那么P1口内部有个上拉电阻,确实不是高阻态!
请问zhkflying:
那怎么办?有别的办法没?我改用P0口,它不是没上拉嘛,外接上拉之后,若P0.0为高阻态,我能不能控制其上拉不用从而转为高阻态,能的话又是怎么控制的?
如果一定要用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那最好
回应ZHKFLYING:
上面的电路图看不到,麻烦你发给我,我的QQ:296015908(296015908@qq.com)
谢谢!
嘿嘿 楼上的 请问 版主 加了你好友没? 关于那个电路图看到啦吗?
回复LVWUWEI;
呵呵`` 没有啦,正急着、、、、等待中!
请问你有什么高见没?
这几天比较忙,没有上eeworld,今天刚上来,发邮件给你了,请查收图纸。