白滚滚 发表于 2013-3-3 08:59:03

当单片机IO口不够用,却无扩展的时候,能否通过软件...

本帖最后由 白滚滚 于 2013-3-3 11:03 编辑

{:2_28:}单片机的学习之路长途漫漫啊
跪求各位前辈给予指点:
当单片机的IO口不够用,却没有扩展的时候(不可自行接扩展)
能否通过软件编程或者IO口复用解决此问题?
---------------------------------------
单片机为AT89S5单片机一共是32个口
传感器和继电器占用14个
数码管是8+3=11个
液晶显示是8+6=15个(数码管8位数据口和液晶8位数据口用的同一组IO口,测试可用)
按键是8个,为4*4矩阵式键盘
LED1个
---------------------------------------
数码管和液晶显示的数据口共用一组IO口
所以是需要14+8+3+6+8+1=40个,还差8个口

白滚滚 发表于 2013-3-3 09:05:00

jswd0810 发表于 2013-3-3 09:01 static/image/common/back.gif
你可以通过通讯的方式控制IO模块单元来实现

是要模拟总线咩?

cc224 发表于 2013-3-3 09:08:15

当然可以软件+硬件解决
你的问题的io口不够用,那就看看哪些功能可以复用啊,可以多个功能合用一个io口
这些都是具体问题具体分析
也许你可以把你的电路图发上来给大家看看

白滚滚 发表于 2013-3-3 09:16:14

cc224 发表于 2013-3-3 09:08 static/image/common/back.gif
当然可以软件+硬件解决
你的问题的io口不够用,那就看看哪些功能可以复用啊,可以多个功能合用一个io口
这 ...

单片机一共是32个口
传感器和继电器占用14个,
数码管是8+3=11个,
液晶显示是8+6=15个,
按键是8个,
LED1个,
---------------------------------------
数码管和液晶显示的数据段8位共用
所以是需要14+8+3+6+8+1=40个,还差8个口

白滚滚 发表于 2013-3-3 09:17:41

jswd0810 发表于 2013-3-3 09:06 static/image/common/back.gif
不是,可以通过232口或者485之类通讯

{:2_34:} 能不能说的稍微详细点,不是很明白~~~~(>_<)~~~~

cc224 发表于 2013-3-3 09:28:56

按键用扫描法解决吧,应该可以和别的复用的
传感器如果是数字IO读入,应该也可以和数码管什么的合用
液晶有EN端吧,只要en不使能,别的14个脚都可以随便用,用来做按键、数字型传感器输入肯定是没问题的

wajlh 发表于 2013-3-3 09:35:54

本帖最后由 wajlh 于 2013-3-3 09:40 编辑

白滚滚 发表于 2013-3-3 09:16 static/image/common/back.gif
单片机一共是32个口
传感器和继电器占用14个,
数码管是8+3=11个,


数码管的8+3和液晶的8+6 和按键的8。其中的8可以复用的。控制好时序即可。最简单的是液晶的8和按键的8复用。这样对时序要求不高。

laujc 发表于 2013-3-3 09:44:08

白滚滚 发表于 2013-3-3 09:16 static/image/common/back.gif
单片机一共是32个口
传感器和继电器占用14个,
数码管是8+3=11个,


很奇怪为什么不选用44脚面的芯片呢?
LCD一般有专用驱动,和其他功能不能同时使用,继电器和传感器也需要单独使用.
数码管和LED和按键可以复用.

32个IO还是不够.
楼主可以看一下TM1668,这个可以扩展显示和按键.

白滚滚 发表于 2013-3-3 10:29:03

jswd0810 发表于 2013-3-3 09:32 static/image/common/back.gif
从你这个看的话你可以把液晶的数据线和数码管的数据线用同一组IO口就行了啊 ...

数码管和液晶的数据线用的是同一组IO口之后还缺8个的

白滚滚 发表于 2013-3-3 10:32:34

laujc 发表于 2013-3-3 09:44 static/image/common/back.gif
很奇怪为什么不选用44脚面的芯片呢?
LCD一般有专用驱动,和其他功能不能同时使用,继电器和传感器也需要单 ...

谢谢~~~
液晶和数码管的数据线可以用同一组IO口,这个已经试验过了,没有问题
我也想用44口的,不过这个是给定你硬件让你搭建电路,编写程序,硬件自己改不了

