当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
数码管显示有静态显示和动态显示两种,静态显示即为对数码 管的每一段进行编码控制达到显示指定数字的目的。动态显示即 通过锁存的方法利用人的视觉暂留,通过有限的单片机IO口显示 更多的数码管。
如图,利用两个锁存器分别控制数码管的段选和位选,即利用了有限的IO口资源实现了控制多个数码管动态扫描显示的功能。
注:74HC573的D0-D7口分别接在单片机的IO口上。
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint j;
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
main(void)
{
P0=0x00;
while(1)
{
for(j=0;j<8;j++)
{
P0=table[j];
delay(500);
}
}
}
#include
#define uchar unsigned char
#define uint unsigned int
sbit DX=P2^6;//控制段选
sbit WX=P2^7;//控制位选
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段选数据,显示数字0-9
uchar code table1[]={0xfe,0xfc,0xfb,0xf7,0xef,0xcf}; //位选数组对1到6六个数码管
uchar i,j;
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
main(void)
{
while(1)
{
for(i=0;i<6;i++)
{
DX=1;
P0=table[i];
DX=0;
WX=1;
P0=table1[i];
WX=0;
delay(1);
}
}
}
void smDisplay(uchar a,uchar b)//a,b分别为段选和位选信号
{
DX=1;
P0=a;
DX=0;
WX=1;
P0=b;
WX=0;
}