八个小数码管滚动显示单个数字

电路图

段选:选择每个小数码管中的某几个二极管(a,b,c,d,e,f,g,dp)
位选:选择上图中大数码管中的某一个小数码管

这里数码管为共阳极,低电平有效(即P0.0~P0.7置0可实现段选)

具体段选的实现可参考文章:
https://blog.csdn.net/weixin_48524215/article/details/111398111

下图NPN型三极管导通条件:Uc>Ub>Ue

因为Uc=+5V、Ue=0V,所以q1(接引脚P2.0)为的输出电压应该为+5V<Ub<0V,即将P2.0置为高电平有效(引脚P2.0=1)

下图所有三极管的集电极接+5V,要使三极管导通,按照下图,需要将q1 ~ q8(分别接引脚P2.0 ~ P2.7置1)

完整程序

/*
 *数码管共阳极
 *P0.0~P0.7置0实现段选(segment)
 *P2.0~P2.7置1实现位选(position)
*/
#include<reg51.h>
#include<intrins.h>
unsigned char code seg[]={
    
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};//共阳极
unsigned char i;

void delay(int a)//延时函数,增大从一个状态到另一个状态之间的时间,避免因变化过快而超出人眼视觉停留的最佳时间
{
    
    
	while(a--);
}

void main()
{
    
    	
	while(1)
   {
    
     //位选,选择第1个数码管,在电路图中第一个小数码管在最左侧
   	 P2=0x01;//0000 0001,初始化状态,选择第一个数码管
	 for(i=1;i<=8;i++)	//段选,共8个小数码管
	 {
    
    
	 	P0=seg[i];	  //seg[0]显示数字0,以此类推
	 	delay(30000); //增大从一个状态到另一个状态之间的时间
	 	P2=_crol_(P2,1);//第一个小数码管显示完一个数字后,位选第二个数码管进行显示第二个数字
	 }
   }	
}	

效果图

猜你喜欢

转载自blog.csdn.net/weixin_48524215/article/details/111400811