對(duì)于電子時(shí)鐘而言,雖然我們可以在程序中對(duì)RTC芯片寫入初始時(shí)間數(shù)據(jù),但按鍵調(diào)時(shí)功能也是必不可少的,它可以讓我們更加靈活的進(jìn)行時(shí)間調(diào)節(jié)校準(zhǔn)。
1
菜單顯示結(jié)構(gòu)
本實(shí)驗(yàn)中顯示菜單結(jié)構(gòu)如下圖所示:
菜單結(jié)構(gòu)
其中menu00是首頁(yè)正常的時(shí)間日期顯示界面,然后通過搖桿按鍵切換頁(yè)面,進(jìn)行日期調(diào)節(jié)和時(shí)間調(diào)節(jié)選擇,然后對(duì)應(yīng)跳轉(zhuǎn)年月日和時(shí)分秒的調(diào)節(jié)頁(yè)面。
根據(jù)結(jié)構(gòu)圖,結(jié)合多級(jí)菜單思路,很容易得到搖桿按鍵與界面對(duì)應(yīng)的相關(guān)數(shù)據(jù)。
//定義按鍵操作數(shù)據(jù)
KEY_TABLE table[9] =
{
{0, 0, 0, 0, 1, (*menu00)},
{1, 1, 2, 0, 3, (*menu11)},
{2, 1, 2, 0, 6, (*menu12)},
{3, 3, 4, 1, 3, (*menu21)},
{4, 3, 5, 1, 4, (*menu22)},
{5, 4, 5, 1, 5, (*menu23)},
{6, 6, 7, 2, 6, (*menu24)},
{7, 6, 8, 2, 7, (*menu25)},
{8, 7, 8, 2, 8, (*menu26)},
};
2
實(shí)驗(yàn)材料
3
實(shí)驗(yàn)步驟
1.根據(jù)原理圖搭建電路圖。
DS1302模塊的VCC和GND連接Uno開發(fā)板的3.3V和GND。DS1302模塊的CLK、DAT、RST對(duì)應(yīng)連接Uno開發(fā)板的4、3、2引腳。OLED的VCC和GND分別連接開發(fā)板的3.3V和GND,OLED的SDA、SCL分別連接開發(fā)板的A4、A5引腳。雙軸按鍵搖桿模塊的VCC、GND分別連接開發(fā)板的5V、GND,模塊的X軸輸出、Y軸輸出分別連接開發(fā)板的模擬引腳A0、A1。
實(shí)驗(yàn)原理圖如下圖所示:
實(shí)驗(yàn)原理圖
2.代碼較長(zhǎng),部分截取如下,完整代碼請(qǐng)?jiān)谖哪┇@取。
...
void show_time(Time tim)
{
char date[20];
char timer[20];
snprintf(date, sizeof(date), "%04d-%02d-%02d",
tim.yr, tim.mon, tim.date);
snprintf(timer, sizeof(timer), "%02d:%02d:%02d",
tim.hr, tim.min, tim.sec);
oled.clearDisplay();//清屏
oled.setCursor(15, 2);//設(shè)置顯示位置
oled.println("--CLOCK--");
oled.setCursor(4, 25);//設(shè)置顯示位置
oled.println(date);
oled.setCursor(18, 50);//設(shè)置顯示位置
oled.println(timer);
oled.display(); // 開顯示
}
...
void loop() {
keyValue = keyScan();
if (keyValue != 0) //每發(fā)生一次有效按鍵就根據(jù)按鍵功能獲取對(duì)應(yīng)函數(shù)并執(zhí)行
{
switch (keyValue)//獲取按鍵對(duì)應(yīng)序號(hào)
{
case 1: funIndex = table[funIndex].right; break;
case 2: funIndex = table[funIndex].left; break;
case 3: funIndex = table[funIndex].down; break;
case 4: funIndex = table[funIndex].up; break;
}
current = table[funIndex].operation;//根據(jù)需要獲取對(duì)應(yīng)需要執(zhí)行的函數(shù)
(*current)();//執(zhí)行獲取到的函數(shù)
}
if (menu == 0)//只有在首頁(yè)才進(jìn)行時(shí)間刷新
{
updatTime();
}
}
3.連接開發(fā)板,設(shè)置好對(duì)應(yīng)端口號(hào)和開發(fā)板類型,進(jìn)行程序下載。
程序下載
-
DS1302
+關(guān)注
關(guān)注
8文章
449瀏覽量
50677 -
RTC
+關(guān)注
關(guān)注
2文章
538瀏覽量
66466 -
SDA
+關(guān)注
關(guān)注
0文章
124瀏覽量
28127 -
OLED顯示屏
+關(guān)注
關(guān)注
6文章
217瀏覽量
30675 -
GND
+關(guān)注
關(guān)注
2文章
539瀏覽量
38696
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論