- 單片機C語言程序設計實訓100例
- 彭偉編著
- 484字
- 2018-12-27 05:12:04
3.9 數碼管閃爍顯示
本例電路與前一案例相同,程序稍有差異,形成了顯示內容的閃爍效果,即所有字符同時顯示,同時關閉,如此循環。
程序設計調試與實訓:
上一案例中對數碼管的循環選通采用了循環左移函數,本例中則專門提供了位選通的索引數組DSY_IDX(位碼表),每字節展開為二進制數時,其中僅有一位為1,這表示每次只有一只數碼管被選通。這樣設計雖然占用了更多的空間,但每次輸出位碼時不需要再執行移位運算。
完成本例學習與調試后,讀者可修改代碼,在數碼管上閃爍顯示由3~5個數字構成的數字串。
源程序代碼:
//----------------------------------------------------------------- // 名稱: 8只數碼管閃爍顯示數字串 //----------------------------------------------------------------- // 說明: 數碼管閃爍顯示由0~7構成的一串數字。 // 本例用動態刷新法顯示了一串數字,在停止刷新時所有數字顯示消失。 //----------------------------------------------------------------- #include <reg51.h> #define uchar unsigned char #define uint unsigned int //數字0~9的數碼管段碼表 uchar code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //數碼管的選通索引表(位碼表) uchar data DSY_IDX [] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //----------------------------------------------------------------- // 延時 //----------------------------------------------------------------- void DelayMS(uint x) { uchar i; while(x--) for(i = 0; i < 120; i++); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { uchar i,j; P0 = 0xFF; P2 = 0x00; while(1) { //動態掃描顯示,刷新30次,實際上實現了8只數碼管的保持顯示延時 for(i = 0; i < 30; i++) { for(j = 0; j < 8; j++) { P2 = DSY_IDX [j]; P0 = DSY_CODE[j]; DelayMS(2); } } P2 = 0x00; //所有數碼管共陽極與+5V斷開 DelayMS(1000); //關閉持續一段時間 } }
推薦閱讀
- R語言經典實例(原書第2版)
- Mastering Ubuntu Server
- 征服RIA
- 教孩子學編程:C++入門圖解
- Java:High-Performance Apps with Java 9
- C程序設計實踐教程
- 運用后端技術處理業務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- PHP+MySQL+Dreamweaver動態網站開發從入門到精通(第3版)
- ServiceNow:Building Powerful Workflows
- 區塊鏈技術進階與實戰(第2版)
- Kubernetes源碼剖析
- Microsoft 365 Certified Fundamentals MS-900 Exam Guide
- Mastering Elixir
- Python Web自動化測試設計與實現
- Puppet 5 Beginner's Guide(Third Edition)