白滚滚 发表于 2013-3-3 10:35:35

jswd0810 发表于 2013-3-3 09:33 static/image/common/back.gif
我那个说的相当于你自己外扩一个PCB了

{:2_34:} 我觉得这对我这个初学者来说有点难度.....

XA144F 发表于 2013-3-3 10:40:21

什么液晶要8+6跟线?如果能用串行的话就省多了。

cafppla1 发表于 2013-3-3 10:49:41

什么单片机?什么按键?不是矩阵键盘单片机有ad的话,一个io即可

白滚滚 发表于 2013-3-3 10:51:44

XA144F 发表于 2013-3-3 10:40 static/image/common/back.gif
什么液晶要8+6跟线?如果能用串行的话就省多了。

惨无人道的不带字库的12864.....

gzhmcu 发表于 2013-3-3 10:58:14

白滚滚 发表于 2013-3-3 09:16 static/image/common/back.gif
单片机一共是32个口
传感器和继电器占用14个,
数码管是8+3=11个,


用74HC245扩展吧

cafppla1 发表于 2013-3-3 11:00:03

继电器,传感器有几个输入和输出区分好,用74的译码器或编码器可以省很多…

白滚滚 发表于 2013-3-3 11:06:42

cafppla1 发表于 2013-3-3 10:49 static/image/common/back.gif
什么单片机?什么按键?不是矩阵键盘单片机有ad的话,一个io即可

是AT89S52,用的是4*4矩阵键盘

zuu0 发表于 2013-3-3 11:14:08

8个按键改成独立按键和数码管共用IO,正好多出8个

XA144F 发表于 2013-3-3 11:20:10

白滚滚 发表于 2013-3-3 10:51 static/image/common/back.gif
惨无人道的不带字库的12864.....

的确够惨的,这样的话就换带字库且能串行的ST7920,这样不算犯规吧?{:lol:}

takashiki 发表于 2013-3-3 12:02:12

本帖最后由 takashiki 于 2013-3-3 12:11 编辑

白滚滚 发表于 2013-3-3 09:16 static/image/common/back.gif
单片机一共是32个口
传感器和继电器占用14个,
数码管是8+3=11个,
液晶显示是8+6=15个,
按键是8个,
LED1个,
---------------------------------------
数码管和液晶显示的数据段8位共用
所以是需要14+8+3+6+8+1=40个,还差8个口
按键和数码管、LCD的八位可以复用,于是就够了,注意分时复用,按键有4个输出4个输入,在按键时千万记住关闭数码管显示,另外在按键的8根线上都串接较大的电阻,比如5.1K,至少要在4根输入线上串!

如果还想继续省的话,液晶的6个控制脚有三根可以和数码管的位选复用,主要好分配时间。操作完液晶时,千万要将这三根线恢复到原来的状态,这样基本上不会影响数码管的显示,因为液晶操作时间并不长。

接着省:使用上述方法将液晶的另外一个控制脚与LED复用,又少占用一个引脚。

修改原因:继续省线大法。使用本人的方案可以为您节省12个引脚,够你用了并且还可以继续扩展功能。

mon51 发表于 2013-3-3 12:44:44

你的键盘可以和Led显示公用一部分,具体要看你的电路。采用2*8=16扫描。可以省几根。如果添加595,可以省一大堆!

白滚滚 发表于 2013-3-3 15:00:32

XA144F 发表于 2013-3-3 11:20 static/image/common/back.gif
的确够惨的,这样的话就换带字库且能串行的ST7920,这样不算犯规吧?...

{:2_35:} 犯规的.....就只能用12864.....一切不带字库的液晶都是流氓

y574924080 发表于 2013-3-3 15:36:06

白滚滚 发表于 2013-3-3 15:00 static/image/common/back.gif
犯规的.....就只能用12864.....一切不带字库的液晶都是流氓

12864也有带字库的,带字库的12864控制器有好几种,ST7920是其中一中

白滚滚 发表于 2013-3-3 15:37:30

takashiki 发表于 2013-3-3 12:02 static/image/common/back.gif
按键和数码管、LCD的八位可以复用,于是就够了,注意分时复用,按键有4个输出4个输入,在按键时千万记住关 ...

