动态数码管(显示两位数字 以及左、右滚动显示)

什么是动态数码管?

所谓的动态数码管不过是利用人的视觉残留效果,在多位显示数字。
20ms内在另一位数码管上显示数字,视觉上就像是同时点亮了两个数码管。而间隔时间过短则会造成亮度变暗。一般情况下为几ms间隔时间

显示数字 16

  • 程序现象:选择两位来显示数字
  • 程序说明:1、573的D1~D8连接单片机的P0~P7。2、138的ABC引脚连接单片机P2.0,P2.1,P2.2;
#include "reg52.h"   

sbit HC_A=P2^0;
sbit HC_B=P2^1;
sbit HC_C=P2^2;

int smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值


void delay(unsigned int i)    // 10*i us
{
	while(i--);	
}

void Select(unsigned int Pos)  // 位选,即选通某一个数码管
{
	switch(Pos)	 
		{
			case(0):
				HC_A=0;HC_B=0;HC_C=0; break;
			case(1):
				HC_A=1;HC_B=0;HC_C=0; break;
			case(2):
				HC_A=0;HC_B=1;HC_C=0; break;
			case(3):
				HC_A=1;HC_B=1;HC_C=0; break;
			case(4):
				HC_A=0;HC_B=0;HC_C=1; break;
			case(5):
				HC_A=1;HC_B=0;HC_C=1; break;
			case(6):
				HC_A=0;HC_B=1;HC_C=1; break;
			case(7):
				HC_A=1;HC_B=1;HC_C=1; break;
		}
		
}

void show_two(int num,int pos_x,int pos_y)  // 选择显示两位数字的数码管位置
{		
		Select(pos_x);
		P0=smgduan[num/10];
		delay(100); 
		P0=0x00;
	
		Select(pos_y);
		P0=smgduan[num%10];
		delay(100); 
		P0=0x00;
}

void main()
{
  while(1)
  {
    show_two(16,6,7);
  }

}

实验结果

左右滚动显示数字

  • 程序现象:左移显示0到F,再右移显示F到0

#include "reg52.h"

sbit HC_A=P2^0;
sbit HC_B=P2^1;
sbit HC_C=P2^2;

int smgduan[33]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                    0x00,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,
                    0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示0~F的值,前面8个0,后面8个0


void delay(unsigned int i)    // 10*i us
{
	while(i--);	
}

void main()
{
    int j=0,i=0;

    for(j=0;j<33;j++)          //   左移,显示0~~F
    {
        for(i=0;i<50;i++)
        {
            HC_A=0;HC_B=0;HC_C=0;
            P0=smgduan[j];  delay(100);P0=0x00;
            HC_A=1;HC_B=0;HC_C=0;
            P0=smgduan[j+1];delay(100);P0=0x00;        
            HC_A=0;HC_B=1;HC_C=0;
            P0=smgduan[j+2];delay(100);P0=0x00;
            HC_A=1;HC_B=1;HC_C=0;
            P0=smgduan[j+3];delay(100);P0=0x00;
            HC_A=0;HC_B=0;HC_C=1;
            P0=smgduan[j+4];delay(100);P0=0x00;
            HC_A=1;HC_B=0;HC_C=1;
            P0=smgduan[j+5];delay(100);P0=0x00;
            HC_A=0;HC_B=1;HC_C=1;
            P0=smgduan[j+6];delay(100);P0=0x00;
            HC_A=1;HC_B=1;HC_C=1;
            P0=smgduan[j+7];delay(100);P0=0x00;
        }
    }
    for(j=33;j>7;j--)   //   右移,显示F~~0
    {
        for(i=0;i<50;i++)
        {
            HC_A=1;HC_B=1;HC_C=1;
            P0=smgduan[j-1];delay(100);P0=0x00;
            HC_A=0;HC_B=1;HC_C=1;
            P0=smgduan[j-1];delay(100);P0=0x00;      
            HC_A=1;HC_B=0;HC_C=1;
            P0=smgduan[j-2];delay(100);P0=0x00;
            HC_A=0;HC_B=0;HC_C=1;
            P0=smgduan[j-3];delay(100);P0=0x00;
            HC_A=1;HC_B=1;HC_C=0;
            P0=smgduan[j-4];delay(100);P0=0x00;
            HC_A=0;HC_B=1;HC_C=0;
            P0=smgduan[j-5];delay(100);P0=0x00;
            HC_A=1;HC_B=0;HC_C=0;
            P0=smgduan[j-6];delay(100);P0=0x00;
            HC_A=0;HC_B=0;HC_C=0;
            P0=smgduan[j-7];delay(100);P0=0x00;
        }
    }
    while(1);

}


  • 16
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值