【51单片机】动态数码管

上一节讲了静态数码管,静态数码管通过MCU上的8个引脚直接输出到一个数码管,输出的值可以直接显示在数码管上,但是如果我们有8个数码管呢?就需要8*8=64个MCU引脚,但是我们的51单片机的一共只有4个8位输出引脚,而且其他引脚还需要输出其他的内容,所以明显不够用,动态数码管就应运而生。
在这里插入图片描述

动态数码管的原理是通过MCU上的8个引脚链接8个数码管的段引脚(如上图),也就是MCU输出的内容8个数码管都能收到,而且是一模一样。这样不就只能显示一样的内容了吗? 所以我们还需要位选引脚,确定哪个数码管生效,8个数码管只需要3个bit就可以表示了,也就是需要3个单片机的引脚。这样静态数码管需要64个引脚才能操作的数码管,使用动态数码管只需要11个就可以了。

由于动态数码管是挨个显示的,因此每个数码管都是显示一段时间然后熄灭,然后利用人的视觉残留,只要熄灭的时间够短,就会看起来是一直亮的,实际是一直闪烁的,现在的液晶显示器的原理基本都是如此,实际上都是闪烁的,这个闪烁虽然肉眼看不出来,但是对眼镜是有一定伤害的,所以现在显示器厂商在不断想办法解决这个问题,这就是护眼显示器了。

下面我们来 代码的实现吧

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;

#define TUBE P0
#define T1  100
sbit S1=P2^2;
sbit S2=P2^3;
sbit S3=P2^4;

u8 code digit_table[]={
   
   //数码管显示对象数字的表
0x3f/*0*/, 0x06/*1*/, 0x5b/*2*/, 0x4f/*3*/,
0x66/*4*/, 0x6d/*5*/, 0x7d/*6*/, 0x07/*7*/,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值