1、按键是4*4矩阵键盘,需要采用扫描法,如果跟液晶和数码管的八位复用,会不会检测按键的时候出现混乱,再就是不能更改硬件,所以不能接上拉电阻
2、将液晶的一个控制脚与LED复用,控制引脚电平改变,LED也会随着亮灭的吧,会影响原来LED的状态

白滚滚 发表于 2013-3-3 15:38:58

y574924080 发表于 2013-3-3 15:36 static/image/common/back.gif
12864也有带字库的,带字库的12864控制器有好几种,ST7920是其中一中

嗯啦,我用的是不带字库的~

takashiki 发表于 2013-3-3 16:04:20

白滚滚 发表于 2013-3-3 15:37 static/image/common/back.gif
1、按键是4*4矩阵键盘,需要采用扫描法,如果跟液晶和数码管的八位复用,会不会检测按键的时候出现混乱, ...

1、检测按键时,要关闭数码管和LCD的。对于LCD,CS拉高就可以了;对于数码管,将位选的三极管全部截止就可以了。
按键不要接上拉电阻,51的P1、P2、P3都有内部弱上拉的。为了防止按键干扰数码管和LCD,是要串联电阻,为了方便,可以串排阻。
2、将液晶的一个控制脚与LED复用,控制引脚电平改变,LED也会随着亮灭,是会影响原来LED的状态,但是人眼反应不过来。你要知道,控制引脚电平改变的时间很短很短,对于LED的亮度根本就无法产生影响。人眼的视觉暂留时间为40ms,这么长的时间里,LCD的数据早发送完了,这时要恢复LED原来的状态,就可以了。实际上就相当于动态扫描了,一样的道理。

对于按键和数码管段选/位选复用的例子,请谷歌/百度”周立功 DP-51 电路图“之类。

takashiki 发表于 2013-3-3 16:07:11

白滚滚 发表于 2013-3-3 15:37 static/image/common/back.gif
1、按键是4*4矩阵键盘,需要采用扫描法,如果跟液晶和数码管的八位复用,会不会检测按键的时候出现混乱, ...

你硬件都不能更改,那说其他的什么都是白搭啊,该占多少IO还是占用了多少IO,仅仅靠软件,是做不到的,必须软件和硬件配合才行啊。

xiaobendan001 发表于 2013-3-3 17:46:27

唯一的可能就是按键复用到数据线上面了,配合液晶的功能线扫描或者直接8个数据线做4*4扫描,不过会干扰到液晶显示的,要是IO能设置为推挽输出就好了

sdf159372008 发表于 2013-3-3 21:06:29

最近在研究液晶,下来看看~!

hamipeter 发表于 2013-3-4 09:43:44

takashiki 发表于 2013-3-3 16:04
1、检测按键时,要关闭数码管和LCD的。对于LCD,CS拉高就可以了;对于数码管,将位选的三极管全部截止就 ...

可以借鉴下

wgui 发表于 2013-3-4 23:42:08

本帖最后由 wgui 于 2013-3-4 23:45 编辑

继电器属于使用输出接口,输出接口可以使用74HC573作输出接口扩展。共用8位数据口,每个占用一个使能接口。操作时将使能方面处理好就不会冲突了。

gao_hailong 发表于 2013-3-5 08:50:56

takashiki 发表于 2013-3-3 16:07 static/image/common/back.gif
你硬件都不能更改,那说其他的什么都是白搭啊,该占多少IO还是占用了多少IO,仅仅靠软件,是做不到的,必 ...

同意,不改硬件,你看电路怎么连的就怎么编程,还有神马办法

chengtina 发表于 2013-3-5 09:00:59

硬件不改就靠软件?什么叫硬件不改啊?你现在电路都还定下来,硬件电路就可以改变啊,只是不换元件吧?

XA144F 发表于 2013-3-7 08:25:21

硬件不改就靠软件?典型的意识决定物质啊~~~不理LZ了,让他自己折腾去……

liub_2014 发表于 2013-3-7 21:40:38

yydd_1 发表于 2013-3-8 14:06:19

takashiki 发表于 2013-3-3 12:02 static/image/common/back.gif
按键和数码管、LCD的八位可以复用,于是就够了,注意分时复用,按键有4个输出4个输入,在按键时千万记住关 ...

同意楼主的看法,
有疑问,4*4键盘与LED数码管显示的数据口接在一起,是否会有干扰?

