[英]7 segments display with arduino mega2560
我正在做一個小型項目,其中有6個顯示7段(我將稱為A1,A2,A3,A4,A5,A6)和3個cd4543B(我將稱為Da,Db,Dc)以及arduino mega2560。我還使用了3個晶體管
Da用於A1,A2
Db用於A3,A4
直流電用於A5,A6
電路已完成,並且如果我僅使用4個顯示器,則可以工作,我嘗試了不同的組合(A1,A2,A3,A4或A1,A2,A5,A6或A2,A3,A4,A5或A3,A4,A5 ,A6),並且一切正常。
但是,如果我想使用五到六個顯示器,則無濟於事。
我不明白為什么它不起作用,我使用的是與4顯示器相同的方法。
arduino mega2560有特異性嗎?
我的代碼顯示5:
//Da
const int bit_A=8;
const int bit_B=9;
const int bit_C=10;
const int bit_D=11;
//Db
const int bit_E=22;
const int bit_F=24;
const int bit_G=26;
const int bit_H=28;
//Dc
const int bit_I=40;
const int bit_J=42;
const int bit_K=44;
const int bit_L=46;
// transistors
const int alim_dizainemillier= 3;
const int alim_millier=4;
const int alim_centaine=5;
const int alim_dizaine=6;
const int alim_unite=7;
void setup()
{
pinMode(bit_A,OUTPUT);
pinMode(bit_B,OUTPUT);
pinMode(bit_C,OUTPUT);
pinMode(bit_D,OUTPUT);
pinMode(bit_E,OUTPUT);
pinMode(bit_F,OUTPUT);
pinMode(bit_G,OUTPUT);
pinMode(bit_H,OUTPUT);
pinMode(bit_I,OUTPUT);
pinMode(bit_J,OUTPUT);
pinMode(bit_K,OUTPUT);
pinMode(bit_L,OUTPUT);
pinMode(alim_dizainemillier,OUTPUT);
pinMode(alim_millier,OUTPUT);
pinMode(alim_centaine,OUTPUT);
pinMode(alim_dizaine,OUTPUT);
pinMode(alim_unite,OUTPUT);
digitalWrite(bit_A,LOW);
digitalWrite(bit_B,LOW);
digitalWrite(bit_C,LOW);
digitalWrite(bit_D,LOW);
digitalWrite(bit_E,LOW);
digitalWrite(bit_F,LOW);
digitalWrite(bit_G,LOW);
digitalWrite(bit_H,LOW);
digitalWrite(bit_I,LOW);
digitalWrite(bit_J,LOW);
digitalWrite(bit_K,LOW);
digitalWrite(bit_L,LOW);
digitalWrite(alim_dizainemillier,LOW);
digitalWrite(alim_millier,LOW);
digitalWrite(alim_centaine,LOW);
digitalWrite(alim_dizaine,LOW);
digitalWrite(alim_unite,LOW);
}
void loop()
{
for(int i=0;i<10000;i++)
{
afficher_nombre(i);
}
}
void afficher_nombre(int nombre)
{
long temps;
int unite=0,dizaine=0,centaine=0, millier=0, dizainemillier=0;
dizainemillier=nombre/10000;
millier=(nombre-(10000*dizainemillier))/1000;
centaine=(nombre-1000*millier)-(10000+dizainemillier)/100;
dizaine=(nombre-(centaine*100)-(millier*1000)-(dizainemillier*10000))/10;
unite=nombre-(dizainemillier*10000)-(millier*1000)-(centaine*100)-(dizaine*10);
temps=millis();
while((millis()-temps)<500){
digitalWrite(alim_dizainemillier,HIGH);
afficher_CD(dizainemillier);
digitalWrite(alim_millier,LOW);
digitalWrite(alim_centaine,LOW);
digitalWrite(alim_dizaine,LOW);
digitalWrite(alim_unite,LOW);
delay(5);
https://www.arduino.cc/ digitalWrite(alim_dizainemillier,LOW);
digitalWrite(alim_millier,HIGH);
afficher_CM(millier);
digitalWrite(alim_centaine,LOW);
digitalWrite(alim_dizaine,LOW);
digitalWrite(alim_unite,LOW);
delay(5);
digitalWrite(alim_dizainemillier,LOW);
digitalWrite(alim_millier,LOW);
digitalWrite(alim_centaine,HIGH);
afficher_CM(centaine);
digitalWrite(alim_dizaine,LOW);
digitalWrite(alim_unite,LOW);
delay(5);
digitalWrite(alim_dizainemillier,LOW);
digitalWrite(alim_millier,LOW);
digitalWrite(alim_centaine,LOW);
digitalWrite(alim_dizaine,HIGH);
afficher_UD(dizaine);
digitalWrite(alim_unite,LOW);
delay(5);
digitalWrite(alim_dizainemillier,LOW);
digitalWrite(alim_millier,LOW);
digitalWrite(alim_centaine,LOW);
digitalWrite(alim_dizaine,LOW);
digitalWrite(alim_unite,HIGH);
afficher_UD(unite);
delay(5);
}
}
void afficher_UD(int chiffre)
{
digitalWrite(bit_A,LOW);
digitalWrite(bit_B,LOW);
digitalWrite(bit_C,LOW);
digitalWrite(bit_D,LOW);
if(chiffre>=8)
{
digitalWrite(bit_D,HIGH);
chiffre=chiffre-8;
}
if(chiffre>=4)
{
digitalWrite(bit_C,HIGH);
chiffre=chiffre-4;
}
if(chiffre>=2)
{
digitalWrite(bit_B,HIGH);
chiffre=chiffre-2;
}
if(chiffre>=1)
{
digitalWrite(bit_A,HIGH);
chiffre=chiffre-1;
}
}
void afficher_CM(int chiffre)
{
digitalWrite(bit_E,LOW);
digitalWrite(bit_F,LOW);
digitalWrite(bit_G,LOW);
digitalWrite(bit_H,LOW);
if(chiffre>=8)
{
digitalWrite(bit_H,HIGH);
chiffre=chiffre-8;
}
if(chiffre>=4)
{
digitalWrite(bit_G,HIGH);
chiffre=chiffre-4;
}
if(chiffre>=2)
{
digitalWrite(bit_F,HIGH);
chiffre=chiffre-2;
}
if(chiffre>=1)
{
digitalWrite(bit_E,HIGH);
chiffre=chiffre-1;
}
}
void afficher_CD(int chiffre)
{
digitalWrite(bit_I,LOW);
digitalWrite(bit_J,LOW);
digitalWrite(bit_K,LOW);
digitalWrite(bit_L,LOW);
if(chiffre>=8)
{
digitalWrite(bit_L,HIGH);
chiffre=chiffre-8;
}
if(chiffre>=4)
{
digitalWrite(bit_K,HIGH);
chiffre=chiffre-4;
}
if(chiffre>=2)
{
digitalWrite(bit_J,HIGH);
chiffre=chiffre-2;
}
if(chiffre>=1)
{
digitalWrite(bit_I,HIGH);
chiffre=chiffre-1;
}
}
非常感謝
這是個小問題...:
arduino以16位工作,因此要計數到100000,需要使用long
:
...
void loop()
{
for(long i=0;i<10000;i++)
{
afficher_nombre(i);
}
}
void afficher_nombre(long nombre)
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.