中圖分類號:TH714 文獻標志碼:A 文章編號:2095-2945(2025)14-0142-05
Abstract:This paper mainly expounds the design principlesanddesign ideas of anelectronicclock based on STM32.The designprinciplemainlyintroducesthehardwarepart,includingtheRTCfunctionmodule,LCDscreendisplayprinciple,key workingprinciple,andtimer module.Thenitexpoundstheprogramdesignideaofanelectronicclockwithcountdownfunction, including thedesignofatimetiming module,atimedisplaymoduleandabutonmodule.Theexperimentalresultsof this scheme showthattheclock designedinthisscheme hasthefunctionof displaying themonth,month,hour,minuteandscond, andcounting down,andcanbeabletopressthebutontomodifythetimeandmodifythecountdowntime.Theplanis feasible,effective,easy to operate,and can meet people's daily life needs.
Keywords:STM32;clock;countdown;RTC;buttons
在日常生活中,時間對于每個人都非常重要,因此時鐘在人們生活中扮演著十分重要的角色。如今,時鐘的款式各種各樣,而電子鐘有著不可替代的地位,電子鐘具有精準、美觀、成本低廉和調時方便等優點。本文設計的電子鐘除了能夠顯示時分秒,還具備萬年歷功能和倒計時功能,同時能夠通過按鍵修改時間和倒計時。外觀設計較為美觀,能夠滿足人們的生活需求。
1 設計原理
1.1RTC功能模塊工作原理
RTC(實時時鐘)模塊主要用于設置時間、計算時間、獲取當前時間。該模塊處于系統的后備區域,后備區域是獨立供電的,這樣即使設備斷電,只要后備區域正常供電,時鐘便能正常運行。一般情況下,后備區域是不允許訪問的,防止對時鐘的意外操作,起到對時鐘的保護作用。同時后備區域可以被寫入編號,這樣程序在運行時,如果是同一個編號,則不用重復
初始化。
RTC模塊主要由預分頻器和計數器組成。雖然內部低速時鐘、外部低速時鐘和外部高速時鐘都可作為RTC的時鐘源,但為了精準、低功耗,一般采用外部低速時鐘作為RTC模塊的時鐘源,該時鐘源經過預分頻器分頻以后,一般得到一個頻率為 1Hz 的計數頻率,這意味著計數器每1s計數1次。在顯示當前時間時,將計數器內的總秒數換算成時間,便實現了RTC計時功能。在設置時間時,則需要將設置時間換算成秒數,存儲在計數器里。
RTC模塊還具有2個中斷源:秒中斷源和鬧鐘中斷源。在中斷開啟的情況下,秒中斷源是指每1s產生1次中斷,鬧鐘中斷源是指當鬧鐘寄存器與計數器的值相等時產生1次中斷,產生的中斷交由NVIC(嵌套向量中斷控制器)處理。
1.2LCD屏幕顯示原理
LCD屏具有亮度高、對比度好、顏色鮮艷等特點,被廣泛地應用于各種電子產品。本文采用的是2.8寸LCD模塊,分辨率為 240×320 ,驅動芯片為ILI9341,是16位真彩顯示。電路圖如圖1所示。
其中,LCD_CS為片選信號;LCD_WR為寫信號,用于向LCD屏寫數據;LCD_RD為讀信號,用于讀數據;LCD_RS為命令/數據標志信號,該位為0時用于設置命令,為1時用于傳輸數據;LCD_D[0:15]為雙向數據線,用于傳輸命令和數據。
TFT_2.8 LCD TFTLCD LCD WR 1 LRDCLS RS 24 LCD_RS OELD LCD D1 5號 RST DB1 08 LCD-D2 H2X1 LCDD3 9 DB4 DBS 10 LCD_D4 12 LCDDS LCD D7 1 B B D12 12 14 LCD_D6 LCDD10C30 cVcc3.3 LCB B13 最 DB13 DB14 1820 LCDDi4104 104 LCB BLS VCC3.3 223 25 DB15 BL VDD3.3 DB16 26 224 VCC3.3 VDD3.3 GND 27 GND BL_VDD 28 VCC5 TMISO 29 30 TMOSI C32 MISO MOSI GND T CS 313 T_PEN T_CS CLK Mo 34 TSCK 104 GND TFTLCD
1.3 按鍵工作原理
本文設計方案使用KEYO、KEY1和WK_UP按鍵來實現時鐘調整功能,其中WK_UP按鍵作為功能選擇鍵,用于選擇倒計時時間、分鐘、時鐘、日期、月份和年份,KEYO和KEY1按鍵分別作為時間數值的“ °+ ”和“-”調整鍵。按鍵電路原理圖如圖2所示,KEYO、KEY1按鍵按下時,對應引腳為低電平;WK_UP按鍵按下時,對應引腳為高電平。因此,通過讀取按鍵對應的引腳電平值便能夠判斷按鍵是否按下[4]。
KEY KEYO 88Y0 WK_UP KEY4 VCC3.3188WRUP KEY1 KEY4 88Y1 KEY4 N
2基于STM32的數字時鐘的設計
2.1 時間計時模塊設計
時間計時模塊主要用于時鐘的計時,程序流程圖如圖3所示。在設計時首先需要對相關模塊進行初始化,包括RTC模塊初始化,中斷初始化。
初始化完成后,設置初始時間,這里需要把當前的初始時間轉換為秒數,將秒數存入RTC計數器模塊,然后退出配置模式。初始時間設置完成后,需要對時間進行更新,每1s產生1次中斷,將存放在RTC計數模塊中的值提取出來,換算成具體時間,存放在變量年(calendar.w_year)、月(calendar.w_month)、日(calendar.w_date)、時(calendar.hour)、分(calendar.min)、秒(calendar.sec)和星期(calendar.week)中。
1.4定時器模塊
圖1LCD電路圖
圖2按鍵電路圖
圖3時間計時模塊程序流程圖

