CC2530應用——按鍵控制燈光狀態變化


獨立新建工程並編寫、編譯代碼,實現按鍵控制燈光閃爍狀態的變換,實現以下任務要求:
【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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM