博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

4、按键轮询实验

Posted on 2020-02-06 11:19  兰智杰  阅读(795)  评论(0编辑  收藏  举报

轮询方式——按键控制LED亮灭(外部信号输入读取)

  外设电路图如下,P10低电平时LED亮,按键没有按下P01为高电平,按下为低电平:

  

  将P01设置为通用IO:

  

  将P01设置为输入模式:

  

  打开P01上的上拉电阻:

  

#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define LED1 P1_0           // P1.0口控制LED1
#define KEY1 P0_1           // P0.1口控制S1

void DelayMS(uint msec)
{ 
    uint i,j;   
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

void InitLed(void)
{
    P1DIR |= 0x01;          // P1.0定义为输出
    LED1 = 1;               // LED1灯熄灭     
}

void InitKey(void)
{
    P0SEL &= ~0x02;         //设置P0.1为普通IO口  
    P0DIR &= ~0x02;         //按键接在P0.1口上,设P0.1为输入模式 
    P0INP &= ~0x02;         //打开P0.1上拉电阻
}

uchar KeyScan(void)
{
    if (KEY1 == 0)
    {
        DelayMS(10);
        if (KEY1 == 0)
        {
            while(!KEY1);   //松手检测
            return 1;       //有按键按下
        }
    }  
    return 0;               //无按键按下
}

void main(void)
{
    InitLed();              //设置LED1相应的IO口
    InitKey();              //设置S1相应的IO口   
    while(1)    
    {
        if (KeyScan())      //按键按下则改变LED状态
            LED1 = ~LED1;       
    }
}