1、設計要求
基于小腳丫FPGA開發(fā)板和四位數碼管實現數字時鐘的設計,要求:
1)采用FPGA+按鍵+四位數碼管實現數字時鐘功能;
2)時間顯示格式:XX:XX:XX (時:分:秒),采用24小時制;
3)四位數碼管顯示時分秒,可以通過按鍵控制選擇顯示時分界面還是分秒界面。
4)通過按鍵設定初始時間。
5)設置在整點12點時,通過蜂鳴器響示意整點報時。蜂鳴器響維持大概5S;
2、硬件連接
FPGA的系統時鐘來自于小腳丫FPGA開發(fā)板配置的24MHz時鐘晶振,連接FPGA的C1引腳。
本設計用到五個個按鍵K1~K5,硬件設計如圖1所示,五個按鍵分別連接到FPGA的B8、C8、A10、A11和A12引腳。
圖1. 按鍵硬件設計
本設計用到一個蜂鳴器來示意整點報時,硬件設計如圖1所示,蜂鳴器連接到FPGA的B2引腳。
圖2. 蜂鳴器硬件設計
本設計用到四位數碼管來顯示時間,四位數碼管用兩個74HC595驅動,硬件設計如圖1所示,74HC595的串行時鐘SCK、并行時鐘RCK和串行數據DIN分別連接到FPGA的N2、M1和K1引腳上。
圖3. 數碼管驅動74HC595硬件設計
3、工作原理
2)使用三個8bit的BCD碼表示時鐘、分鐘、秒鐘的值,其中高4bit表示值的十位,低4bit表示值的個位;
3)正常運行時,每來一個1S脈沖信號個位加1,個位滿10清零同時十位加1,當秒鐘滿60清零同時分鐘個位加1,依次進行...直到23:59:59的下一刻全部清零;
4)按鍵K5,模式調節(jié),設計共分4中模式(分秒顯示、分秒調節(jié)、時分顯示、時分調節(jié)),按動K5依次切換模式;
5)按鍵K2,時間調節(jié),當數字時鐘在時針調節(jié)、分針調節(jié)或秒針調節(jié)模式時,按動K2調節(jié)對應時間位;
6)在調時分和調分秒兩個狀態(tài),可以通過K4和K2鍵分別左移右移要調整的位,要調整的位會通過對應位的閃爍來示意。通過K4和 K2左右移動選擇好要調整的位以后,就可以通過K1和K3來增大或調小對應的位;
4、代碼設計
為了實現所需要的功能,我們將整個設計劃分不同的模塊,如圖4所示。
圖4. 數字時鐘程序設計框架
4.1 五位按鍵消抖模塊
圖5. 五位按鍵消抖模塊
- ?輸入:五位的按鍵電平信息輸入
- ?輸出:五位消抖后的脈沖輸出
- ?功能:將按鍵按下一次的電平信號,經過消抖后變成一個維持一個時鐘周期的脈沖信號;
- ?原理:
圖6. 按鍵抖動特性
FPGA過20ms檢測按鍵是否按下,存儲檢測到的值,并且按位取反與前一個20ms檢測的值相與,得到一個值,如果為1,則判斷按鍵按下,否則則無按下。
圖7. FPGA按鍵的理解示意圖
4.2 電子表顯示控制模塊。
圖8. 電子表顯示控制模塊
- ?輸入:五位的按鍵脈沖
- ?輸出:十六位的BCD碼輸出,每四個代表一個十進制數;
- ?原理:四位的位閃爍控制信號。某一位為一代表這位對應的數碼管的一位進行閃爍顯示。(在調整狀態(tài)下,會讓當前調整的哪一位進行閃爍。正常顯示狀態(tài)下seg_flash_data全為零);
- ?功能:主要就是一個狀態(tài)機,通過檢查輸入的按鍵信息,進行顯示狀態(tài)切換,時間調整。四個狀態(tài)分別為:顯示分秒,調分秒,時分顯示,調時分;當K5按鍵按下(key_pulse[4])時依次跳轉,如圖9所示。
圖 9. 數字時鐘狀態(tài)控制設計
4.3 數碼管譯碼模塊
圖10. 數碼管譯碼模塊
- ?輸入:四位的BCD碼數據
- ?輸出:八位的七段數碼數據
- ?功能:一個case語句,將輸入的四位BCD碼轉化為七段數碼數據;
- ?原理:數碼管分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽極(COM)需接+5V才能使其工作。共陰數碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數碼,共陰極(COM)需接GND才能使其工作。小腳丫拓展板上的數碼管如下圖所示:
圖11. 數碼管內部電路
共陰極數碼管:
位選為低電平(即0)選中數碼管;各段選為高電平(即接+5V時)選中各數碼段;由0到f的編碼為:
4.4 四位數碼管顯示控制模塊。
圖12. 數碼管顯示控制模塊
- ?輸入:四個八位的七段數碼管數據和位閃爍控制信號seg_flash_data.
- ?輸出:需要串行輸出給74HC595的十六位數據;
- ?功能:模塊就是循環(huán)的將四位七段數碼數據,組合一個十六位的輸出數據;
4.5 74HC595驅動功能模塊
圖13. 74HC595驅動功能模塊
- ?輸入:十六位的位選段選數據。
- 1)duan_wei_data[13:0]分別對應:
- 2)[ X,X,H+,H-,DIG4,DIG3,DIG2,DIG1,DP,G,F,E,D,C,B,A] ;
- ?輸出:SPI接口輸出,串行輸出十六位位選段選信號;
- ?功能:將輸入的并行的十六位的位選段選數據通過SPI接口轉化為串行輸出;
- ?原理:詳見Text8.數碼管顯示及74HC595芯片資料
5、系統運行
圖14. 系統運行
視頻地址:
https://v.youku.com/v_show/id_XMTM5MDE4OTE2MA==.html?from=s1.8-1-1.2
6、資源報告
資源 | 數量 | 比例 | 說明 |
LUTs | 244 | 38% | |
寄存器 | 203 | 13% | |
存儲器 | 0 | 0% | |
IO管腳 | 11 | ||
時鐘頻率 | 25MHz |
7、知識點
?時鐘計數分頻?按鍵消抖處理
?功能建模
?波形仿真
?SPI時序實現
?74HC575數碼管驅動原理
8、參考文檔
Lattice MachXO2數據手冊
9、相關文件
文件名稱 | 功能 |
Watch_system | 頂層模塊,將所有功能模塊接口連接起來 |
Clock_control_module | 實現數字鐘的計時,調整,整點報時功能 |
Key_jitter | 實現按鍵消抖 |
Smg_encoder_module | 實現BCD碼到數碼管段碼的轉換 |
Seg595_control_module | 循環(huán)送出每位數碼管段位數據 |
Seg595_function_module | 實現SPI時序,十六位的段位數據串行移入74HC595 |