對于電子時鐘而言,雖然我們可以在程序中對RTC芯片寫入初始時間數(shù)據(jù),但按鍵調(diào)時功能也是必不可少的,它可以讓我們更加靈活的進(jìn)行時間調(diào)節(jié)校準(zhǔn)。
1
菜單顯示結(jié)構(gòu)
本實驗中顯示菜單結(jié)構(gòu)如下圖所示:
菜單結(jié)構(gòu)
其中menu00是首頁正常的時間日期顯示界面,然后通過搖桿按鍵切換頁面,進(jìn)行日期調(diào)節(jié)和時間調(diào)節(jié)選擇,然后對應(yīng)跳轉(zhuǎn)年月日和時分秒的調(diào)節(jié)頁面。
根據(jù)結(jié)構(gòu)圖,結(jié)合多級菜單思路,很容易得到搖桿按鍵與界面對應(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
實驗材料
3
實驗步驟
1.根據(jù)原理圖搭建電路圖。
DS1302模塊的VCC和GND連接Uno開發(fā)板的3.3V和GND。DS1302模塊的CLK、DAT、RST對應(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。
實驗原理圖如下圖所示:
實驗原理圖
2.代碼較長,部分截取如下,完整代碼請在文末獲取。
...
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ù)按鍵功能獲取對應(yīng)函數(shù)并執(zhí)行
{
switch (keyValue)//獲取按鍵對應(yīng)序號
{
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ù)需要獲取對應(yīng)需要執(zhí)行的函數(shù)
(*current)();//執(zhí)行獲取到的函數(shù)
}
if (menu == 0)//只有在首頁才進(jìn)行時間刷新
{
updatTime();
}
}
3.連接開發(fā)板,設(shè)置好對應(yīng)端口號和開發(fā)板類型,進(jìn)行程序下載。
程序下載
-
DS1302
+關(guān)注
關(guān)注
8文章
451瀏覽量
51884 -
RTC
+關(guān)注
關(guān)注
2文章
622瀏覽量
68854 -
SDA
+關(guān)注
關(guān)注
0文章
125瀏覽量
28823 -
OLED顯示屏
+關(guān)注
關(guān)注
6文章
218瀏覽量
31590 -
GND
+關(guān)注
關(guān)注
2文章
544瀏覽量
39814
發(fā)布評論請先 登錄
如何將保存好的txt的時間數(shù)據(jù)讀出
時鐘調(diào)節(jié)時間的問題
labview 用PID模塊 來做 閉環(huán)控制,調(diào)節(jié)時間一直很長
臨界阻尼單位斜坡響應(yīng)調(diào)節(jié)時間怎樣公式中的4.1怎樣算出的
求上升時間,調(diào)節(jié)時間,超調(diào)量 應(yīng)該如何編程呢
時間數(shù)據(jù)處理
按鍵調(diào)節(jié)時鐘的應(yīng)用實驗分享
1602液晶顯示可調(diào)節(jié)時間日期的數(shù)字時鐘程序
時間數(shù)據(jù)流的并行檢測算法

單片機:按鍵調(diào)節(jié)時鐘

【CW32模塊使用】雙軸按鍵搖桿模塊

評論