蓝桥杯之单片机学习(三)——共阳数码管的静态显示

一、训练任务

在CT107D单片机综合训练平台上,8个数码管分别依次显示0-9的值,然后所有数码管一起同时显示0-F的值,如此往复

二、训练重点

  1. 弄清楚数码管的段码与显示数值之间关系。
  2. 供养数码管的基本控制方法,特别是弄清楚COM端与显示码的关系

三、训练准备

3.1 原理图展示

在这里插入图片描述

3.2 数字对照表

在这里插入图片描述

3.3 数码管分路

在这里插入图片描述
在这里插入图片描述

3.4 一些解释

位码:8个大的数码管(com)
段码:一个数码一个个小段(a-h)
com输入:高电平
段码输入:低电平
即可闪亮
Y6控制位码
Y7控制段码
消影与重影
重影:IO口从高电平到低电平,有一定的残留的电流在里面。

在数码管动态显示实验中,每次送完段选数据后,在送入位选数据之前,需要一句
“P0 = 0xff” ,这条语句的专业名称叫做“消影”
解释如下:
在刚送完段选数据后,P0口仍然保持着上次的段选数据,若不加“P0 = 0xff”这句话,再执行接下来的打开位锁存器命令后,原来保持在P0口的段选数据将立即通过位选锁存器直接加在数码管上,接下来才是再次通过P0口给位选锁存器送入位选数据,虽然这个过程非常短暂,但是在数码管高速显示状态下,我们仍然可以看到数码管出现显示混乱的现象,加上消影之后,在开启位锁存器后,P0口数据全为高电平,所以哪个数码管都不会亮,因此这个消影的动作是很重要的

四、代码实现

#include <reg52.h>

typedef unsigned int uint;
typedef unsigned char uchar;

uchar code SMG_duanma[18] = 
	{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
	 0x88,0x80,0xc6,0xc0,0x86,0x8e,
	 0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”

	 
//配置HC138
void InitHC138(uchar 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 Delay(unsigned int n)
{
	while(n--);
	while(n--);
}

void ShowSMG_Bit(unsigned pos, uchar dat)
{
	
	InitHC138(6);  //数码管的位置
	P0 = 0x01 << pos;
	
	InitHC138(7);  //数码管的内容
	//Delay(100000000);
	//Delay(80000);
	P0 = SMG_duanma[dat];
	Delay(6000);
	Delay(6000);
	//P0 = 0xff;// 消影
	
}

void SMG_Static()
{
	uchar i,j;
	for(i = 0; i < 8; i++)
	{
		for(j = 0; j < 10; j++)
		{
			ShowSMG_Bit(i,j);
		}
		//Delay(600000);
		//Delay(600000);
	}
}

void Initsys()
{
	InitHC138(5);
	P0 = 0X00;
	InitHC138(4);
	P0 = 0XFF;
}

void main()
{
	while(1)
	{
		Initsys();
	  SMG_Static();
	}
}

注意事项!!!

延时必须unsigned int

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值