定時器模塊主要用于實現倒計時功能。在STM32中,定時器包括基本定時器、通用定時器和高級定時器。本文使用通用定時器來實現倒計時功能。定時器是由一個通過可編程預分頻器(PSC)一個帶有自動重裝載(ARR)的16位累加計數器(CNT)組成。計數方式有向上計數模式、向下計數模式、向上/向下計數模式。本文采用的是向上計數模式,即定時器開始工作后便開始從0計數到自動重裝載值,然后產生一次溢出事件。由于每次計數的時間是確定的,由此便可設計出定時時間。通過定時器的這個工作原理實現倒計時功能。
2.2 時間顯示模塊設計
時間顯示模塊主要用于將時間顯示在LCD屏上。首先LCD屏進行初始化,LCD屏在顯示時無法直接顯示數字,需要將數字轉換成字符。因此設置一個字符類型數組time[來存放時間。再調用字符串顯示函數DrawZf_N。具體程序如下:
char time[]=\"2024-08-10 10:20:30\";
time[O]=calendar.w_year/1000+0';
time[1]=calendar.w_year%1000/100+O';
time[2]=calendar.w_year%100/10+0';
time[3]=calendar.w_year%10+0';
time[5]=calendar.w_month/10+0';
time[6]=calendar.w_month%10+0'; time[8]=calendar.w_date/10+0';
time[9]=calendar.w_date%10+0';
time[11]=calendar.hour/10+0';
time[12]=calendar.hour%10+0';
time[14]=calendar.min/10+O';
time[15]=calendar.min%10+ 0';
time[17]=calendar.sec/10+0;
time[18]=calendar.sec%10+0';
DrawZf_N(xO,yO,color,backcolor,time);
2.3按鍵模塊設計
按鍵模塊主要用于修改時間。根據按鍵電路圖圖2所示,對按鍵進行初始化時,WK_UP按鍵作為選擇鍵,工作方式設為下拉輸入模式,KEYO和KEY1按鍵作為時間設置按鍵,工作方式設為上拉輸入模式。當WK_UP按鍵按下,對應的外部中斷發生,設變量Key_State作為選擇標記量,按鍵每按一次,變量Key_State加1,變量Key_State為1時,表示選擇倒計時模塊;變量Key_State為2時,選擇分鐘;變量Key_State為3時,選擇小時;變量Key_State為4時,選擇日期;變量Key_State為5時,選擇月份;變量Key_State為6時,選擇年份。KEYO和KEY1按鍵分別用于對選擇的時間作“ + ”\"-”。按鍵修改時間的程序流程圖如圖4所示。

3基于STM32的時鐘的實現
3.1 初始界面
初始界面包含數字鐘、倒計時模塊。如圖5所示,LCD屏上方顯示的是時間,包含了年月日、時分秒、星期,LCD屏下方顯示的是倒計時功能部分。
3.2 倒計時時間設置
按下功能選擇鍵WK_UP第1次,進入倒計時功能選擇界面,倒計時初始時間為 10s ,如圖6所示。當倒計時時間字體變為帶背景色的紅色字體時,按下KEYO按鍵對倒計時時間 +1 ,按下KEY1按鍵對倒計時時間-1,如圖7所示,倒數計時修改后為 12s 。
3.3 時間設置
功能選擇界面,如圖8所示。當倒計時時間字體變為帶背景色的紅色字體時,按下KEYO按鍵對分鐘 +1 按下KEY1按鍵對分鐘-1,如圖9所示,分鐘由15修改為 10
按下功能選擇鍵WK_UP第2次,進入分鐘時間計時結束,屏幕上顯示“GO!”,倒計時模塊停止工作,如圖17所示。







同理,按下功能選擇鍵WK_UP第3次,進入小時時間功能選擇界面,如圖10所示。對小時時間進行調整,調整后的界面如圖11所示,時鐘由10修改為12。




圖14年份設置
圖16倒計時開始

圖11 時鐘修改后界面
圖17倒計時結束

繼續按下功能選擇鍵WK_UP,分別進入日期、月份、年份功能選擇界面,如圖12、13、14所示。圖15為年份設置后的效果界面。
3.4倒計時模塊的實現
最后一次按下功能選擇鍵WK_UP,時間設置完成,時間模塊正常運行,同時,倒計時開始,如圖16所示,屏幕上會顯示“Ready”。當倒計時時間為0時,倒
4結束語
本文是基于STM32的具備倒計時功能的數字鐘的設計與實現,介紹了RTC模塊、LCD模塊、按鍵模塊和定時器的工作原理,以及時間計時、時間顯示和按鍵調時的程序設計思路。實現了顯示時間,包括年月日和時分秒的功能,同時具備倒計時功能,能夠通過按鍵修改時間和倒計時的功能,且系統穩定,從實驗結果看出效果較好,方案具有一定實用性。
(下轉149頁)