四位数码管动态显示-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10218|回复: 2

四位数码管动态显示

[复制链接]
发表于 2018-9-19 16:09 | 显示全部楼层 |阅读模式
代码如下;从9990到9999,然后再从9898开始
代码撸起;


const unsigned char dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


int ledPins[] = {2,3,4,5,6,7,8,9};
int segPins[]={10,11,12,13};
unsigned char displayTemp[4];//显示缓冲区
void setup() {
// 循环设置,把对应的端口都设置成输出
for (int thisLed = 0; thisLed <8; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT); }
for (int thisSeg = 0; thisSeg < 4; thisSeg++) {
pinMode(segPins[thisSeg], OUTPUT);
}
}
void play( char value){//单个数码管显示函数
for(int i=0;i<8;i++)
digitalWrite(ledPins[i],bitRead(value,i));//使用了bitWrite 函数,非常简单

}
void loop() {
static unsigned int num=9990;//定义一个数据
static unsigned long lastTime=0;
if (millis() - lastTime >= 1000) {
lastTime = millis();

num++;
}
displayTemp[0]=dofly_DuanMa[num/1000]; //动态显示千位显示

displayTemp[1]=dofly_DuanMa[(num%1000)/100];//百位数
displayTemp[2]=dofly_DuanMa[((num%1000)%100)/10];//十位数
displayTemp[3]=dofly_DuanMa[((num%1000)%100)%10];//个位数
//delay(3000);
if(num==9999)
num=9898;
static
int i;//静态变量I,要显示的位数

play(0);// 清除“鬼影”
for(int a=0;a<4;a++)
digitalWrite(segPins[a],1);//位选信号全部关闭
digitalWrite(segPins[i],0);//打开当前位选信号位
//delay(1);
play(displayTemp[i]);//读取对应的段码值
i++;
if(i==4) //4 位结束后重新循环i=?表示有几个数码管点亮
i=0;
}

微信截图_20180919160426.png
发表于 2019-3-18 23:11 来自手机 | 显示全部楼层
哇塞!厉害
发表于 2019-3-20 11:34 | 显示全部楼层
不是一般的厉害啊, 我要加油学习了 。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 05:48 , Processed in 0.106861 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表