|
- #include <REGX52.H>
- #include <INTRINS.H>
- #define LED_COUNT 8
- #define BUTTON_DEBOUNCE_DELAY 20
- #define BUTTON_LONG_PRESS_DELAY 500 // 長按延遲
- // 延時(shí)函數(shù)
- void Delay(unsigned int xms) {
- unsigned char i, j;
- while (xms) {
- i = 2;
- j = 239;
- do {
- while (--j);
- } while (--i);
- xms--;
- }
- }
- // 檢測按鈕按下并進(jìn)行防抖
- bit IsButtonPressed(unsigned char buttonPin) {
- if (buttonPin == 0) { // 按鈕被按下
- Delay(BUTTON_DEBOUNCE_DELAY); // 消抖延遲
- if (buttonPin == 0) { // 再次確認(rèn)按下
- return 1; // 按鍵有效
- }
- }
- return 0; // 按鍵無效
- }
- void main() {
- unsigned char LEDNum = 0;
- bit isRunning = 0; // 狀態(tài)標(biāo)志,表示是否正在流水
- while (1) {
- // 檢測按鈕 K1 (P3_1)
- if (IsButtonPressed(P3_1) && !isRunning) {
- isRunning = 1; // 設(shè)置狀態(tài)為正在流水
- // 從左向右流水
- for (LEDNum = 0; LEDNum < LED_COUNT; LEDNum++) {
- P2 = ~(0x01 << LEDNum); // 點(diǎn)亮對(duì)應(yīng)的LED
- Delay(200); // 控制流水速度
- }
- isRunning = 0; // 流水結(jié)束,重置狀態(tài)
- }
- // 檢測按鈕 K2 (P3_0)
- if (IsButtonPressed(P3_0) && !isRunning) {
- isRunning = 1; // 設(shè)置狀態(tài)為正在流水
- // 從右向左流水
- for (LEDNum = LED_COUNT - 1; LEDNum < LED_COUNT; LEDNum--) {
- P2 = ~(0x01 << LEDNum); // 點(diǎn)亮對(duì)應(yīng)的LED
- Delay(200); // 控制流水速度
- if (LEDNum == 0) break; // 防止越界
- }
- isRunning = 0; // 流水結(jié)束,重置狀態(tài)
- }
- }
- }
復(fù)制代碼 |
|