• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

如何用3个I/O控制,8个LED.

如何用3个I/O控制8个LED.可以另外加三极管.
全部回复(41)
正序查看
倒序查看
ghsdwf
LV.6
2
2006-03-08 17:27
3--8 译码器
0
回复
mielum
LV.2
3
2006-03-08 17:57
@ghsdwf
3--8译码器
忘了,要省成本,不能用译码器,这个我知道.
0
回复
sdjufeng
LV.6
4
2006-03-09 22:33
@mielum
忘了,要省成本,不能用译码器,这个我知道.
不用译码器,你的问题无解,不用耽误功夫了.
0
回复
ma3722
LV.2
5
2006-03-09 23:07
@sdjufeng
不用译码器,你的问题无解,不用耽误功夫了.
有解.
有正接,有反接,有动态扫描,
0
回复
sdjufeng
LV.6
6
2006-03-09 23:49
@ma3722
有解.有正接,有反接,有动态扫描,
只能驱动六个,完不成八个.
0
回复
azhu
LV.8
7
2006-03-10 09:55
6个的话,较容易实现些.
1个LED有两种状态,亮和灭.8个一共有16种状态.
1个I/O口静态只有三种状态,高、低和高阻态.3个I/O静态只有9个状态,无法控制16个状态.因此要想简单控制,是无法做到的,特殊方法下,可以做到,但电路会复杂.
下图是3个控制6灯,低,上灯亮,高下灯亮,高阻灯灭.
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1141955661.jpg');}" onmousewheel="return imgzoom(this);">
0
回复
ghsdwf
LV.6
8
2006-03-10 12:27
@azhu
6个的话,较容易实现些.1个LED有两种状态,亮和灭.8个一共有16种状态.1个I/O口静态只有三种状态,高、低和高阻态.3个I/O静态只有9个状态,无法控制16个状态.因此要想简单控制,是无法做到的,特殊方法下,可以做到,但电路会复杂.下图是3个控制6灯,低,上灯亮,高下灯亮,高阻灯灭.[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141955661.jpg');}"onmousewheel="returnimgzoom(this);">
佩服佩服!强人,顶!!!!
0
回复
ma3722
LV.2
9
2006-03-10 18:09
@sdjufeng
只能驱动六个,完不成八个.
发一个12LED的,更多LED的以后再发.
1141986012.doc
0
回复
sdjufeng
LV.6
10
2006-03-10 19:00
@ma3722
发一个12LED的,更多LED的以后再发.1141986012.doc
1
0
回复
sdjufeng
LV.6
11
2006-03-10 19:07
@sdjufeng
1
2
0
回复
sdjufeng
LV.6
12
2006-03-10 19:13
@ma3722
发一个12LED的,更多LED的以后再发.1141986012.doc
这是你的图片:
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1141988873.png');}" onmousewheel="return imgzoom(this);">
我很赞同你对技术问题的认真态度.
但我也提出我的看法,楼主的八个指示灯要求是互不相关的,也就是互相独立的.要测试是否能够独立,最简单的办法就是让每一个灯单独的点亮,而让其他所有的灯都不亮,看能否实现.D1-6是可以的,但是7-12这六个,至少有三个是亮的,1-6改变状态时,7-12将伴随着乱亮,对不对?
0
回复
sdjufeng
LV.6
13
2006-03-10 19:26
@azhu
6个的话,较容易实现些.1个LED有两种状态,亮和灭.8个一共有16种状态.1个I/O口静态只有三种状态,高、低和高阻态.3个I/O静态只有9个状态,无法控制16个状态.因此要想简单控制,是无法做到的,特殊方法下,可以做到,但电路会复杂.下图是3个控制6灯,低,上灯亮,高下灯亮,高阻灯灭.[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141955661.jpg');}"onmousewheel="returnimgzoom(this);">
你的分析思路是对的,但是方法不妥,因为任何一只管子点亮,它自身不能取高阻的状态,另一个端子也不能取高阻状态,实际上高阻不能作为一种有效的状态,这样,总状态数就是2的三次方等于8.
另外,你的这个图,如果想让六个指示灯都不亮或者都亮,该怎么办呢?因为上下两个灯至少有一个是亮的.
像上面那个朋友的那个图,如果只用两种电平,也不能实现任何一支管子的随意点亮,必须让第三条引脚处于高阻状态.看来不用译码器的方式的确很受局限性,这个成本节省的不值.
0
回复
azhu
LV.8
14
2006-03-11 07:53
@sdjufeng
你的分析思路是对的,但是方法不妥,因为任何一只管子点亮,它自身不能取高阻的状态,另一个端子也不能取高阻状态,实际上高阻不能作为一种有效的状态,这样,总状态数就是2的三次方等于8.另外,你的这个图,如果想让六个指示灯都不亮或者都亮,该怎么办呢?因为上下两个灯至少有一个是亮的.像上面那个朋友的那个图,如果只用两种电平,也不能实现任何一支管子的随意点亮,必须让第三条引脚处于高阻状态.看来不用译码器的方式的确很受局限性,这个成本节省的不值.
:)
你可能还是没明白我的电路.这个电路是用1个I/O口控制2个LED.当I/O口处于高阻态时,两个LED都是不亮的.因为2个LED上的压降只有0V7,因此是不会亮的.高的时候,下灯亮,低的时候上灯亮,以高低电平作变化时,两个灯一起亮.我曾在一个充电器电路中实际使用过该电路.
0
回复
azhu
LV.8
15
2006-03-11 07:56
@sdjufeng
这是你的图片:[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141988873.png');}"onmousewheel="returnimgzoom(this);">我很赞同你对技术问题的认真态度.但我也提出我的看法,楼主的八个指示灯要求是互不相关的,也就是互相独立的.要测试是否能够独立,最简单的办法就是让每一个灯单独的点亮,而让其他所有的灯都不亮,看能否实现.D1-6是可以的,但是7-12这六个,至少有三个是亮的,1-6改变状态时,7-12将伴随着乱亮,对不对?
即使是单独控制,D1-D6也是不可以的.
假如我要D1,D2,D4,三灯都亮,它就无法做到了.
0
回复
sdjufeng
LV.6
16
2006-03-11 09:37
@azhu
:)你可能还是没明白我的电路.这个电路是用1个I/O口控制2个LED.当I/O口处于高阻态时,两个LED都是不亮的.因为2个LED上的压降只有0V7,因此是不会亮的.高的时候,下灯亮,低的时候上灯亮,以高低电平作变化时,两个灯一起亮.我曾在一个充电器电路中实际使用过该电路.
你说得对,我没有仔细考虑那个二极管的作用,加上动态,是可以独立控制的.你的方法比较好,可以实现静态显示,既可以减小程序的压力,又可以提高管子的亮度.
0
回复
sdjufeng
LV.6
17
2006-03-11 09:45
@azhu
即使是单独控制,D1-D6也是不可以的.假如我要D1,D2,D4,三灯都亮,它就无法做到了.
可以的,首先,所有灯都灭,所有输出都为高阻即可,其实,1-6的接法都是一样的,其中的某一支点亮,可以让与它的正极相连的引脚输出高电平,负极相连的引脚输出低电平,另一个引脚高阻,是可以单独点亮其中一只的,然后动态扫描,即可.
0
回复
ma3722
LV.2
18
2006-03-11 10:11
@sdjufeng
这是你的图片:[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141988873.png');}"onmousewheel="returnimgzoom(this);">我很赞同你对技术问题的认真态度.但我也提出我的看法,楼主的八个指示灯要求是互不相关的,也就是互相独立的.要测试是否能够独立,最简单的办法就是让每一个灯单独的点亮,而让其他所有的灯都不亮,看能否实现.D1-6是可以的,但是7-12这六个,至少有三个是亮的,1-6改变状态时,7-12将伴随着乱亮,对不对?
你讲的对,这个方法不行.
但我总是认为有其他办法.
让我再想想吧.
大家也一起想想吧!!!
0
回复
sujianli
LV.3
19
2006-03-12 03:27
@sdjufeng
你说得对,我没有仔细考虑那个二极管的作用,加上动态,是可以独立控制的.你的方法比较好,可以实现静态显示,既可以减小程序的压力,又可以提高管子的亮度.
完全没有实际应用价值
用个595之类的多简单方便,0.5元不到就解决问题.关键是也可靠
0
回复
sdjufeng
LV.6
20
2006-03-12 08:57
@sujianli
完全没有实际应用价值用个595之类的多简单方便,0.5元不到就解决问题.关键是也可靠
是的,只是理论探讨,并不代表实际使用,因为楼主要求必须这样
0
回复
ourway
LV.3
21
2006-03-12 17:29
@azhu
:)你可能还是没明白我的电路.这个电路是用1个I/O口控制2个LED.当I/O口处于高阻态时,两个LED都是不亮的.因为2个LED上的压降只有0V7,因此是不会亮的.高的时候,下灯亮,低的时候上灯亮,以高低电平作变化时,两个灯一起亮.我曾在一个充电器电路中实际使用过该电路.
你所谓的高阻状态在单片机能实现吗?一个bit位就两种状态的.不知道何解?除非你的单片机IO口是三态门呀!
0
回复
njyd
LV.8
22
2006-03-12 23:27
@ourway
你所谓的高阻状态在单片机能实现吗?一个bit位就两种状态的.不知道何解?除非你的单片机IO口是三态门呀!
  对呀,51怎么设置高阻态?
0
回复
sdjufeng
LV.6
23
2006-03-13 00:05
@njyd
  对呀,51怎么设置高阻态?
是的,它的这种方法在51单片机上是不行的,不过有些单片机是可以的,它可以将端口设置为输入或者输出,其中的输入就是高阻状态.
0
回复
azhu
LV.8
24
2006-03-13 08:40
@ourway
你所谓的高阻状态在单片机能实现吗?一个bit位就两种状态的.不知道何解?除非你的单片机IO口是三态门呀!
设置为输入态就是高阻态呀.
0
回复
azhu
LV.8
25
2006-03-13 08:48
@sujianli
完全没有实际应用价值用个595之类的多简单方便,0.5元不到就解决问题.关键是也可靠
此话错矣,我曾经开发一款多功能的充电器,其中要用到13个LED,正好用此办法解决了I/O口不够的问题.就是下面这款充电器,它的单片机是用只有12个I/O口的.其中A/D就用了3个,按键用了1个,LED用了7个,PWM用了1个.共12个.
而每个LED都是可以单独控制的.

500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1142211234.jpg');}" onmousewheel="return imgzoom(this);">
0
回复
mielum
LV.2
26
2006-03-14 16:34
@sdjufeng
这是你的图片:[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141988873.png');}"onmousewheel="returnimgzoom(this);">我很赞同你对技术问题的认真态度.但我也提出我的看法,楼主的八个指示灯要求是互不相关的,也就是互相独立的.要测试是否能够独立,最简单的办法就是让每一个灯单独的点亮,而让其他所有的灯都不亮,看能否实现.D1-6是可以的,但是7-12这六个,至少有三个是亮的,1-6改变状态时,7-12将伴随着乱亮,对不对?
这个电路不能用,不能单独控制.D1,D2,D3/D5,D4,D6.会出现同时亮的时候.
0
回复
mielum
LV.2
27
2006-03-14 16:40
@azhu
6个的话,较容易实现些.1个LED有两种状态,亮和灭.8个一共有16种状态.1个I/O口静态只有三种状态,高、低和高阻态.3个I/O静态只有9个状态,无法控制16个状态.因此要想简单控制,是无法做到的,特殊方法下,可以做到,但电路会复杂.下图是3个控制6灯,低,上灯亮,高下灯亮,高阻灯灭.[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141955661.jpg');}"onmousewheel="returnimgzoom(this);">
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1142325560.jpg');}" onmousewheel="return imgzoom(this);">
这个3控6个LED ,这个4控8个LED.这个电路会好些.
0
回复
mielum
LV.2
28
2006-03-14 16:44
@azhu
:)你可能还是没明白我的电路.这个电路是用1个I/O口控制2个LED.当I/O口处于高阻态时,两个LED都是不亮的.因为2个LED上的压降只有0V7,因此是不会亮的.高的时候,下灯亮,低的时候上灯亮,以高低电平作变化时,两个灯一起亮.我曾在一个充电器电路中实际使用过该电路.
赞成,可以实现,谢谢各大侠努力的工作,努力的的发贴.
0
回复
mielum
LV.2
29
2006-03-14 16:45
@azhu
6个的话,较容易实现些.1个LED有两种状态,亮和灭.8个一共有16种状态.1个I/O口静态只有三种状态,高、低和高阻态.3个I/O静态只有9个状态,无法控制16个状态.因此要想简单控制,是无法做到的,特殊方法下,可以做到,但电路会复杂.下图是3个控制6灯,低,上灯亮,高下灯亮,高阻灯灭.[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1141955661.jpg');}"onmousewheel="returnimgzoom(this);">
你这个损耗太大了.
0
回复
mielum
LV.2
30
2006-03-14 16:57
@sujianli
完全没有实际应用价值用个595之类的多简单方便,0.5元不到就解决问题.关键是也可靠
不是的,在消费类电子方面是有大作用的.
0
回复
azhu
LV.8
31
2006-03-15 08:30
@mielum
[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1142325560.jpg');}"onmousewheel="returnimgzoom(this);">这个3控6个LED,这个4控8个LED.这个电路会好些.
在实际应用上,你贴出的这个电路是存在问题的.
比如,如果我只要D1亮,其它灯不亮,那么电路中就必须R2连接的I/O为高,R1连接的I/O脚为低,R3连接的为高阻.
在这个情况下,R2的I/O高会通过R2,D4,D5,R1,到R1的低,D4和D5会有微微的亮.你不信的话,可以一试.
这个电路已经有失败的经验了.
0
回复