cc2530的第二次實驗,用按鍵控制流水燈


按鍵控制流水燈

具體想要實現按一下按鍵,然后單片機的三個燈會以流水燈的形式都亮一遍

實驗相關寄存器

實驗相關寄存器

實驗相關電路

實驗相關電路圖

宏定義

#define uint unsigned int
#define uchar unsigned char
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P0_4
#define KEY1 P0_1

初始化步驟

graph TD id1[設置P0_1 P1_0 P1_1 P0_4為通用接口] id2[設置P0_1為輸入接口 P1_0 P1_1 P0_4為輸出接口] id3[設置P0_1為上拉下拉電路 也就是設置P0INP] id1-->id2-->id3

初始化代碼

void InitIO(void) 
{ 
     
    //設置P0_1,P1_0,P1_1,P0_4,為通用接口
    P0SEL&=~0x11;         //P0SEL:1110 1110 
    P1SEL&=~0x03;         //P1SEL:1111 1100
    //設置P0_1為輸入接口     
    P0DIR&=~0x02;            //P0DIR:1111 1101

    //設置P1_0,P1_1,P0_4為輸出接口
    P1DIR|=0x03;           //P1DIR=0000 0011
    P0DIR|=0x10;           //P0SEL=0001 0000
    
    //讓三個燈先滅
    LED1=1;
    LED1=1;
    LED1=1;

}

main函數中的步驟

graph TD id1[初始化 InitIO] id2{是否被按下KeyScan} id3[三個燈以流水的方式亮WaterLight] id1-->id2 id2--按下-->id3 id2--沒按下-->id2 id3-->id2

KeyScan()函數用來檢測按鍵是否被按下

//檢測按鍵是否被按下,如果被按下返回true,如果沒被按下,返回false
uint KeyScan()
{
     if(KEY1==0)
     {
       while(KEY1==0);          //直到按鍵被松開
          return 1;      
      
     }
     
     return 0;

}


WaterLight()函數用實現

//讓三個燈以流水燈的方式亮一次
void WaterLight()
{
    LED1=!LED1;
    Delay(10000);
    LED2=!LED2;
    Delay(10000);
    LED3=!LED3;
    Delay(10000); 
    LED1=!LED1;
    Delay(10000);
    LED2=!LED2;
    Delay(10000);
    LED3=!LED3;
    Delay(10000); 
}


ok接下來將這些代碼塊拼接一下,就得到全部的代碼了

#include <ioCC2530.h> 
#define uint unsigned int 
#define uchar unsigned char //定義控制燈的端口 
#define LED1 P1_0 //定義LED1 為P10 口控制 
#define LED2 P1_1 //定義LED2 為P11 口控制 
#define LED3 P0_4 //定義LED3 為P04 口控制 
#define KEY1 P0_1   //定義KEY1 P_01 
//延時 *****************************/ 
void Delay(uint n) 
{ 
uint i; 
for(i = 0;i<n;i++); 
for(i = 0;i<n;i++); 
for(i = 0;i<n;i++); 
for(i = 0;i<n;i++); 
for(i = 0;i<n;i++);
}



//初始化IO 口程序 *****************************/ 
void InitIO(void) 
{ 
     
    //設置P0_1,P1_0,P1_1,P0_4,為通用接口
    P0SEL&=~0x11;         //P0SEL:1110 1110 
    P1SEL&=~0x03;        //P1SEL:1111 1100
    //設置P0_1為輸入接口     
    P0DIR&=~0x02;        //P0DIR:1111 1101

    //設置P1_0,P1_1,P0_4為輸出接口
    P1DIR|=0x03;           //P1DIR=0000 0011
    P0DIR|=0x10;           //P0SEL=0001 0000
    
    //調整P0_1為上拉下拉
    P0INP&=~0x02;      //P0INP:1111 1101

}

//檢測按鍵是否被按下,如果被按下返回true,如果沒被按下,返回false
uint KeyScan()
{
     if(KEY1==0)
     {
       while(KEY1==0);
          return 1;      
      
     }
     
     return 0;

}




//讓三個燈以流水燈的方式亮一次
void WaterLight()
{
    LED1=!LED1;
    Delay(10000);
    LED2=!LED2;
    Delay(10000);
    LED3=!LED3;
    Delay(10000); 
    LED1=!LED1;
    Delay(10000);
    LED2=!LED2;
    Delay(10000);
    LED3=!LED3;
    Delay(10000); 
}


//主函數 ***************************/ 

void main(void)
{
  
  InitIO();
  while(1)
  {
       if(KeyScan())
         WaterLight();
  }

}



實驗過程中的問題

P0INP
感覺這個寄存器的設置沒什么用啊,因為無論為0或者是為1,實驗現象都是一樣的,下周上課需要問一下老師。

實驗心得

通過這個實驗,知道了按鍵相應的接口


免責聲明!

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



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