二、zigbee裸機程式--按鍵

rouqingnanzi發表於2020-11-14

二、zigbee裸機程式–按鍵

軟體平臺:Embedded Workbench 6.0 IAR 8.10.1
硬體平臺:webee普通底板,cc2530(無PA)
在按鍵程式中,設定當按下S1時,led1點亮;再次按下S1時,led1熄滅。對於S1所接的P0.0,設定為輸入模式,讀取它得電平;對於P1.0,設定我輸出,控制led1亮滅。
在這裡插入圖片描述
一、配置暫存器
按照一、zigbee裸機程式–led所寫進行配置。需要注意的是,P0.0是輸入模式,需要設定上拉、下拉或者三態。
二、程式
1、led驅動
led.c

#include "led.h"
#include "iocc2530.h"

void InitLed(void)
{
  P1SEL &=~0X01;    //P1_0定義為通用IO 
  P1DIR |= 0X01;    //P1_0定義為輸出
  LED1 = 0;         //設定初值,熄滅
}

led.h

#ifndef _LED_H
#define _LED_H

#define LED1 P1_0	//LED1為P1.0口控制
void InitLed(void);

#endif

2、key驅動,本質還是對IO暫存器進行配置
key.c

#include "key.h"
#include "iocc2530.h"

void Delayms(uint xms)   //i=xms 即延時i毫秒
{
 uint i,j;
 for(i=xms;i>0;i--)
   for(j=587;j>0;j--);
}

void InitKey(void)
{
  P0SEL &=~0X01;    //P0_0定義為通用IO 
  P0DIR &=~0X01;    //P0_0定義為輸入
  P0INP &=~0X01;    //P0_0定義為上拉/下拉
//  P2INP &=~0X20;    //P0整個IO定義為上拉
}

uchar KeyScan(void)
{
  if(KEY1 == 0)   //如果KEY1按下
  {
    Delayms(20);   // 等待20ms
    if(KEY1 == 0) //如果KEY1此時仍按下
      return 1;  //返回按鍵值1   
  }
  return 0;  //如果沒有鍵按下,返回鍵值0
}

key.h

#ifndef _KEY_H
#define _KEY_H

#define uchar unsigned char
#define uint unsigned int

#define KEY1 P0_0	//LED1為P1.0口控制

void Delayms(uint xms);
void InitKey(void);
uchar KeyScan(void);

#endif

3、主函式main()對led和key進行初始化,再在while(1)不斷讀取鍵值,如果鍵值為1(此時有鍵按下),則led狀態取反。

/****描述:依次按下按鍵S1控制LED1的亮和滅******/
#include "iocc2530.h"
#include "led.h"
#include "key.h"

void main()
{
  InitLed();  //初始化LED
  InitKey();  //初始化key
  while(1)
  {
    if(KeyScan() == 1)
      LED1 =~LED1;
  }
}

三、現象
按下按鍵S1控制LED1的亮和滅。

相關文章