蓝桥杯基础模块3_1:数码管静态显示

一、模块题目

蓝桥杯基础模块3_1:数码管静态显示_第1张图片

二、原理简述

1、数码管
CT107D单片机综合实训平台上使用的数码管是F3461BH(倒数第二个字母是A则共阴,是B则共阳)。
蓝桥杯基础模块3_1:数码管静态显示_第2张图片
F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是通过74HC573锁存器与单片机的P0端口相连的。
蓝桥杯基础模块3_1:数码管静态显示_第3张图片
2、74HC138译码器和74HC573锁存器(参看模块一,不作赘述)
蓝桥杯基础模块3_1:数码管静态显示_第4张图片

三、源码

//头文件
#include "reg52.h"
//F3461BH数码管的段码数组,可以背上
unsigned char code SMG_duanma[18]=
		{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
     0xbf,0x7f};
//延时函数
void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}
//HC138输出引脚选择(解读见模块二)
void InitHC138(unsigned char n)
{
	switch(n)
	{
		case 4:
			P2 = (P2 & 0x1f) | 0x80;
		break;
		case 5:
			P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:
			P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:
			P2 = (P2 & 0x1f) | 0xe0;
		break;
	}
}
//数码管程序(本模块主要的编写程序)
void ShowSMG_Bit(unsigned char dat, unsigned pos)
{
	InitHC138(6);			//数码管的位置
	P0 = 0x01 << pos;
	InitHC138(7);			//数码管的内容
	P0 = dat;
}

void SMG_Static()
{
	unsigned char i,j;
	for(i = 0; i < 8; i++)
	{
		for(j = 0; j < 10; j++)
		{
			ShowSMG_Bit(SMG_duanma[j],i);
			Delay(60000);
		}
	}						//每个数码管逐次显示,分别显示0到9
	for(j = 0; j < 16; j++)
	{
		InitHC138(6);			//数码管的位置
		P0 = 0xff;			//选择所有的数码管
		InitHC138(7);			//数码管的内容
		P0 = SMG_duanma[j];	//数码管逐次显示0到F
		Delay(60000);
		Delay(60000);
	}
}
//主函数框架
void main()
{
	while(1)
	{
		SMG_Static();
	}
}

四、开发板烧录结果

蜂鸣器响,继电器亮,
8个数码管从左到右开始显示,每个数码管都逐次显示0~9这10个数字;
然后,所有数码管一起显示0~F这16个符号。
如此循环。

你可能感兴趣的:(单片机)