數(shù)字掛鐘現(xiàn)在越來越受歡迎,它們比模擬時(shí)鐘更好,因?yàn)樗峁┝诵r(shí)、分鐘和秒的準(zhǔn)確時(shí)間,并且易于讀取數(shù)值。一些數(shù)字時(shí)鐘也有許多設(shè)施,如顯示溫度、濕度、設(shè)置多個(gè)鬧鈴等。大多數(shù)數(shù)字時(shí)鐘使用七段數(shù)碼管。
我們之前使用七段數(shù)碼管或使用1602 LCD制作了許多數(shù)字時(shí)鐘電路。在本文中,主要介紹通過使用Arduino UNO和四位數(shù)碼制作數(shù)字時(shí)鐘,并以HH:MM格式顯示時(shí)間。
需要的組件
● 4位7段數(shù)碼管
● 74HC595
● DS3231 RTC模塊
● Arduino UNO
● 面包板
● 連接跳線
四位七段數(shù)碼管
四位七段數(shù)碼管有四個(gè)七段數(shù)碼管連接在一起。它們用于顯示數(shù)值以及一些帶小數(shù)和冒號的字母。顯示屏可以雙向使用。四位數(shù)碼管可用于制作數(shù)字時(shí)鐘或類似于0到9999之間的計(jì)數(shù)器。下面是四位七段數(shù)碼管的內(nèi)部圖。
每個(gè)部分都有一個(gè)帶獨(dú)立控制的LED。七段數(shù)碼管顯示有兩種類型,共陽極和共陰極。上圖顯示了共陽極七段數(shù)碼管。
共陽極
在共陽極中,所有8個(gè)LED的所有正極(陽極)連接在一起,命名為COM。并且所有負(fù)極端子都保持?jǐn)嚅_或連接到微控制器引腳。通過使用微控制器,邏輯低電平用于點(diǎn)亮特定LED段,邏輯高電平熄滅LED。
共陰極
在共陰極中,所有8個(gè)LED的所有負(fù)極端子(陰極)連接在一起,命名為COM。并且所有正極端子都保持?jǐn)嚅_或連接到微控制器引腳。通過使用微控制器,邏輯高電平用于點(diǎn)亮特定LED段,邏輯低電平熄滅LED。。
74HC595也稱為8位串行輸入 - 并行輸出移位寄存器。該IC可以串行接收數(shù)據(jù)輸入,并行控制8個(gè)輸出引腳。這對于減少微控制器使用的引腳非常有用。
74HC595 IC的工作原理:
該IC使用三個(gè)引腳(如時(shí)鐘、數(shù)據(jù)和鎖存器)與微控制器來控制IC的8個(gè)輸出引腳。時(shí)鐘用于連續(xù)提供來自微控制器的脈沖,數(shù)據(jù)引腳用于發(fā)送數(shù)據(jù),例如在相應(yīng)的時(shí)鐘時(shí)間需要將輸出打開或關(guān)閉的數(shù)據(jù)。
DS3231 RTC模塊
DS3231是一款RTC模塊。 RTC代表實(shí)時(shí)時(shí)鐘。即使電路未通電,該模塊也用于記住時(shí)間和日期。它有一個(gè)備用電池CR2032,可在沒有外部電源的情況下運(yùn)行模塊。該模塊還包括溫度傳感器。該模塊可用于嵌入式項(xiàng)目,如制作帶溫度指示器的數(shù)字時(shí)鐘等.
該模塊的一些功能和參數(shù):
● RTC,計(jì)算秒、分、小時(shí)和年
● 數(shù)字溫度傳感器,精度為±3oC
● 功耗低
● CR2032備用電池,具有兩到三年的使用壽命
● 工作電壓:2.3至5.5V
電路原理圖
DS3231 RTC和Arduino UNO之間的電路連接:
DS3231 | Arduino UNO開發(fā)板 |
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
編程Arduino UNO
在本文的末尾處給出了完整的代碼。在編程部分中,將說明如何以24小時(shí)格式從RTC模塊獲取時(shí)間(小時(shí)和分鐘),然后將其轉(zhuǎn)換成用于在4位7段顯示中顯示它們的相應(yīng)格式。
要將DS3231 RTC模塊與Arduino UNO連接,使用Arduino UNO的I2C總線。程序中包含一個(gè)名為
在本文中,小時(shí)和分鐘首先從RTC獲取,它們像0930(09:30 pm)一樣被組合在一起然后各個(gè)數(shù)字被分開,如千、百、十、單位,并且各個(gè)數(shù)字被轉(zhuǎn)換成二進(jìn)制格式,如0到63(0111111)。該二進(jìn)制代碼被發(fā)送到移位寄存器,然后從移位寄存器發(fā)送到七段,成功地在七段顯示中顯示數(shù)字0。這樣,四位數(shù)碼管姐可以顯示小時(shí)和分鐘。
首先,包括必要的庫,例如DS3231庫和Wire庫(I2C庫)。
#include
#include
定義控制七段數(shù)碼管的引腳。這些控制將在復(fù)用數(shù)碼管中發(fā)揮重要作用。
#define latchPin 5
#define clockPin 6
#define dataPin 4
#define dot 2
聲明變量存儲從RTC獲取的轉(zhuǎn)換結(jié)果或原始結(jié)果。
int h; //Variable declared for hour
int m; //Variable declared for minute
int thousands;
int hundreds;
int tens;
int unit;
bool h24;
bool PM;
接下來,聲明類DS3231的對象為RTC,以簡化在以后代碼中的使用。
DS3231 RTC;
由于RTC模塊通過I2C通信與Arduino連接。因此,wire.begin()用于在RTC的默認(rèn)地址中啟動(dòng)I2C通信,因?yàn)闆]有其他I2C模塊。
Wire.begin();
定義引腳模式,確定GPIO是作為輸出還是輸入。
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(dot,OUTPUT);
loop函數(shù)將無限運(yùn)行,首先需要從RTC DS3231模塊讀取以小時(shí)和分鐘為單位的時(shí)間。 'h24'表示24小時(shí)格式變量。
int h= RTC.getHour(h24, PM);
int m = RTC.getMinute();
然后將小時(shí)和分鐘組合為一個(gè)數(shù)字(例如,如果小時(shí)為10,則min為60,則數(shù)字為10 * 100 = 1000 + 60 = 1060)。
int number = h*100+m;
獲得數(shù)字的各個(gè)位的數(shù)字(示例1060-1是千位,0是百位,1是十位,0是最后一個(gè)數(shù)字)。為了分開數(shù)字,使用模數(shù)運(yùn)算符。例如,在1060得到1然后1060/1000 = 1.06%10 = 1)。因此,單獨(dú)的數(shù)字存儲在單獨(dú)的變量中。
int thousands = number/1000%10;
int hundreds = number/100%10;
int tens = number/10%10;
int unit = number%10;
之后,定義每個(gè)數(shù)字的switch-case語句,用于將它們轉(zhuǎn)換為相應(yīng)的格式(二進(jìn)制格式),并通過移位寄存器發(fā)送到7段顯示。例如(對于1位數(shù),它將轉(zhuǎn)換為06(0000 0110))。因此它通過移位發(fā)出,1位數(shù)顯示在7段(0表示LOW,1表示HIGH)。
switch (t)
{
case 0:
unit = 63;
break;
case 1:
unit = 06;
break;
case 2:
unit =91;
break;
case 3:
unit=79;
break;
case 4:
unit=102;
break;
case 5:
unit = 109;
break;
case 6:
unit =125;
case 7:
unit = 07;
break;
case 8:
unit = 127;
break;
case 9:
unit =103;
break;
}
然后,通過'shiftout'函數(shù)以先MSB的方式發(fā)送二進(jìn)制格式的數(shù)字,相應(yīng)的數(shù)字引腳變?yōu)楦唠娖?,鎖存引腳變?yōu)楦唠娖健?/p>
digitalWrite(9, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST,thousands);
digitalWrite(latchPin, HIGH);
digitalWrite(9, HIGH);
delay(5);
這樣就完成了完整的代碼。大多數(shù)函數(shù)說明都在代碼注釋部分的代碼行旁邊給出。時(shí)鐘的頻率將決定多路復(fù)用的時(shí)間和質(zhì)量的、。如果使用的時(shí)鐘低,那么可以看到閃爍,如果時(shí)鐘速度高,那么就不會(huì)有這樣的閃爍,可以看到穩(wěn)定的時(shí)間。
編輯:hfy
-
微控制器
+關(guān)注
關(guān)注
48文章
7554瀏覽量
151426 -
lcd
+關(guān)注
關(guān)注
34文章
4426瀏覽量
167509 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1882瀏覽量
91126 -
模擬時(shí)鐘
+關(guān)注
關(guān)注
0文章
4瀏覽量
1849
發(fā)布評論請先 登錄
相關(guān)推薦
評論