多为数码管的动态显示

这里以四位共阴极数码管为例

原理:

四位共阴极数码管就是把四个一位共阴数码管的阳极并联,阴极作为开关控制哪一个数码管亮灭。

想要让他们全部亮起来就需要用到一个原理:余晖效应(视觉暂留效应)

简单来说就是让四个数码管依次亮起,只要他闪的够快,在我们人眼看来他就是一起亮的。

这里还需要注意一点,如果第一个数码管在亮完后没有复位,继续显示第二个数码管,那么就会导致第一个数码管有残影,出现乱码的感觉

原理图如下:

代码实现
//数码管动态显示关键在于延时和消影
//采用低延时可以利用视觉暂留效应做到多位数码管显示
//同时低延时会导致数码管显示窜位
//所以需要在显示完数字之后将其归零,避免重影、窜位


#include <REGX52.H>
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char


//利用数组Arraynum[]存放0~9
uchar Arraynum[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};


//延时函数
void delay(uint t)
{
	uint x,y;
	for(x=0;x<t;x++)
	{
		for(y=110;y>0;y--);
	}
}




//封装Nixie
//函数参数一:第一到四个数码管(1-4)
//函数参数二:显示数字0-9
//将译码器数码管位控制使用switch函数进行简化,同时加上Number参数
//利用Arraynum[]显示数字0~9
//注意:有使用编码器才需要该函数,单片机直连不需要
void Nixie(uchar Location,Number)
{
	switch(Location)//利用switch循环标号选择数码管位数
	{
        //P3口负责控制位选
		case 1:P3_3=1;P3_2=1;P3_1=1;P3_0=0;break;
		case 2:P3_3=1;P3_2=1;P3_1=0;P3_0=1;break;
		case 3:P3_3=1;P3_2=0;P3_1=1;P3_0=1;break;
		case 4:P3_3=0;P3_2=1;P3_1=1;P3_0=1;break;
		default:break;
	}
    //P2口控制段码,显示0-9
	P2=Arraynum[Number];
	delay(1);//延时
	P2=0x00;//消影,将数码管清零,避免串位
}



void main()
{
	while(1)
	{
		
		while(1)
		{
            //调用函数显示
			Nixie(1,6);
			Nixie(2,6);
			Nixie(3,6);
			Nixie(4,7);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值