步驟1:將組件放置在面包板上
找到位于IC的一個角上的點,該標記標記IC的第一個引腳1,其他引腳沿逆時針方向計數。
》
通過電阻將按鈕的一個端子連接至5V,并通過電阻將另一端子連接至地面。
步驟2:將BCD連接至7段邏輯
BCD代表二進制編碼的十進制,其中十進制數字表示為4位二進制。
我們使用BCD到7段解碼器,因為它將減少使用的Arduino數字引腳分配的數量連接單個7段顯示器。一個7段顯示器至少需要7個arduino引腳,其中兩個至少需要14個,而我們在Arduino Uno上只有13個數字引腳。
一個BCD至7段解碼器將只需要4個Arduino引腳和2個他們將只使用8個數字引腳。
BCD到十進制映射如下。
BCD ---- DECIMAL
0000 ---- 0
0001 ---- 1
0010 ---- 2
0011 ---- 3
0100- -4
0101 ---- 5
0110 ---- 6
0111 ---- 7
1000- --- 8
1001 ---- 9
BCD到十進制轉換一直到15,但我將它列出到9,因為它是單個可以顯示的最大數量7-段顯示
步驟3:將Arduino引腳分配連接到BCD輸入。
在這里,我們使用的是IC CD4511 7段解碼器,
引腳1,2,6,7是IC CD4511的BCD輸入引腳。
其中,
引腳7 =位0
Pin 1 = Bit 1
Pin 2 = Bit 2
Pin 6 = Bit 3
只連接兩個IC之一首先是Arduino,現在是第一個解碼器IC,即顯示在顯示器右側的那個
現在是第一個解碼器IC,即顯示在顯示器右側的那個。。
CD4511(1 ) Arduino
Pin 7 -----》 Pin 4
Pin 1 -----》 Pin 5
Pin 2 -----》 Pin 6
Pin 6 -----》 Pin 7
步驟4:連接7段顯示器并為IC供電
IC上的引腳9至15是對應于7段顯示器的引腳。
映射到7段顯示器的IC引腳分配如下。
CD4511 ----》 7段顯示
13 ----》 a
12 ----》 b
11 ----》 c
10 ----》 d
9 ----》 e
15 ----》 f
14 ----》 g
按照說明將右側顯示屏連接到左側的解碼器1
如圖所示,通過電阻將兩個顯示器的公共端接地。
要為IC供電,您需要進行CD4511的以下連接
CD4511
Pin 3 ---》 Vcc(+ 5v)
Pin 4 ---》 Vcc(+ 5v)
Pin 5 ---》 GND
Pin 8 ---》 GND
Pin 16 ---》 Vcc(+ 5V)
現在,我們進入下一步,
步驟5:用于測試第一顯示的Arduino Sketch
Arduino Sketch如下,編寫并上傳到Arduino。在這里,我們顯示數字8來檢查所有線段是否正常工作,但是應使用0以外的任何數字,因為如果我們的草圖不工作,它將始終顯示0。
如果不起作用檢查您的連接。進行正確的連接,尤其是對于Vcc和地線,因為電源輸入錯誤的引腳可能會損壞IC。
您可以在圖像中看到輸出。
------ -------------------------------------------------- --------
//BCD 1
int a1 = 4;
int a2 = 5;
int a3 = 6;
int a4 = 7;
void setup()
{
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void loop()
{
disp1(8);
}
void disp1(int num)
{
if(num == 8)
{
digitalWrite(a1, LOW);
digitalWrite(a2, LOW);
digitalWrite(a3, LOW);
digitalWrite(a4, HIGH);
}
}
步驟6:連接其他顯示器并對其進行測試。
Arduino到CD4511(2)的引腳分配,即第二個解碼器,即左側的解碼器,如下所示。
CD4511(2)-----》 Arduino
Pin 7 -----》 8
Pin 1 -----》 9
Pin 2 -----》 10
Pin 6 -----》 11
按步驟4所示,將IC的7段引腳連接到另一個顯示器,并進行電源連接。
將以下草圖運行到
//BCD 1
int a1 = 4;
int a2 = 5;
int a3 = 6;
int a4 = 7;
//BCD 2
int b1 = 8;
int b2 = 9;
int b3 = 10;
int b4 = 11;
void setup()
{
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop()
{
disp1(8);
}
void disp1(int num)
{
if(num == 8)
{
digitalWrite(a1, LOW);
digitalWrite(a2, LOW);
digitalWrite(a3, LOW);
digitalWrite(a4, HIGH);
}
}
void disp2(int num)
{
if(num == 8)
{
digitalWrite(b1, LOW);
digitalWrite(b2, LOW);
digitalWrite(b3, LOW);
digitalWrite(b4, HIGH);
}
}
步驟7:完成用于顯示數字0到9的顯示功能。
在顯示功能中disp1(),進行以下更改
void disp1(int num){
if(num == 0)//0000
{
digitalWrite(a1, LOW);
digitalWrite(a2, LOW);
digitalWrite(a3, LOW);
digitalWrite(a4, LOW);
}
if(num == 1)//0001
{
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW);
digitalWrite(a3, LOW);
digitalWrite(a4, LOW);
}
if(num == 2)//0010
{
digitalWrite(a1, LOW);//0
digitalWrite(a2, HIGH);//1
digitalWrite(a3, LOW);//0
digitalWrite(a4, LOW);//0
}
if(num == 3)//0011
{
digitalWrite(a1, HIGH);//1
digitalWrite(a2, HIGH);//1
digitalWrite(a3, LOW);//0
digitalWrite(a4, LOW);//0
}
if(num == 4)//0100
{
digitalWrite(a1, LOW);//0
digitalWrite(a2, LOW);//0
digitalWrite(a3, HIGH);//1
digitalWrite(a4, LOW);//0
}
if(num == 5)//0101
{
digitalWrite(a1, HIGH);//1
digitalWrite(a2, LOW);//0
digitalWrite(a3, HIGH);//1
digitalWrite(a4, LOW);//0
}
if(num == 6)//0110
{
digitalWrite(a1, LOW);//0
digitalWrite(a2, HIGH);//1
digitalWrite(a3, HIGH);//1
digitalWrite(a4, LOW);//0
}
if(num == 7) //0111
{
digitalWrite(a1, HIGH);//1
digitalWrite(a2, HIGH);//1
digitalWrite(a3, HIGH);//1
digitalWrite(a4, LOW);//0
}
if(num == 8) //1000
{
digitalWrite(a1, LOW);//0
digitalWrite(a2, LOW);//0
digitalWrite(a3, LOW);//0
digitalWrite(a4, HIGH);//1
}
if(num == 9)//1001
{
digitalWrite(a1, HIGH);//1
digitalWrite(a2, LOW);//0
digitalWrite(a3, LOW);//0
digitalWrite(a4, HIGH);//1
}
}
以類似的方式,編輯函數disp2()
void disp2(int num){
if(num == 0)//0000
{
digitalWrite(b1, LOW);//
digitalWrite(b2, LOW);//0
digitalWrite(b3, LOW);//0
digitalWrite(b4, LOW);//0
}
if(num == 1)//0001
{
digitalWrite(b1, HIGH);//1
digitalWrite(b2, LOW);//0
digitalWrite(b3, LOW);//0
digitalWrite(b4, LOW);//0
}
if(num == 2)//0010
{
digitalWrite(b1, LOW);//0
digitalWrite(b2, HIGH);//1
digitalWrite(b3, LOW);//0
digitalWrite(b4, LOW);//0
}
if(num == 3)//0011
{
digitalWrite(b1, HIGH);//1
digitalWrite(b2, HIGH);//1
digitalWrite(b3, LOW);//0
digitalWrite(b4, LOW);//0
}
if(num == 4)//0100
{
digitalWrite(b1, LOW);//0
digitalWrite(b2, LOW);//0
digitalWrite(b3, HIGH);//1
digitalWrite(b4, LOW);//0
}
if(num == 5) //0101
{
digitalWrite(b1, HIGH);//1
digitalWrite(b2, LOW);//0
digitalWrite(b3, HIGH);//1
digitalWrite(b4, LOW);//0
}
if(num == 6) //0110
{
digitalWrite(b1, LOW);//0
digitalWrite(b2, HIGH);//1
digitalWrite(b3, HIGH);//1
digitalWrite(b4, LOW);//0
}
if(num == 7) //0111
{
digitalWrite(b1, HIGH);//1
digitalWrite(b2, HIGH);//1
digitalWrite(b3, HIGH);//1
digitalWrite(b4, LOW);//0
}
if(num == 8) //1000
{
digitalWrite(b1, LOW);//0
digitalWrite(b2, LOW);//0
digitalWrite(b3, LOW);//0
digitalWrite(b4, HIGH);//1
}
if(num == 9)//1001
{
digitalWrite(b1, HIGH);//1
digitalWrite(b2, LOW);//0
digitalWrite(b3, LOW);//0
digitalWrite(b4, HIGH);//1
}
}
步驟8:顯示一個兩位數
哇下面是將使用兩個7段顯示器顯示兩位數字的代碼。
但是我們知道7段顯示器不能顯示大于9的任何數字。
要顯示一個兩位數的數字,我們將編寫代碼以將兩位數的數字分開,并將其值存儲到d1和d2中,其中d1是一位數字,而d2是十位數。
然后,我們將使用disp1()和disp(2)函數將其寫入兩個顯示。。其中,disp1()控制數據到7段解碼器1的二進制輸入(即右側的一個),然后依次控制7段顯示放在一個位置,并且disp2()將數據控制到7段解碼器2的二進制輸入(即左側的一個),進而控制十段的7段顯示。
首先全局聲明以下整數變量
int n; //To Store the Number
int d1; //To Store the first Digit
int d2; // To Store the Second Digit
現在在 void循環()中輸入以下代碼行
void loop()
{
n=25; //I have taken 25 as an example. you may take any number you wish
d1= n%10;
d2= n/10;
/* d1 = n%10, will store to remainder of n/10 to d1 i.e 5 in this case,
it will be our digit at ones place.
d2 = n/10, will store the answer of n/10 to d2, ignoring the numbers after decimals,
here n = 25 so n/10 = 2.5 and 2 will be stored ignoring the 5 after the decimal point,
because int will store only whole number.
disp1(d1); //The value of d1 i.e the digit at ones place will be send to corresponding Display
disp2(d2); //The value of d2 i.e the digit at tens place will be send to corresponding Display
}
第9步:計時器的Arduino草圖。
現在,我們將n的值從零延遲增加到99,然后將其重置為0,然后再次將其遞增到99。
并在7段顯示器上顯示數字。
在全局聲明中更改
int n=0;
保持d1和d2不變,
現在編輯 void loop()如下所示
void loop(){
delay(1000); // Delay of 1 Second
n++;
if(n==100)
{
n=0;
}
d1=n%10; // This will divide n by 10 and the remainder will be stored in d1
d2=n/10; // This will divide n by 10 and the value before decimal will be stored in d2
disp1(d1);
disp2(d2);
}
在此處使用延遲,否則初始值0將在執行循環后立即增加到1,
步驟10:連接按鈕并為計數器編寫草圖
所有這些時候,您可能想知道按鈕是否放置在
好,現在是時候連接它并用它做計數器了。
我們將修改草圖,以便n的值僅在按下按鈕時才會增加。
為此,我們首先如圖所示連接按鈕,其中一個端子通過電阻器連接到Vcc,另一端子通過電阻器連接到Vcc。一個通過電阻連接到GND。接地確保在接通電路時突然的峰值電壓跨接在電阻上,否則將觸發arduino上的按鈕輸入引腳為HIGH。
現在連接另一個端子
聲明一個全局整數變量并將其分配給引腳2(讓int button = 2;)和一個變量(int狀態= 0);
然后在設置中,將按鈕分配為INPUT
int n=0; //Setting initial value of n to 0
int d1;
int d2;
int button = 2;
int state = 0; void setup()
{
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(button,INPUT);
}
在void loop()中,進行如下修改:
void loop()
{
state = digitalRead(button);
if(state == HIGH)
{
n++;
}
if(n==100)
{
n=0;
}
d1=n%10; // This will divide n by 10 and the remainder will be stored in d1
d2=n/10; // This will divide n by 10 and the value before decimal will be stored in d2
disp1(d1);
disp2(d2);
delay(100);//100 ms delay to debounce
}
可以根據您的方便更改反跳時間。
現在上傳并運行最終草圖,您的計數器就會工作。
使用我認為這是可指導的,我是我的第一個Intructable,我竭盡全力提供我要分享的知識,假定已經知道很多事情,并且這對于使解釋盡可能短是必要的。如果我遺漏了任何解釋,或者您有任何問題,請隨時提出。隨時準備為您提供幫助。
-
定時器
+關注
關注
23文章
3241瀏覽量
114482 -
Arduino
+關注
關注
187文章
6464瀏覽量
186661
發布評論請先 登錄
相關推薦
評論