2021-05-24

数码管的动态显示原理及应用实现

1、多个数码管的段码连接在一起,位码分别控制。

2、由于段码连接在一起,如果数码管全亮,则显示的数据相同,所以为了显示不同的数字,任何时刻,只能有一个数码管显示,其余不显示。

3、我们用软件使这几个数码管轮流显示我们需要的数字。

4、只要更新频率足够快(>100Hz),我们肉眼看起来,这些数码管就同时显示我们需要的数字了。

 

变量进行循环

 

流水灯变化两下,数码管一下

定时器延时

动态显示

数码管动态显示数字 123

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选

// 毫秒级延时函数定义
void delay(uint z){ // 毫秒级延时函数定义
uint x, y;
for (x = z; x > 0; x--){
for (y = 114; y > 0; y--){

}
}
}

void main(){ // main函数自身会循环

while(1){
/*第一位显示 数字 1*/
    P0 = 0XFF; // 清除断码   如果没有为P0 初始化赋值 0XFF,那么 P0的值会是上一个打开段选锁存器过程中赋予的值,执行到这里 会把段选值赋给锁存器中P0,导致数码管显示错误。
WE = 1; // 打开位选锁存器
P0 = 0XFE;   // 1111 1110  选通第一位数码管
// P0 = 0X00;  // 0000 0000  表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1;  // 打开段选锁存器
P0 = 0X06;  // 0000 0110  显示“1”
DU = 0;   // 锁存段选数据
delay(5); // 对每次数码管的切换进行 5毫秒延时操作


/*第二位显示 数字 2*/
  P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XFD;   // 1111 1101  选通第二位数码管
// P0 = 0X00;  // 0000 0000  表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1;  // 打开段选锁存器
P0 = 0X5B;  // 0101 1011  显示“2”
DU = 0;   // 锁存段选数据
delay(5);


/*第三位显示 数字 3*/
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XFB;   // 1111 1011  选通第三位数码管
// P0 = 0X00;  // 0000 0000  表示选通所有位数码管
WE = 0; // 锁存位选数据

DU = 1;  // 打开段选锁存器
P0 = 0X4F;  // 0100 1111  显示“3”
DU = 0;   // 锁存段选数据
delay(5);

}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值