蓝桥杯单片机 数码管控制原理

首先我们看这里的数码管外设,控制他的两个端口并没有提前接电源或者接地。之前的蜂鸣器和继电器两个外设他们的其中一个端口都提前与VCC相连我们对这两者都只能控制他们的一个端口。 而这里的数码管不同,它的两个端口并没有提前预设,因此我们利用其中一个端口来控制单个数码管的LED显示,用另一个端口来控制具体的哪一个数码管。而具体到这里我们在Y7C这个端口是1时LED灭,0时LED亮, Y6C这个端口是1时控制LED位置,0时LED位置失去控制。

具体为Y6C  0000 0001 时为控制第一个数码管,其他数码管不受控制。

Y7C  0000 0001 时为dp g f e d c b亮,a灭。

总之来说对于Y6C是值为1时起效果,对于Y7C是值为0时起效果。这里的意思就是LED数码管它的两个端口一个为0,一个为1,这时数码管便会成功起作用.

静态数码管一次只能有一个数码管亮

动态数码管就是多个数码管亮,但实际上就是由每一位的静态数码管组成,只不过前后亮起时他的延时非常低,使形成的视觉错觉会让人误以为多位数码管同时亮起。

具体数码管代码

#include <STC15F2K60S2.H>

code unsigned char Seg_Table[] = 
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A
0x83, //b
0xc6, //C
0xa1, //d
0x86, //E
0x8e //F
};

InitHC138(unsigned char n)
{
	switch(n)
	{
		case 4:
		  P2=0x1f|0x80;
		break;
		
		case 5:
		  P2=0x1f|0xa0;
		break;
		
		case 6:
		  P2=0x1f|0xc0;
		break;
		
		case 7:
		  P2=0x1f|0xe0;
		break;		
		
	}
}

Delay(unsigned int i)
{
	while(i--);
}

Seg_Show(unsigned char pos,unsigned char dat)
{
	InitHC138(6);
	P0=0x01<<pos;
	InitHC138(7);
	P0=Seg_Table[dat];
}

//Seg_Static()//静态数码管
//{
//	unsigned int i;
//	unsigned int j;
//	for(i=0;i<8;i++)
//	{
//		for(j=0;j<9;j++)
//		{
//			Seg_Show(i,j);
//			Delay(6000);
//		}
//	}
//}

Seg_Dynamic()//动态数码管
{
	Seg_Show(0,2);
	Delay(6);
	Seg_Show(1,0);
	Delay(6);
	Seg_Show(2,2);
	Delay(6);
	Seg_Show(3,4);
	Delay(6);	
}


void main()
{
	//Seg_Static();
	while(1)
	{
		//Seg_Dynamic();
		Seg_Dynamic();
	}
}


 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值