74hc244驱动数码管显示电路及程序

LED电路

109人已加入

描述

把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图:

数码管

74hc244驱动数码管显示电路

大部分的逻辑IC的吸收电流要强于输出电流。因此,大家都爱使用共阴极的数码管,因为可选的IC多些。可是这组数码管是共阳的,因此公共端用三级管来驱动。最常用的S9012,首先得计划好电路方式,就采用最常用的动态扫描显示。先搭建最简电路,调试出需采用元件的参数。

数码管

先不接上图的R2和74HC244,将数码管一个段直接接地。调节R1,测得S9012基极电流为0.21mA时集电极也就是数码管上已有40mA,说明放大倍数足够了。这时接上R2和74HC244,调节R2使数码管电流控制在15mA,这样当8个段一起点亮时三极管上得通过120mA的电流。而基极上需要0.63mA,为了减小三极管的负荷应使三极管过饱和,,调节R1使基极电流为2mA,此时测得集电极和漏极之间的电压约0.1V。此时R1为2K。R2为240欧姆。

数码管

74hc244驱动数码管显示电路图

74hc244驱动数码管显示程序

查询方式程序

//六位管码管在以0.3秒的间隔在闪烁,这是采用查询方式的,比较占CUP资源

# include

typedef unsigned char uchar;

uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码值表:0,1,2,3,4,5

uchar code meg_val[]={0x03,0x9f,0x25,0x0d,0x99,0x49};//段码值表:0,1,2,3,4,5

uchar code hello[]={0x03,0xe3,0xe3,0x61,0x91,0xff}; //HELLO

uchar code beybey[]={0x89,0x61,0xc1,0x89,0x61,0xc1};//beybey

uchar code ab6789[]={0xc1,0x11,0x09,0x01,0x1f,0x41};//ab6789

void delay(int n);

void main(void)

{

uchar i,m;

P2=0xff; //先将段码关闭

P3=0xff; //将位码关闭

delay(20);//等待一会

while(1)

{

for (m=30;m》0;m--) //显示30次约0.3秒

{

for(i=0;i《=5;i++)

{

P2=0xff;

P3=bit_num[i]; //输出位码到P3口

P2=ab6789[i]; //输出段码到P2口

delay(5);

}

}

P2=0xff; //关闭段码

P3=0xff; //关闭位码

delay(1000); //等待0.3秒

}

}

void delay(int n) //子程序

{

int j;

uchar k;

for(j=0;j

{

for(k=255;k》0;k--);

}

}

中断显示程序

//这是采用中断方式的,也是带闪烁的。

# include

typedef unsigned char uchar;

uchar code bit_num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码:0,1,2,3,4,5

uchar code meg_val[]={0x49,0x99,0x0d,0x25,0x9f,0x03};//段码:0,1,2,3,4,5

uchar i,aa; //定义全局变量

bit fg; //定义一个亮起和熄灭标志

void timer0(void) interrupt 1 using 1 //中断程序

{

if (fg) //当fg为1时点亮6位数码管

{ P2=0xff;

if (i》=6)

{

i=0;

}

else

{

P3=bit_num[i]; //输出位码到P3口

P2=meg_val[i]; //输出段码到P2口

i++;

}

}

else //当fg为0时熄灭数码管

{

if(aa==0)

{

P3=0xff;

P2=0xff;

}

}

aa++;

if (aa》=254) //当aa值累加至254时fg标志翻转。

{

fg=~fg;

aa=0;

}

TH0=0xf8; //重装定时器初值,2ms,值为65536-2000

TL0=0x30;

}

void main(void)

{

P2=0xff; //先将段码关闭

P3=0xff; //将位码关闭

TMOD=0x01;//设置T0为模式1

TH0=0xf8; //装入计数初值高位

TL0=0x30; //装入计数初值低位

EA=1; //总充许

ET0=1; //T0充许

fg=1; //将亮、灭标志设置为亮

TR0=1; //启动中断

while(1);

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分