Proteus8+Keil5仿真 用AT89C51实现共阴极四位数码管显示数字0-9999

最开始本来是想着让 i 循环 10000 次,然后通过
dp[i % 10]
dp[i / 10 % 10]
dp[i / 100 % 10]
dp[i / 1000 % 10]
来取到每位数码管上的要展示的数字,但是写完代码发现数码管上的数字变化的特变快,然后就想着在最后加一个delay(500)进行延迟但结果是四位数字一起闪烁(就像快速的眨眼睛)。消影的延迟又不能动于是就想到了让i扩大同时扩大取每位数的方式使得循环总次数增加,经过不断调试找到了比较好的实现方式

代码如下:

#include <reg51.h>
#include <intrins.h> 

#define uint unsigned int
#define uchar unsigned char

//定义0-9的16进制
uchar code dp[10] = {
  0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};

// 延迟函数
void delay(uchar ms) {
   uchar i, j;
    for (i = 0; i < ms; ++i) {
        for (j = 0; j < 120; ++j);
    }
}


void main() {
	uint i = 0;
	while(1){
			  P1 = 0xfe;
				P2 = dp[i / 20 % 10];
				delay(5);
				P1= 0xff;
			
			  P1 = 0xfd;
				P2 = dp[(i / 200) % 10];
				delay(5);
				P1= 0xff;
			
			  P1 = 0xfb;
				P2 = dp[(i / 2000) % 10];
				delay(5);
				P1= 0xff;
			
			  P1 = 0xf7;
				P2 = dp[(i / 20000) % 10];
				delay(5);
				P1= 0xff;
		
		delay(100);
			if(i <=  200000) i++;
	}
}

仿真电路图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值