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

电路图

八个小数码管滚动显示单个数字_第1张图片

段选:选择每个小数码管中的某几个二极管(a,b,c,d,e,f,g,dp)
位选:选择上图中大数码管中的某一个小数码管
八个小数码管滚动显示单个数字_第2张图片

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

具体段选的实现可参考文章:
https://blog.csdn.net/weixin_48524215/article/details/111398111
八个小数码管滚动显示单个数字_第3张图片
下图NPN型三极管导通条件:Uc>Ub>Ue

因为Uc=+5V、Ue=0V,所以q1(接引脚P2.0)为的输出电压应该为+5V
八个小数码管滚动显示单个数字_第4张图片

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

八个小数码管滚动显示单个数字_第5张图片

完整程序

/*
 *数码管共阳极
 *P0.0~P0.7置0实现段选(segment)
 *P2.0~P2.7置1实现位选(position)
*/
#include
#include
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);//第一个小数码管显示完一个数字后,位选第二个数码管进行显示第二个数字
	 }
   }	
}	

效果图

八个小数码管滚动显示单个数字_第6张图片

你可能感兴趣的:(默认分类,单片机)