2、按下按鍵S1控制LED1.LED2.LED3實現跑馬燈效果(CC2540開發寄存器設置)


 

按下按鍵S1控制LED1.LED2.LED3實現跑馬燈效果

  1 /****************************************************************************
  2 * 文 件 名: main.c
  3 * 作    者: Amo [ www.amoMcu.com 阿莫單片機]
  4 * 修    訂: 2014-04-08
  5 * 版    本: 1.0
  6 * 描    述: 按下按鍵S1控制LED1.LED2.LED3實現跑馬燈效果
  7 ****************************************************************************/
  8 #include <ioCC2540.h>
  9 
 10 typedef unsigned char uchar;
 11 typedef unsigned int  uint;
 12 
 13 #define LED1 P1_0        // 定義P1.0口為LED1控制端
 14 #define LED2 P1_1        // 定義P1.1口為LED2控制端
 15 #define LED3 P1_4        // 定義P1.4口為LED3控制端
 16 #define KEY1 P0_1        // 定義P0.1口為S1控制端
 17 #define ON      1
 18 #define OFF     0
 19 
 20 /****************************************************************************
 21 * 名    稱: DelayMS()
 22 * 功    能: 以毫秒為單位延時,系統時鍾不配置時默認為16M(用示波器測量相當精確)
 23 * 入口參數: msec 延時參數,值越大,延時越久
 24 * 出口參數: 無
 25 ****************************************************************************/
 26 void DelayMS(uint msec)
 27 { 
 28     uint i,j;
 29     
 30     for (i=0; i<msec; i++)
 31         for (j=0; j<535; j++);
 32 }
 33 
 34 /****************************************************************************
 35 * 名    稱: LedOnOrOff()
 36 * 功    能: 點亮或熄滅所有LED燈    
 37 * 入口參數: mode為1時LED燈亮  mode為0時LED燈滅
 38 * 出口參數: 無
 39 ****************************************************************************/
 40 void LedOnOrOff(uchar mode)
 41 {
 42     LED1 = mode;
 43     LED2 = mode;
 44     LED3 = mode; 
 45 }
 46 
 47 /****************************************************************************  48 * 名 稱: InitLed()  49 * 功 能: 設置LED相應的IO口  50 * 入口參數: 無  51 * 出口參數: 無  52 ****************************************************************************/
 53 void InitLed(void)  54 {  55     P1DIR |= 0x13;  // P1.0、P1.1、P1.4定義為輸出
 56     LedOnOrOff(0);  // 使所有LED燈默認為熄滅狀態 
 57 }  58 
 59 /****************************************************************************  60 * 名 稱: InitKey()  61 * 功 能: 設置按鍵相應的IO口  62 * 入口參數: 無  63 * 出口參數: 無  64 ****************************************************************************/
 65 void InitKey(void)  66 {  67     P0SEL &= ~0x02;     //設置P0.1為普通IO口 
 68     P0DIR &= ~0x02;     //按鍵接在P0.1口上,設P0.1為輸入模式 
 69     P0INP &= ~0x02;     //打開P0.1上拉電阻
 70 }  71 
 72 /****************************************************************************
 73 * 名    稱: KeyScan()
 74 * 功    能: 讀取按鍵狀態
 75 * 入口參數: 無
 76 * 出口參數: 0為抬起   1為按鍵按下
 77 ****************************************************************************/
 78 uchar KeyScan(void)
 79 {
 80     if (KEY1 == 0)
 81     {
 82         DelayMS(10);      //延時10MS去抖
 83         if (KEY1 == 0)
 84         {
 85             while(!KEY1); //松手檢測
 86             return 1;     //有按鍵按下
 87         }
 88     }
 89     
 90     return 0;             //無按鍵按下
 91 }
 92 
 93 /****************************************************************************
 94 * 程序入口函數
 95 ****************************************************************************/
 96 void main(void)
 97 {
 98     InitLed();              //設置LED燈相應的IO口
 99     InitKey();            //設置按鍵S1相應的IO口
100     
101     while(1)
102     {
103         DelayMS(2);
104         if (KeyScan())    //掃描按鍵當前狀態,按下時執行跑馬燈效果
105         {
106             LED1 = ON;    //點亮LED1      
107             DelayMS(500); 
108             LED1 = OFF;   //熄滅LED1 
109             LED2 = ON;                
110             DelayMS(500); 
111             LED2 = OFF;            
112             LED3 = ON;           
113             DelayMS(500); 
114             LED3 = OFF; 
115         }
116     }
117 }

這里的引腳使用要經過配置,這是和51不同之處,這個和寄存器有關!!!

一個端口對應幾個寄存器來對其屬性進行說明:

按照表格寄存器的內容, 對 P1.0、 P1.1 、 P1.4 進行配置, 當 IO 口輸出高電平時 Led 被點亮。
所以配置如下:

P1SEL &=~0x13; //配置 P1.0、 P1.1 、 P1.4 為通用 IO 口
P1DIR |= 0x13; //配置 P1.0、 P1.1 、 P1.4 為輸出

由於 CC2540 寄存器初始化時默認值為(詳細說明請參考 CC2530 數據手冊(中文) .pdf,適用於 CC2540 和 CC2541 ):

P1SEL = 0x00;
P1DIR |= 0xff;
P1INP = 0x00;

所以 IO 口配置可簡化為:

 53 void InitLed(void) 54 { 55 P1DIR |= 0x13; // P1.0、P1.1、P1.4定義為輸出 56 LedOnOrOff(0); // 使所有LED燈默認為熄滅狀態 57 }

P0.1 要設成輸入:

 65 void InitKey(void) 66 { 67 P0SEL &= ~0x02; //設置P0.1為普通IO口 68 P0DIR &= ~0x02; //按鍵接在P0.1口上,設P0.1為輸入模式 69 P0INP &= ~0x02; //打開P0.1上拉電阻 70 }

資料:http://pan.baidu.com/s/1z503W

 


免責聲明!

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



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