c51--数码管

数码管静态显示

第一步永远是分析电路图:
这个是38译码器,Y0-Y7分别对应下面的LED1-LED8叫做位选,即选择一个位置的灯亮(输出低电平)
在这里插入图片描述
下面那个245不用管,作用就是联通A与B,a-g是数码管的八个LED段,控制亮暗以显示对应数字。(高电平有效)
在这里插入图片描述
思路:P2-P4输入位选,P0,输入字符段选就行

#include <REGX52.H>

void main()
{
	P2_2 = 0;P2_3 = 0;P2_4 = 0;//选择第一个数码管
	P0 = 0x7D;//显示数字6,就是b为0,dp为0,其他都为1,P0_7-P0_0就是0111 1101,转换为十六进制就是7D
}

数码管动态显示

思路:利用人眼视觉看不出,在要显示的各个位置快速显示,就可以达到同时显示的结果,唯一注意的是消影。
这边先建立一个全局数组,把段选数字分别存进去,下标0显示0,1显示1,以此类推。

unsigned char NixieTable[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

然后写一个函数,参数就是位置和要显示的数字

void Nixie(unsigned char Location,unsigned char Num)
{
	P0 = 0x00;//消影
	switch(Location)//选择显示位置
	{
		case 1:P2_4=0;P2_3=0;P2_2=0;break;
		case 2:P2_4=0;P2_3=0;P2_2=1;break;
		case 3:P2_4=0;P2_3=1;P2_2=0;break;
		case 4:P2_4=0;P2_3=1;P2_2=1;break;
		case 5:P2_4=1;P2_3=0;P2_2=0;break;
		case 6:P2_4=1;P2_3=0;P2_2=1;break;
		case 7:P2_4=1;P2_3=1;P2_2=0;break;
		case 8:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0 = NixieTable[Num];//选择显示数字
	Delay(1);
}

解释一下消影:为什么会有影子,在位选-段选-位选-段选过程中中间的数据可能会相互影响,下一个段选还没读进来,时显示的就是上一个的数据。所以我们在每一个显示后面,加一个延时1ms,让他显示完全,否则会很暗,再调用下一次时P0 = 0x00会消除段选数据不会有影子。
最终代码:

#include <REGX52.H>
unsigned char NixieTable[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

void Delay(unsigned int xms)		//@11.0592MHz,改进的Delay函数,根据输入参数能时相应时间ms
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

void Nixie(
unsigned char Location,unsigned char Num)
{
	P0 = 0x00;//消影
	switch(Location)//选择显示位置
	{
		case 1:P2_4=0;P2_3=0;P2_2=0;break;
		case 2:P2_4=0;P2_3=0;P2_2=1;break;
		case 3:P2_4=0;P2_3=1;P2_2=0;break;
		case 4:P2_4=0;P2_3=1;P2_2=1;break;
		case 5:P2_4=1;P2_3=0;P2_2=0;break;
		case 6:P2_4=1;P2_3=0;P2_2=1;break;
		case 7:P2_4=1;P2_3=1;P2_2=0;break;
		case 8:P2_4=1;P2_3=1;P2_2=1;break;
	}
	P0 = NixieTable[Num];//选择显示数字
	Delay(1);
}

void main()
{
	while(1)
	{
		Nixie(1,1);
		Nixie(2,2);
		Nixie(3,3);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值