请问 4为一体的数码管用一个74HC573连接 用最少的IO口得几个呀? 52单片机加两个74HC573,数码管动态显示,一个573连...

作者&投稿:钭背 (若有异议请与网页底部的电邮联系)
一般需要11位I/O口7个笔画各占一位余下四位用于开关各个数码管的公共电极。

那位朋友说的不错,用11个I/O,7段+4共,扫描点亮是最好的方案,简单且低成本,不就比你说的10个I/O多1个吗,先保证这11个独立,其它功能少一个I/O,可以从另外的功能上协调节约来(如某些地方I/O分时复用等),想想应该可以办到

可以用译码器,然后只需要8个IO口

74hc573在点亮数码管时的作用?求单片机高手解答。是为了节省io口吗?~

74HC573锁存器在数码管显示时作用的确是为了节省IO口,
用编程过程说明其作用:
1.单片机P0口先发送abcdefg hp段选信号。
2.使用一个74HC573将段选信号保存住。

3.单片机P0口再发送位选信号,此时单片机P0口信号不影响被锁存住 的段选信号。

4.使用另一个74HC573锁存住位选信号。

按以上1至4步循环,显示8位数码管只需要10个IO口。

以上为使用并联方式,串联的话就更少了,一般较少使用串联,亮度较差。根据环境需求吧。

图画的不对,既然用了锁存器,就要节约IO端口,两个锁存器的输入应该共用一个端口P0或P2
假设为P0
每个锁存器有1个锁存信号L,需占用两条IO线,假设分别接 P1.6和P1.7
由于是动态扫描显示,所以显示函数调用时要放在WHILE或FOR循环中反复运行,才能看见结果
程序如下:
#include
sbit dula=P1^6;//段锁存信号
sbit wela=P1^7;//位锁存信号
#define uchar unsigned char;
void delay(i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void display(uchar qian_c,uchar bai_c,uchar shi_c,uchar ge_c)//4位显示程序
{
P0=table[qian_c]; //显示千位
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(2);
P0=table[bai_c]; //显示百位
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(2);
P0=table[shi_c]; //显示十位
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(2);
P0=table[ge_c]; //显示个位
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(2);
P0=xff; //显示完毕后关闭所有位显示,也可不要,但退出显示程序时会留尾巴,即最后一个数码管还在显示
wela=1;
wela=0;
}
void main( )
{
 .....//其它代码
 while(1)
  {
display(b1,b2,b3,b4); //调用显示函数
.....//其它代码,不能占用CPU太多时间,否则显示闪烁
  }
}