51单片机数码管动态显示

数码管动态显示是我们做单片机项目中经常用到的一种显示方式,下面我根据我个人对数码管动态显示的理解给大家做分享。

 一、电路原理图

图中数码管采用共阴极数码管,这里因为弥补单片机的IO口驱动能力的不足,电路中采用74LS04是作为驱动器使用,用于提高单片机的驱动能力。原理为当1A~6A接收到IO口的高电平时,1Y~6Y对应会输出低电平,从而驱动对应的数码管使能。

二、相关知识

1、数码管动态显示工作原理

数码管动态显示的原理主要基于两个视觉现象:视觉暂留和余晖效应视觉暂留是指人眼在观察景物时,光信号传入大脑神经需要一段时间,光的作用结束后,视觉影像并不立即消失,这种残留的视觉称为“后像”,视觉的这一现象则被称为“视觉暂留”。余晖效应是指当停止向发光二极管供电时,发光二极管亮度仍能维持一段时间。

动态显示方式是指无论在任何时刻只有一个LED数码管处于显示状态,即单片机采用“扫描”方式控制各个数码管轮流显示。在动态显示驱动中,所有数码管的8个显示笔划的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

简而言之数码管动态显示的工作原理就是,快速地在每个数码管上显示不同地数,由于扫描速度快看起来就是同时显示不同地数值。

由此我们可以借用流水灯程序和数码管静态显示程序修改得到动态显示程序。

2、流水灯程序

j=0x01;
for(i=0;i<8;i++)    //for循环8次
{
	P1=~j;              //P1等于j位取反
	j=j<<1;             //j左移1位
	delay_ms(1000);     //等待1秒
}

3、静态显示程序

P0=table_K[i];

三、例程

#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char

uchar table_K[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴段码表
uchar display_num[]={0,1,2,3,4,5};//显示缓存区

/*--------微秒延时--------*/
void delay_us(uint z)
{
	uint x;
	for(x=z;x>0;x--);
}
/*--------毫秒延时--------*/
void delay_ms(uint z)
{
  uint x,y;
	for(x=z;x>0;x--)
	   for(y=110;y>0;y--); 
}

/*----------主函数-----------*/
void main()
{
	uchar i,j;           //创建变量
	P0=0x00;P1=0xff;P2=0x00;P3=0x00;  //端口状态初始化
	while(1)
	{
		j=0x01;            //设定j地的初始值
	  for(i=0;i<6;i++)   //循环6次
	 {
		 P0=table_K[display_num[i]];//P0口送段码
	     P2=j;            //把j的值给P2口
		 j=j<<1;          //j左移1位
		 delay_ms(2);     //延时2ms
	 }
  }
  }

四、视频讲解

项目4、数码管动态显示

B站链接:https://www.bilibili.com/video/BV18J4m1s7Kz/?vd_source=963ae9aae236be73cd4b5b480953fe48

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值