- 最後登錄
- 2023-11-3
- 在線時間
- 0 小時
- 註冊時間
- 2008-1-31
- 閱讀權限
- 95
- 精華
- 0
- UID
- 3399704
- 帖子
- 69
- 積分
- 1499 點
- 潛水值
- 45418 米
| 如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。 本帖最後由 pop90231 於 2013-5-16 02:06 PM 編輯
- /* ch04-3-4.c -按鈕閞關應用(兩按鈕控制七段顯示器上下數) - P4-21 */
- //==宣告區==========================================
- #include <reg51.h> // 定義8051暫存器之標頭檔,P2-17~19
- #define SEG P0 // 定義七節顯示器接至Port 0
- /* 宣告七節顯示器驅動信號陣列(共陽) */
- char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 數字0-4
- 0x92, 0x83, 0xf8, 0x80, 0x98 }; // 數字5-9
- sbit PB1=P2^0; // 宣告按鈕1接至P2.0
- sbit PB2=P2^1; // 宣告按鈕2接至P2.1
- void debouncer(void); // 宣告防彈跳函數
- //==主程式=================================
- main() // 主程式開始
- { unsigned char i=0; // 宣告變數i初值=0
- PB1=PB2=1; // 規劃輸入埠
- SEG=TAB[i]; // 輸出數字至七段顯示器
- while(1) // 無窮迴圈,程式一直跑
- { if (PB1==0) // 判斷PB1是否按下
- { debouncer();// 呼叫防彈跳函數
- i= (i<9)? i+1:0;// 若i<9則i=i+1,若i>=9清除為0
- SEG=TAB[i]; // 輸出數字至七段顯示器
- while(PB1==0); // PB1是否按住?
- debouncer(); // 呼叫防彈跳函數
- } // if敘述結束
- if (PB2==0) // 判斷PB2是否按下
- { debouncer();// 呼叫防彈跳函數
- i= (i>0)? i-1:9;// 若i>0則i=i-1,i<=0重設為9
- SEG=TAB[i]; // 輸出數字至七段顯示器
- while(PB2==0); // PB1是否按住?
- debouncer(); // 呼叫防彈跳函數
- } // if敘述結束
- } // while迴圈結束
- } // 主程式結束
- //==副程式==================================
- /* 防彈跳函數函數,延遲約20ms */
- void debouncer(void) // 防彈跳函數開始
- { int i; // 宣告整數變數i
- for(i=0;i<2400;i++); // 計數2400次,延遲約20ms
- } // 防彈跳函數結束
複製代碼
... |
|