资讯详情

小白学习51单片机(第一天) 关于数码管

·选择公共端给电平 位选端逐一点亮

·选择共阳共阴(箭头对阴极,一般51为共阴)

·在同个时刻 只能点亮一个数码管 即使有多个被点亮,也只能是同一个数字。如果要显示多个不同的数字,则需要动态显示数字管 根据人眼跳动时间

·1.公共端: 三位输入 八位输出 节省单片机L口

GN是使能端 表示能正常工作

CBA从高到低 从二进制到十进制转换为输出

C

B

A

Y

0

0

0

Y0-(01111111)

1

0

0

Y4-(11110111)

0

1

1

Y3-(11101111)

此时注意译码器输出低电平

2.位选端:用于提高驱动能力 P根据芯片的电源,口变成了控制信号而不是驱动器

LE是高电平 将左侧数据发送到右侧 否则,读取右边的数据

高电平驱动能力弱 低电平能力更强

·滤波电容 104=10 0000pf稳定电源 确保电路稳定

·限流电阻

总结:首先确定数字管灯的第一位Y0-,然后通过译码器确定输入CBA电平,然后选择位选端呈现数字(数据高到端口高 由于数码管位选端g是高位 故对P0_7)

优化程序可以通过数组或选择循环来实现方便的控制

·位选 段选 位选 段选 位选 段选(串位)-位选 段选 清零 位选 段选 位选 段选

优化程序 需要延迟 否则数码管会比较暗

·数字管驱动方式:直接扫描单片机(成本)CPU时间) 专用驱动芯片(TM1640)

#include <REGX52.H>  unsigned char NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};  void Delay(unsigned int xms)  //@12.000MHz {  unsigned char i, j;  while(xms--)  {  i = 2;  j = 239;  do  {   while (--j);  }while (--i);
	}
}

void Nixie(unsigned char Location,Number)//位置 显示的数字
{
	switch(Location)
	{
		case 1:P2_4=1,P2_3=1,P2_2=1;break;
		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];//调用子程序,如果数字是0,刚好是第0个变量
	Delay(1);//延迟1ms再清零,否则数码管会变暗
	P0=0x00;//进行清零
}

void main()
{
	while(1)
	{
		Nixie(1,1);
//		Delay(20);
		Nixie(2,2);
//		Delay(20);
		Nixie(3,3);//不断扫描 是个循环过程
//		Delay(20);延时200ms的时候会快速闪动,延迟20ms的时候慢速闪动导致会串位现象很明显,因此需要进行消影
	}
}

标签: le154电容

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台