cc2530的第二次实验,用按键控制流水灯

时间:2024-02-24 14:32:05

按键控制流水灯

具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍

实验相关寄存器

实验相关寄存器

实验相关电路

实验相关电路图

宏定义

#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,实验现象都是一样的,下周上课需要问一下老师。

实验心得

通过这个实验,知道了按键相应的接口