蓝桥杯单片机之学习模块篇一(动态数码管)

动态数码管模块
蓝桥杯单片机之学习模块篇一(动态数码管)

共有八个数码管,八个数码管采用2个74HC573锁存器对单片机P0口的输出信号进行锁存,并增强信号驱动能力进而驱动8个数码管,其中U7的锁存输入Y7C是段选,U8的锁存输入Y6C是位选。
每个数码管共有8个字段:dp g f e d c b a, 控制数码管的显示实际上就是控制数码管字段的高低电平显示,通过控制字段的发光来表示字符。这是共阴极数码管,比如:要使数码管显示为0,则数码管段表示为:1100 0000 ,十六进制为0xc0,要表示其他数字亦然。
因为这是用两个锁存器来控制的,在段选之前,我们要先通过U8锁存器进行位选,也就是选择对应的几号数码管亮起,当然,如果需要全部亮起,只需要把延时时间变短即可(只是肉眼看不出来的频率)。
比赛常用数码管代码模板
1)扫描动态数码管

uchar code duan[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
										0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
										0xff, 0xbf};		//16 17
uchar Table[8];
//数码管扫描
void Smg_Scan(void)
{
		static uchar index = 0;
		P2 = P2&0x1f|0xe0;
		P0 = 0xff;
		P2 = P2&0x1f;
	
		P2 = P2&0x1f|0xc0;//打开Y6
		P0 = 1<<index;//位选
		P2 = P2&0x1f;
	
		P2 = P2&0x1f|0xe0;//打开Y7
		P0 = ~duan[Table[index]];//显示段码
		P2 = P2&0x1f;	
		index++;
		index &= 0x07;
}

2)显示数码管

void Smg_show()
{
    if(mode == 0)
    {
    	//模式0的操作
	}
	else if(mode == 1)
	{
		//模式1的操作
	}
	//以此类推
}

3)显示LED

//LED显示
void LED_work(u8 dat)
{
	P2 = (P2 & 0x1f) | 0x80;
	P0 = dat;
	P2 = P2 & 0x1f;
}
上一篇:凸包算法详解


下一篇:蓝桥杯单片机综合练习7