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

aishuang6 2009-05-19 11:20:15
最普通的行列矩阵式驱动,可以用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)
哪位兄弟能发表一下高见?
谢谢啦!

...全文
207 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
aishuang6 2009-05-30
  • 打赏
  • 举报
回复
回应ZHKFLYING:
邮件已收到,谢谢你啦!
zhkflying 2009-05-29
  • 打赏
  • 举报
回复
这几天比较忙,没有上CSDN,今天刚上来,发邮件给你了,请查收图纸。
aishuang6 2009-05-23
  • 打赏
  • 举报
回复
回复LVWUWEI;
呵呵`` 没有啦,正急着、、、、等待中!
请问你有什么高见没?
zhkflying 2009-05-22
  • 打赏
  • 举报
回复
如果一定要用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 2009-05-22
  • 打赏
  • 举报
回复

aishuang6 2009-05-22
  • 打赏
  • 举报
回复
请问zhkflying:
那怎么办?有别的办法没?我改用P0口,它不是没上拉嘛,外接上拉之后,若P0.0为高阻态,我能不能控制其上拉不用从而转为高阻态,能的话又是怎么控制的?
zhkflying 2009-05-22
  • 打赏
  • 举报
回复
此时LED12点亮,而IO_3还是出1使得LED9点亮;是不是当I/O口设为高阻态输入的,没有起到真正高阻态的作用呢?
——如果是Intel的8051,那么P1口内部有个上拉电阻,确实不是高阻态!
aishuang6 2009-05-22
  • 打赏
  • 举报
回复
请问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口设为高阻态输入的,没有起到真正高阻态的作用呢?
请各路大虾指点!
lvwuwei 2009-05-22
  • 打赏
  • 举报
回复
嘿嘿 楼上的 请问 版主 加了你好友没? 关于那个电路图看到啦吗?
aishuang6 2009-05-22
  • 打赏
  • 举报
回复
回应ZHKFLYING:
上面的电路图看不到,麻烦你发给我,我的QQ:296015908(296015908@qq.com)

谢谢!
zhkflying 2009-05-21
  • 打赏
  • 举报
回复
如果你用的是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口作为输入或输出的寄存器。
aishuang6 2009-05-21
  • 打赏
  • 举报
回复
请问zhkflying:
一个简单的问题,当I/O口为高阻态,用汇编怎么写的?或者说LED12亮怎么写?
请大虾们指点指点.........
zhkflying 2009-05-21
  • 打赏
  • 举报
回复
提供下面的真值表给你参考:

IO_01 IO_02 IO_03 哪个LED亮
输出高 输出低 高阻态 LED12
输出低 输出高 高阻态 LED13
输出高 高阻态 输出低 LED9
输出低 高阻态 输出高 LED10
高阻态 输出高 输出低 LED8
高阻态 输出低 输出高 LED11
aishuang6 2009-05-20
  • 打赏
  • 举报
回复
呵呵,当LED多了,其占空比很低的!(这无关紧要的)
我只是想就上面的电路图写个程序试试
可不知道怎么写,一点思路都没有!
你说的扫描又是怎么回事的?
请多多指点下!!!
lbing7 2009-05-20
  • 打赏
  • 举报
回复
大概感觉了一下它的设计想法

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

它做为控制线

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

这样想法是不错

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

这会不会太郁闷?

呵呵
aishuang6 2009-05-20
  • 打赏
  • 举报
回复
恩,就是ouravr上面的,其图为:

我很想知道是怎么用汇编编程的?
aishuang6 2009-05-20
  • 打赏
  • 举报
回复
对呀!我怎么没想到呢!?
呵呵`~多谢slowhand指点!不小虾咪在这里恭候
多时,还是希望更多的大虾来指点迷津,有程序参考更好.......
谢谢诸位!
shuiyan 2009-05-20
  • 打赏
  • 举报
回复
“高电平输出”“高阻输入”两种情况下都是不亮吧?
没看到图,是ouravr的哪个帖子?
APM60- 2009-05-20
  • 打赏
  • 举报
回复
感觉说的这些很像俺前一阵子刚用上的4*4键盘。
LED不知道怎么保证常亮长灭,硬件不懂哈~

键盘的思路:
1、第一行给低电平,其他三行高电平,看第几列被拉低了。(1行n列键被按下)
2、第二行……
3、……
4、……

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