一個利用12864來顯示時間,可以自己設定時間日期星期
YY_STM32---萬年歷--程序說明
這個程序只是我花了七多個小時寫一個萬年歷,所以難以避免其中BUG很多。所以我也非常希望各位多提意見。讓我得已進步。。。下面我把程序運行的實現以及一些處理簡易的敘述一下。方便大家理解程序。
定時單元:使用TIM3定時器,向上技術模式。計數5000次即500MS.通過一個全局變量作為分頻后得到一秒的定時中斷。
顯示單元:采用LCD12864點陣顯示,這種屏幕刷新速度慢,拖影嚴重,唯一的好處就是操作簡單,成本低廉。這個實例采用了串口的方式實現顯示,接口定義為:PB7—RST///PSB—PA4(其實這個可以不接)//EN—PA2//RW—PA6,其他的電源線大家就自己找地方了。這個接口也可以通過程序中的KEY.C文件中修改,但是大家更改接口后記得打開時鐘。
運行載體:YY_STM32,就是本次大家一起焊接的板。這個程序也是相當于一個測試開發板的吧。
調節時間方法:本身是想用三個外部中斷來控制的,但是PA0的外部接法讓我迷惑了下,,所以見采用隔時采集SET(K2)按鍵的輸入電平來檢測是否按鍵。時間調節的方式:首先按下K2(確認鍵),然后開始調節年份,左邊的K1是上調功能,右邊的K3是下調功能,年份調節的范圍是1000~9000年,年份調節好了之后然后再按下確認鍵,進入月份調節,然后在調節日期,這個程序有自動識別閏年和平年的功能,調節月份之后,日期會根據月份確定天數。然后調節星期,這里我沒有寫成中文的顯示,原因就是。。。。懶的寫。其實有興趣的在外面加一個開關語句就可以實現了。星期調節之后就是調節小時和分鐘。在調節分鐘時,秒鐘會自動清零。方便調節。分鐘調節完后再按下確認鍵(K2),就退出了調節模式。進入自動走時的功能。
倒計時:大家會注意到在第三排左邊,有一個倒計,這是根據一天剩余的時間計算出來的剩余秒數。就是嚇唬嚇唬浪費時間的哥們,我是看著這個倒計時心痛時間了。。。當然,這個調節時間會在調節時間后自動計算。而不是單純性的i—的單目操作。
LED燈:這個程序在運行時,LED1和LED2會交替閃爍,這樣可以我們觀察程序是否在運行。這個燈交替的頻率是1HZ。但這是理論頻率。我這公司的示波器之爛,測量頻率沒有一次準確過。。
建議:我在寫這個的時候,12864的字符位置有點小麻煩,我這里也建議大家多多使用仿真器(我沒打廣告),這樣在程序卡住的時候可以硬件仿真實時調整,非常方便。相比串口下載,,,Jlink可算非常有能耐了。。
然后,,,然后其實這個程序非常簡單的了。我也花了半個小時寫了相比而言比較明白的注釋。因為這是第二次寫STM32的程序,所以如果有誰看不懂的,我想應該是我沒有寫的淺顯易懂了。。所以可以找我給你解釋一下。我也想多多給我找問題然后,,,然后大家自己看程序說話吧。。同時由于看視頻容易睡覺,,,關于第一課的要求有些不是太清楚,周末找時間看。這里先把萬年歷交出來,然后再看其他的作業。。。
-------這個論壇允許上傳的圖片只有20M,我只能選幾張相比這下清楚的照片給大家看一看。。
@易文_工_四川
單片機源程序如下:
- /********************************************************************
- * 文件名 : 通過YY_STM32在12864上顯示萬年歷
- * 描述 : 年份范圍1000~9999年,可以判斷閏年。
- * 創建人 : @易文_工_四川
- zhouyibin0718@163.com
- * 版本號 : 2015-01-28
- ***********************************************************************/
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "12864.h"
- #include "timer.h"
- u8 seconds=00;//秒鐘
- u8 minute=45;//分鐘
- u8 hours=16;//小時
- u8 day=28;//日
- u8 month=1;//月
- u32 years=2015;//年
- u8 week=3;//星期
- u8 num;//用于定時器分頻處理
- u8 set;//確定鍵
- u8 up;//上調鍵
- u8 down;//下調鍵
- u32 count;//倒計時,倒計起來。。。嚇死人。
- int main(void)
- {
- delay_init();
- NVIC_Configuration();
- KEY_Init();
- GPIO_ResetBits(GPIOA,GPIO_Pin_4); //用于確定12864工作方式
- delay_ms(10);
- lcdinit(); //LCD初始化
- delay_ms(1);
- TIM3_Int_Init(4999,7199); //10Khz的計數頻率,計數到5000為500ms
- L12864_string(1,0," YY_STM32 萬年歷");
- L12864_string(2,0," 年 月 日 ");
- L12864_string(3,0,"星期 倒計 ");
- L12864_string(4,0," 時 分 秒 ");
- while(1)
- {
- timerinit();//單天內時間計算程序
- dayinit();//年月日計算程序
- delay_ms(20);
- disp();//顯示刷新時間
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
YY_STM32.rar
(2.85 MB, 下載次數: 185)
2017-6-21 02:27 上傳
點擊文件名下載附件
12864萬年歷
YY-STM32 V1.3原理圖.pdf
(848.46 KB, 下載次數: 99)
2017-6-21 02:25 上傳
點擊文件名下載附件
|