takashiki 发表于 2013-3-8 14:28:19

yydd_1 发表于 2013-3-8 14:06 static/image/common/back.gif
同意楼主的看法,
有疑问,4*4键盘与LED数码管显示的数据口接在一起,是否会有干扰?
...

您是说键盘干扰数码管还是数码管干扰键盘?周立功已经在他的DP-51中明确指出,是不会有干扰的。

键盘干扰数码管吗?键盘中串有电阻或二极管的,周立功的方案串的是二极管,我的方案是电阻。比如只在键盘的行上串10k的电阻,那么键盘导通时会产生5V/10kΩ=0.5mA的电流,根本不足以影响LED。嫌这个电流大了,那就把电阻再加大。
数码管干扰键盘吗?这个需要软件处理了。键盘扫描必须在数码管全灭的情况下进行。

如再有疑问,请自己做试验验证。我在我的商用产品中大量采用此方案,我自己就不再验证了。

william_rain 发表于 2013-3-8 14:46:30

换stm32啊

mey 发表于 2013-4-1 08:41:12

亚龙的设备不是有MCU12扩展模块么 8255芯片 这还不够口?

磊磊映画 发表于 2013-4-1 08:48:46

串口转并口或者用锁存器,译码器

bbssilverkey 发表于 2013-4-1 08:51:44

买LQF44封装,48个脚还不够么?价钱差1-2元

kebaojun305 发表于 2013-4-1 09:03:16

不能改硬件楼主就不用想了没有办法    改硬件的话数码管和按键+LED可以复用。

磊磊映画 发表于 2013-4-1 09:05:56

你这个所有口都用上了,程序能放得下吗   s52啊

tonyone 发表于 2013-4-1 21:52:34

打个包叫外卖好了{:lol:}

james_lover 发表于 2013-4-1 22:28:45

接个编码器到IO口

jinniuxing88 发表于 2013-4-12 14:33:16

{:smile:},我也遇到类似的问题,

电子爱好者_MCU 发表于 2013-4-12 15:42:49

这种情况必须结合硬件来解决了 在继电器和传感器上做文章 或者液晶采用串口通信 可以采用译码器来控制继电器和灯 因为只有两个状态

clarkewayne 发表于 2013-4-13 10:50:35

我是来围观的

sun_changdong 发表于 2013-4-14 09:59:42

用MAX7219驱动数码管!

ttb2008 发表于 2013-4-14 10:14:46

STC12c5a60s2有48脚的,有43个IO可以用

renwocai 发表于 2013-4-14 22:01:40

看了楼主的几样硬件,就想起亚龙236,再搜下楼主的帖子,果然是,在IO不够的情况下,8255不就是专干这个的吗?

dragonflag 发表于 2013-4-15 00:15:47

4x4键盘中的4条输出线可以与显示数据线复用,因为显示和读键盘不会同时进行,只要在不读键盘时把输入线置为高阻,就没有干扰。这样省下4IO
数码管的3条控制线可以与LCD控制线复用。因为读写LCD是很快的,对数码管造成的影响,肉眼分辨不出的。只要这3条线不占用LCD的读写允许脚,那么读写数码管对LCD也没有影响。这样省3IO
1条LED也可与LCD控制线复用。道理与数码管相同。又省下1IO
总共8IO。满足楼主的要求了,但在编写程序时,必须考虑器件占用IO的优先权问题。非第一优先的器件在完成一个操作后,必须立即恢复IO的原状。程序比较复杂了,效率也有所下降

qwe2231695 发表于 2013-4-15 02:43:48

介绍你一颗神器: 74hc5955毛钱

261854681 发表于 2013-4-15 10:47:52

开关量全部用移位寄存噐,可以省一堆线

吴绍昂 发表于 2013-4-15 11:30:10

没有了解过主控芯片,不知道有没有AD,如果有,可以在开关处做手脚。
一个IO口控制八个开关,采用电阻分压原理!具体网上可以自己搜索一下!

yydd_1 发表于 2016-1-14 08:10:10

takashiki 发表于 2013-3-8 14:28
您是说键盘干扰数码管还是数码管干扰键盘?周立功已经在他的DP-51中明确指出,是不会有干扰的。

键盘干 ...

明白了,谢谢
页: [1]
查看完整版本: 当单片机IO口不够用,却无扩展的时候,能否通过软件...