C51学习笔记 3.数码管

C51 3.数码管

前言

数码管就是八根LED

祝愉快

1.原理图

在这里插入图片描述

段选和位选

  • 数码管模块里面有8个“8.”,每一个数码管为一位,选择哪一个“8.”就是位选
  • 而一个“8.”里面有【a b c d e f g dp】8个段。我们通过段选来控制显示什么样的符号。

段选

  • 八个数码管的段选都是共用一组引脚P0。
  • 也就是说在一个时间点下,八个数码管只能显示一个相同的符号,当然我们可以通过人眼无法察觉的刷新来实现一次显示不同的符号。
  • 图中的74HC245作为驱动器,来提升负载能力。

位选

  • 数码管模块标号为LED1~8,为位选,它们连向一个38译码器。
  • 38译码器通过P22、P23、P24三位引脚来控制8路选择。
  • 38译码器的2进制端对应10进制端,如101对应5,数码管编号0~7。

2.C代码

模块代码

#include <REGX52.H>
#include "Delay.h"	//包含Delay头文件

//数码管段码表 0 1 2 3 4 5 6 7 8 9
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break; //111 数值为7 对应普中数码管最左
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//段码输出
	Delay(1);				//显示一段时间
	P0=0x00;				//段码清0,消影
}

  • 注意消影,当我们想数码管显示多位数字时,要用到快速的刷新,但是太快会导致乱码,这时我们要先Delay一下并且把数码管给清除,再显示下一个数字。
  • 为什么会有乱码?因为我们传输的数据是【位选 段选 位选 段选】,那么当顺序被错误解读为【段选 位选 段选 位选 】时就会产生乱码。

显示多位数码管

#include <REGX52.H>
#include "Delay.h"	//包含Delay头文件
#include "Nixie.h"	//包含数码管头文件

void main()
{
	while(1)
	{
		Nixie(1,1);	//在数码管的第1位置显示1
		Nixie(2,2);	//在数码管的第2位置显示2
		Nixie(3,3);	//在数码管的第3位置显示3
		Nixie(4,4);	//在数码管的第4位置显示4
		Nixie(5,5);	//在数码管的第5位置显示5
		Nixie(6,6);	//在数码管的第6位置显示6
	}
}

  • 用到快速刷新,函数要放在死循环里面。

总结

38译码器和数码管都是数电的老熟人了。
还有其他驱动方式的数码管,使用专用驱动芯片可以使用更少的引脚完成工作,不过这里就提及了。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值