数码管电路及实验 [原创]转贴请标明出处!ahai0306/mcu_51 http://blog.**/ahai0306/
今天讲数码管电路,数码管分为共阴极和共阳极,顾名思义大家应该能理解其意思。 对于数码管的驱动,常用的有IO口直接驱动,三极管驱动,芯片驱动,大功率的还要增加驱动能力。 开发板中选择的是常用的2位数码管,这样的可以采取IO口直接驱动,电路如下:

上面的段码SEG[A..H]连到开发板的P1口,位码Dig0和Dig1分别连接到IO口的P04和P05,由于采用的IO直接驱动,选择了共阴极数码管,并且在P1口上拉1K电阻, 增强P1口驱动能力。在1-2位数码管的时候,完全可以采用IO直接驱动,而没有必要增加三极管驱动电路,这个电路已经经过实践验证的,没有问题的。 再看一下三极管驱动电路,

这个电路采用的数码管驱动电路是三极管驱动,共阳极数码管,另外在SEG[A..H]中,要串联个270欧姆左右的限流电阻,具体值可根据实际亮度调整。 再举一种常用的键盘数码芯片ZLG7289,如下图,64个按键,8位数码管,直接和单片机进行SPI通信就可以了。

象数码管的电路还有很多,比如使用74595芯片,74164芯片,还有好几种其它的键盘显示芯片,价格上都相差不是太大,三极管驱动的最为便宜,但程序要动态扫描占用CPU资源多。使用专用键盘显示芯片的要贵一点,但单片机处理起来很简单。 对与第一种图,本博客以前发过其静态,动态的C和汇编语言程序,大家可以在本博客08年的**中找找,现在只把动态C语言的贴出来: #include <reg52.h> //调用头文件(单片机内部的寄存器定义) /******本段为硬件I/O口定义********/ sbit LED0 = P0 ^ 0; sbit LED1 = P0 ^ 1; sbit LED2 = P0 ^ 2; sbit LED3 = P0 ^ 3; sbit DIG0 = P0 ^ 4; //数码管位0 sbit DIG1 = P0 ^ 5; //数码管位1 sbit BUZZ = P3 ^ 4; //蜂鸣器
//数码管显示0~9,定义到代码段,和程序数据烧在FLASH中 code unsigned char DispBuf[10]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; void disp_selec(unsigned char bit_selec,unsigned char seg); /************************************************** ** 函数名称: dellay ** 入口参数:h(双字节型) ** 出口参数:无 ** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS ****************************************************/ void dellay(unsigned int h) { while(h--); //0.01MS }
/************主程序**************/ main() { unsigned char i="0"; //要显示的数 unsigned char temp_a,temp_b; //个位、十位数 while(1) {unsigned int temp; temp_b=i/10; temp_a=i%10; for(temp=0;temp<100;temp++) { disp_selec(0,temp_a); //显示个位数 dellay(100); disp_selec(1,temp_b); //显示十位数 dellay(100); } //显示数加1 i++; if(i>99) i="0"; } } /************************************************** ** 函数名称: disp_selec ** 入口参数:bit_selec,seg ** 出口参数:无 ** 功能描述: 选择相应数码管,进行显示 ****************************************************/ void disp_selec(unsigned char bit_selec,unsigned char seg) { if(bit_selec==0) //数码管位选0 { DIG0=0; DIG1=1; } if(bit_selec==1) //数码管位选1 { DIG0=1; DIG1=0; } P1=DispBuf[seg]; } 大家参考参考吧,学习靠实践,看别人的永远学不到真东西,但学习别人的经验可以加快自己的学习速度。
以前写的,请在这里打开链接: 相关链接:http://blog.**/ahai0306/
|