獨立新建工程並編寫、編譯代碼,實現按鍵控制燈光閃爍狀態的變換,實現以下任務要求:
【1】程序開始運行:D4燈閃爍,D3、D5、D6燈熄滅。
【2】按下模塊上的SW1按鍵松開后,實現D5、D6燈輪流閃爍。
【3】再次按下SW1按鍵,D5、D6燈滅。
【4】重復上述兩個步驟。
此題需要定義一個燈光狀態的標志位。通過按鍵的標志位有三個狀態。
狀態1:D4燈閃爍,D3、D5、D6燈熄滅。
狀態2:D5、D6燈輪流閃爍。
狀態3:D5、D6燈滅。

1 #include "ioCC2530.h" 2 3 #define D3 P1_0 4 #define D4 P1_1 5 #define D5 P1_3 6 #define D6 P1_4 7 #define SW1 P1_2 8 9 unsigned char stat = 0; //燈光狀態標志 10 11 /*=======================簡單的延時函數========================*/ 12 void Delay(unsigned int t) 13 { 14 while(t--); 15 } 16 /*=======================端口初始化函數========================*/ 17 void Init_Port() 18 { 19 P1SEL &= ~0x1b; //將P1_0,P1_1,P1_3,P1_4設置為通用I/O端口 20 P1DIR |= 0x1b; //將P1_0,P1_1,P1_3,P1_4設置為輸出方向 21 P1 &= ~0x1b; //關閉4個LED燈 22 23 P1SEL &= ~0x04; //將P1_2設置為通用I/O端口 24 P1DIR &= ~0x04; //將P1_2設置為輸入方向 25 P1INP &= ~0x04; //將P1_2設置為上拉/下拉 26 P2INP &= ~0x40; //將P1_2設置為上拉 27 } 28 29 /*=====================D4燈閃爍函數======================*/ 30 void D4_Flicker() 31 { 32 D4 = 1; 33 Delay(60000); 34 D4 = 0; 35 Delay(60000); 36 } 37 38 /*=====================D5D6燈閃爍函數======================*/ 39 void D5D6_Flicker() 40 { 41 D3 = 0; 42 D4 = 0; 43 D5 = 1; 44 Delay(60000); 45 D5 = 0; 46 Delay(60000); 47 D6 = 1; 48 Delay(60000); 49 D6 = 0; 50 Delay(60000); 51 } 52 53 /*=======================按鍵掃描函數=========================*/ 54 void Scan_Keys() 55 { 56 if(SW1 == 0) //發現有SW1按鍵信號 57 { 58 Delay(100); //延時片刻,去抖動處理 59 if(SW1 == 0) //確認為SW1按鍵信號 60 { 61 if(stat == 0) 62 { 63 stat = 1; 64 } 65 else if(stat == 1) //重復 66 { 67 stat = 2; 68 } 69 else if(stat == 2) 70 { 71 stat = 1; 72 } 73 74 } 75 } 76 } 77 78 /*==========================主函數============================*/ 79 void main() 80 { 81 Init_Port(); //端口初始化 82 while(1) 83 { 84 Scan_Keys(); //按鍵掃描 85 switch(stat) 86 { 87 case 0: //上電狀態,D4閃爍 88 D4_Flicker(); 89 break; 90 case 1: //運行狀態1:D5和D6閃爍 91 D5D6_Flicker(); 92 break; 93 case 2: //運行狀態2:D5和D6熄滅 94 D5 = 0; 95 D6 = 0; 96 break; 97 } 98 } 99 }