6:动态数码管

1、什么是动态数码管

(1)数码管还是原来的数码管(共阳极或共阴极均可)记住:数码管有2端:COM端(共极)和段码端(IO口)
(2)段码一侧还是接一个单片机端口
(3) COM(共极)接单片机一个IO口(J16),多个联排数码管的COM共同接一个IO端口
分析对比静态和动态数码管,发现本质区别是:静态数码管中只要给了段码数码管就一定工作i(显示只取决于段码端),动态数码管中段码端给了段码值后还需要coM端配合才能点亮数码管。

在这里插入图片描述

2、动态数码是如何工作

(1)在某一特定时间段中,联排数码管中只有一个数码管在工作,其他均在休息(不工作)
(2)COM端选择哪个数码管工作,段码端输出这个数码管要显式的数字的段码;延时COM端选择下一个数码管工作,同时段码端改输出这个数码管要显示的数字的段码;延时:COM端选择下一个数码管工作·…
(3)快速切换工作的数码管,则人看到的是所有的数码管都在亮(其实亮度是比静态驱动低的)。
(4)动态数码管利用了人眼的视觉暂留。

3、动态数码管显示编程实战1

本节目标:先实验得出数码管的段码表
(1)接线确定:段码端接P0,COM端接P1端口
(2)COM端选择一个数码管亮:P1.0-P1.7随便选1个输出0(因为是共阴极),其余输出1
(3)段码端给不同的值来测试得到段码表

#include <REGX51.H>

void main(void)
{
	P0 = 0x6d;//0110 1101
	
	P1 = 0xbf;//1011 1111
}

在这里插入图片描述

由测试得出:
P0端口代码段和静态数码管一样。
x   x   x  x     x  x  x  x
dp  g  f  e     d  c  b  a
在这里插入图片描述

P1端口:1011 1111得出
P1.0对于的从左到右第一个LED灯。

4、动态数码管显示编程实战2

目标:8个联排数码管依次显示12345678
(1)编程思路:先选中第1数码管,然后段码端送1的段码,然后延时一会儿;然后切换选中第2数码管,然后段码端送2的段码,然后延时一会儿;·……直到第8个数码管显示完为一个周期。

#include <REGX51.H>

//定义延迟函数
void relay (void)
{
	unsigned char k = 200;
	unsigned char h = 200;
	while(k--)
	{
		while(h--)
			;
	}
}

void main(void)
{
	unsigned char i[8] = {0x06,0x5b,0x4f,0x66,
	0x6d,0x7d,0x07,0x7f};//依次显示1到8
	
	unsigned char j[8] = {0xfe,0xfd,0xfb,0xf7,
	0xef,0xdf,0xbf,0x7f};//从左到由LED依次亮
	
	unsigned char n;
		while(1)
	{
		for(n=0; n<=7; n++)
		{
				P1 = j[n];//从左到由LED依次亮
				P0 = i[n];//依次显示1到8
				relay();
		}
	}
	
}

实验结论:
1、延时时间太长,数字会闪动。(延迟200改为2)
2、把时间改短后发现有2个问题:
第一个是亮的不够亮,第二个是暗的不够暗,
解决方案就是在每个数码管亮完要切换下一个数码管时消隐(P0 = 0x00)。

#include <REGX51.H>

//定义延迟函数
void relay (void)
{
	unsigned char k = 2;
	unsigned char h = 2;
	while(k--)
	{
		while(h--)
			;
	}
}

void main(void)
{
	unsigned char i[8] = {0x06,0x5b,0x4f,0x66,
	0x6d,0x7d,0x07,0x7f};//依次显示1到8
	
	unsigned char j[8] = {0xfe,0xfd,0xfb,0xf7,
	0xef,0xdf,0xbf,0x7f};//从左到由LED依次亮
	
	unsigned char n;
		while(1)
	{
		for(n=0; n<=7; n++)
		{
				P1 = j[n];//从左到由LED依次亮
				P0 = i[n];//依次显示1到8
				relay();
				P0 = 0x00;//消影
		}
	}
	
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值