最新消息:

【Arduino编程】第二十四讲:4位数码管实验

Arduino 少儿编程 4939浏览 0评论
Arduino教程一

产品介绍

四位数码管是由四个共阴数码管组合而成,四位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。

【Arduino编程】第二十四讲:4位数码管实验

实验器件

 ■ 4位数码管:1 个

 ■ 多彩面包板实验跳绳:若干

实验连线

>【Arduino编程】第二十四讲:4位数码管实验

程序代码

 //静态程序(静态显示1234)

int ledCount=8;

int segCount=4;

long previousMillis = 0;

const unsigned char

dofly_DuanMa[10]={0x3f,0×06,0x5b,0x4f,0×66,0x6d,0x7d,0×07,0x7f,0x6f};

int ledPins[] = {

12,8,5, 3, 2, 11, 6, 4, };

int segPins[]={13,10,9,7};

unsigned char displayTemp[4];//显示缓冲区

void setup() {

// 循环设置,把对应的端口都设置成输出

for (int thisLed = 0; thisLed < ledCount; thisLed++) {

pinMode(ledPins[thisLed], OUTPUT); }

for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {

pinMode(segPins[thisSeg], OUTPUT);

}

}

void deal(unsigned char value){

for(int i=0;i<8;i++)

digitalWrite(ledPins[i],bitRead(value,i));//使用了bitWrite 函数,非常简单

// !bitRead(value,i)

}

void loop() {

static unsigned int num;//定义一个数据

static unsigned long lastTime=0;

if (millis() – lastTime >= 1000) {

lastTime = millis();

//serialOutput();

num++;

}

displayTemp[0]=dofly_DuanMa[1]; //静态显示

displayTemp[1]=dofly_DuanMa[2];

displayTemp[2]=dofly_DuanMa[3];

displayTemp[3]=dofly_DuanMa[4];

static int i;

unsigned long currentMillis = millis();

if(currentMillis – previousMillis > 0) {

previousMillis = currentMillis;

deal(0);// 清除“鬼影”

for(int a=0;a<4;a++)

digitalWrite(segPins[a],1);//

digitalWrite(segPins[i],0);//

deal(displayTemp[i]);//读取对应的段码值

i++;

if(i==4) //4 位结束后重新循环

i=0;

}

}

//动态程序

int ledCount=8;

int segCount=4;

long previousMillis = 0;

const unsigned char

dofly_DuanMa[10]={0x3f,0×06,0x5b,0x4f,0×66,0x6d,0x7d,0×07,0x7f,0x6f};

int ledPins[] = {12,8,5, 3, 2, 11, 6, 4, };

int segPins[] = {13,10,9,7};

unsigned char displayTemp[4];

void setup() {

// 循环设置,把对应的端口都设置成输出

for (int thisLed = 0; thisLed < ledCount; thisLed++) {

pinMode(ledPins[thisLed], OUTPUT); }

for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {

pinMode(segPins[thisSeg], OUTPUT);

}

}

void deal(unsigned char value){

for(int i=0;i<8;i++)

digitalWrite(ledPins[i],bitRead(value,i));

}

void loop() {

static unsigned int num;//定义一个数据

static unsigned long lastTime=0;

if (millis() – lastTime >= 1000) {

lastTime = millis();

//serialOutput();

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];

static int i;

unsigned long currentMillis = millis();

if(currentMillis – previousMillis > 0) {

previousMillis = currentMillis;

deal(0);

for(int a=0;a<4;a++)

digitalWrite(segPins[a],1);

digitalWrite(segPins[i],0);//

deal(displayTemp[i]);//读取对应的段码值

i++;

if(i==4) //4 位结束后重新循环

i=0;

}

    }

【Arduino编程】第二十四讲:4位数码管实验

米思齐代码

【Arduino编程】第二十四讲:4位数码管实验【Arduino编程】第二十四讲:4位数码管实验

【Arduino编程】第二十四讲:4位数码管实验

【Arduino编程】第二十四讲:4位数码管实验

实验结论: 

上电后四位数码管静态显示1234.

上电显示0000,然后每次加1,最后加到9999后回到0000。

转自公众号:
29号造物吧

您必须 登录 才能发表评论!