大家好,今天小编关注到一个比较有意思的话题,就是关于4位8段数码管动态扫描的问题,于是小编就整理了3个相关介绍4位8段数码管动态扫描的解答,让我们一起看看吧。
74hc573为什么驱动数码管?
74HC573是锁存器,用于数码管显示时通常是***用段选、片选共用同一组并口的驱动方式。
驱动数码管需要两个信号,一个是段选信号,一个是片选信号。段选信号是固定的8个(对于普通7段数码管),而片选信号数量是与数码管位数相同的。
对于8位数码管的动态扫描来说,片选信号要8根线,这样仅仅驱动数码管就占用了2组共16个IO口,非常浪费使用573锁存器后,只占用8+2=10个IO口,其中2个用于控制锁存器使能,另外8个输出信号。
先关闭控制片选信号的573芯片的锁存功能,然后单片机输出片选信号,随后开启锁存,此时无论573的输入端如何变化,输出端都是不变的,也就是原来输入的信号被锁住了。
然后,再关闭控制段选的573的锁存功能,输出段选信号,再锁存,这样就巧妙的实现了数据线的复用,让一组IO口既输出段选又输出片选。
怎样用keil编写4位数码管显示1234的程序?
//头文件:
#include 'reg51.h'
//变量定义:
unsigned char table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//表:共阳数码管 0-9
//引脚定义:
***it SMG_q = P1^0; //定义数码管阳级控制脚(千位)
***it SMG_b = P1^1; //定义数码管阳级控制脚(百位)
***it SMG_s = P1^2; //定义数码管阳级控制脚(十位)
***it SMG_g = P1^3; //定义数码管阳级控制脚(个位)
//函数声明:
void delay(void); //延时子函时
//主函数,C语言的入口函数:
void main(void)
{
unsigned char i=0; //作为查表的索引号
while(1) //不停的循环扫描,不扫描则不显示或显示不正确,即为动态显示,
{ //数码管显示 1234,可自行修改
SMG_q=0; //选择千位数码管
P0=table[1]; //查找'1'定义好的数码管段值与P0口输出,显示相应的1
delay(); //加入短暂延时
P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
SMG_q=1; //关闭千位数码管
SMG_b=0; //选择百位数码管
P0=table[2]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2
delay(); //加入短暂延时
P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
SMG_b=1; //关闭百位数码管
SMG_s=0; //选择十位数码管
P0=table[3]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2
delay(); //加入短暂延时
P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
SMG_s=1; //关闭十位数码管
SMG_g=0; //选择个位数码管
P0=table[4]; //查找'2'定义好的数码管段值与P0口输出,显示相应的2
delay(); //加入短暂延时
P0=0XFF; //清除数码管显示,因是共阳型,所以不是0
SMG_g=1; //关闭个位数码管
}
}
//延时子函数,短暂延时void delay(void){ unsigned char i=10; while(i--);}
数码管显示方式及特点?
动态显示的特点是将所有数码管的段选线并联在一起,通过控制位选信号来控制数码管的点亮。这样一来,就没有必要给每一位数码管配一个锁存器,从而大大简化了硬件电路。
数码管***用动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼的视觉暂留作用,使人感觉好像各位数码管在同时显示,因此亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的限流电阻。
到此,以上就是小编对于4位8段数码管动态扫描的问题就介绍到这了,希望介绍关于4位8段数码管动态扫描的3点解答对大家有用。