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

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

74hc244驱动数码管显示电路及程序_第1张图片

74hc244驱动数码管显示电路

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

74hc244驱动数码管显示电路及程序_第2张图片

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

74hc244驱动数码管显示电路及程序_第3张图片

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; //定义一个亮起和熄灭标志



voidTImer0(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);



}

你可能感兴趣的:(科普,物联网,嵌入式硬件,单片机,51单片机)