CC2530(zigbee)入门开发: 按键检测(输入)

846 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、按键功能与原理图介绍

在学习单片机、嵌入式过程中;按键是必学的一个外设,常见的按键分为为独立按键、矩阵按键等。下面这里介绍的是独立按键,原理比较简单,只需要将与单片机连接的IO口配置成输入模式,然后不停的检测按键的状态即可,根据原理图分析可以提前知道按键空闲和按下是什么状态,程序里检测到之后对应处理即可。 image.png

image.png

二、GPIO口输入模式配置

GPIO口作为按键检测使用时,需要将模式配置成输入模式,详细的配置步骤下面有截图,在手册里每个功能位都有详细介绍。

image.png

image.png

三、核心代码

#include <ioCC2530.h>

//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3

//定义KEY按键的端口
#define KEY1 P1_0       //定义按键为P1_0口控制
#define KEY2 P1_1       //定义按键为P1_1口控制

/*
函数功能:LED灯IO口初始化
硬件连接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
    P1DIR |=0x3<<2;  //配置P1_2、P1_3为输出模式
    LED1 = 1;
    LED2 = 1;
}

/*
函数功能:按键IO口初始化
硬件连接:KEY1-->P1_0  KEY2-->P1_1  
*/
void KEY_Init(void)
{
    P1SEL&=~(0x3<<0); //配置P1_0,P1_1处于通用GPIO口模式
    P1DIR&=~(0x3<<0); //配置P1_0,P1_1为输入模式
    P1INP|= 0x3<<0;   //上拉   
}


void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=193;c>0;c--)
        for(b=118;b>0;b--)
            for(a=2;a>0;a--);
}


/*
函数功能:按键扫描
返 回 值:按下的按键值
*/
unsigned char Key_Scan(void)
{
    static unsigned char stat=1;
    if((KEY1==0||KEY2==0)&&stat)
    {
       stat=0;
       delay10ms();
       if(KEY1==0)return 1;
       if(KEY2==0)return 2;
    }
    else
    {
        if(KEY1&&KEY2)stat=1;
    }
    return 0;
}

/*主函数*/
void main(void)
{
    unsigned char key;
    LED_Init();//初始化LED灯控制IO口
    KEY_Init();//按键初始化
    while(1)          
    {  
       key=Key_Scan();
       if(key)
       {
          LED1 = !LED1;     
          LED2 = !LED2;
       }       
    }
}

编写完毕之后,编译,下载程序、测试按键

image.png