? ? STM32萬年歷制作指南
一、概述
STM32是一種常用的微控制器,具有強大的處理能力和低功耗特性,非常適合用于制作各種電子設備。本文將介紹如何使用STM32制作一款簡易的萬年歷,幫助您輕松查看日期、時間和農歷等信息。
二、所需材料
1. STM32微控制器(建議使用STM32F103C8型號)
2. 液晶顯示屏(LCD或OLED)
3. 按鍵或觸摸屏
4. 農歷數(shù)據(jù)(可通過網(wǎng)絡下載或購買已編譯好的數(shù)據(jù)文件)
5. 杜邦線、螺絲刀等必備工具
三、制作步驟
1. 連接硬件:將STM32微控制器與液晶顯示屏通過杜邦線連接,按鍵或觸摸屏接入STM32的GPIO口。
2. 編寫程序:編寫STM32程序,實現(xiàn)讀取農歷數(shù)據(jù)、顯示日期、時間、星期幾和節(jié)氣等信息。程序應包括中斷服務程序,用于處理按鍵或觸摸屏輸入。
1)代碼
int main() { delay_init(); //延時函數(shù)初始化 NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級 LED_Init(); //LED端口初始化 OLED_Init(); //初始化OLED OLED_Clear() ; USART_Config(); Key_GPIO_Config(); /* 配置RTC秒中斷優(yōu)先級 */ RTC_NVIC_Config(); RTC_CheckAndConfig(&systmtime); while (1) { /* 每過1s 更新一次時間*/ if (TimeDisplay == 1) { /* 當前時間 */ Time_Display( RTC_GetCounter(),&systmtime); TimeDisplay = 0; } //按下按鍵,通過串口修改時間 if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON ) { struct rtc_time set_time; /*使用串口接收設置的時間,輸入數(shù)字時注意末尾要加回車*/ Time_Regulate_Get(&set_time); /*用接收到的時間設置RTC*/ Time_Adjust(&set_time); //向備份寄存器寫入標志 BKP_WriteBackupRegister(RTC_BKP_DRX, RTC_BKP_DATA); } } }
主函數(shù)就這么多,比較簡單,就是初始化了一下OLED,配置了一下RTC,這些代碼都比較好找到,下面來看看Time_display的具體代碼:
/* * 函數(shù)名:Time_Display * 描述 :顯示當前時間值 * 輸入 :-TimeVar RTC計數(shù)值,單位為 s * 輸出 :無 * 調用 :內部調用 */ void Time_Display(uint32_t TimeVar,struct rtc_time *tm) { static uint32_t FirstDisplay = 1; uint32_t BJ_TimeVar; uint8_t str[200]; // 字符串暫存 /* 把標準時間轉換為北京時間*/ BJ_TimeVar =TimeVar + TIME_ZOOM; to_tm(BJ_TimeVar, tm);/*把定時器的值轉換為北京時間*/ if((!tm->tm_hour && !tm->tm_min && !tm->tm_sec) || (FirstDisplay)) { GetChinaCalendar((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str); printf("\r\n 今天新歷:%0.2d%0.2d,%0.2d,%0.2d", str[0], str[1], str[2], str[3]); OLED_ShowString(1,0,"RTC",16); OLED_ShowCHinese(28,0,0);//景 OLED_ShowCHinese(46,0,1);//園 OLED_ShowCHinese(64,0,2);//電 OLED_ShowCHinese(82,0,3);//子 OLED_ShowString(1,2,"Design by ZF",16); // OLED_ShowCHinese(88,0,5);//科 // OLED_ShowCHinese(104,0,6);//技 GetChinaCalendarStr((u16)tm->tm_year,(u8)tm->tm_mon,(u8)tm->tm_mday,str); printf("\r\n 今天農歷:%s\r\n", str); if(GetJieQiStr((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str)) printf("\r\n 今天農歷:%s\r\n", str); FirstDisplay = 0; } /* 輸出時間戳,公歷時間 */ printf(" UNIX時間戳 = %d 當前時間為: %d年(%s年) %d月 %d日 (星期%s) %0.2d:%0.2d:%0.2d\r",TimeVar, tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday, WEEK_STR[tm->tm_wday], tm->tm_hour, tm->tm_min, tm->tm_sec); OLED_ShowNum(0,4,tm->tm_year,4,16); OLED_ShowCHinese(33,4,4);//電 OLED_ShowNum(51,4,tm->tm_mon,2,16); OLED_ShowCHinese(69,4,5);//電 OLED_ShowNum(87,4,tm->tm_mday,2,16); OLED_ShowCHinese(105,4,6);//電 OLED_ShowNum(0,6,tm->tm_hour,2,16); OLED_ShowString(18,6,":",16); OLED_ShowNum(37,6,tm->tm_min,2,16); OLED_ShowString(55,6,":",16); OLED_ShowNum(74,6,tm->tm_sec,2,16); }
3. 調試與優(yōu)化:進行程序調試和優(yōu)化,確保萬年歷能夠正確顯示信息。
4. 連接電源:為STM32和液晶顯示屏等硬件連接電源。
5. 包裝測試:完成以上步驟后,對萬年歷進行包裝,并進行測試,確保其正常運行。
四、注意事項
1. 在下載農歷數(shù)據(jù)時,請確保數(shù)據(jù)來源可靠,以免中毒或使用盜版數(shù)據(jù)。
2. 在連接液晶顯示屏時,請務必使用絕緣膠帶固定線纜,以防短路。
3. 在調試和優(yōu)化程序時,請備份原始程序,以防意外丟失數(shù)據(jù)。
五、功能擴展
1. 添加時間提醒功能:可設置鬧鐘,在特定日期或節(jié)氣前提醒用戶。
2. 顯示更多信息:如公歷閏年、農歷閏月、節(jié)氣名稱等。
3. 藍牙或WiFi通信:可通過藍牙或WiFi從互聯(lián)網(wǎng)獲取最新農歷數(shù)據(jù),實現(xiàn)實時更新。文章來源:http://www.zghlxwxcb.cn/news/detail-768972.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-768972.html
到了這里,關于STM32制作萬年歷的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!