单片机学习小组
直播中

晴兮晴兮

12年用户 566经验值
私信 关注

ZigBee如何实现LED灯的亮灭?

ZigBee如何实现LED灯的亮灭?

回帖(1)

徐梦灵

2022-1-25 11:17:03
一、问题要求:
 选用一个蓝色的 ZigBee 节点盒进行开发。
 实现功能:ZigBee 节点盒一上电,两只 LED 灯(连接灯和通讯灯)就
亮,当按下 SW1 键后,两只灯进入相互切换状态(其中一个灯亮,另一
个灯灭),如此循环效果显示。


二、逻辑代码实现:
#include


typedef unsigned char uchar;
typedef unsigned int  uint;


#define LED1      P1_0
#define LED2      P1_1
#define SW1       P1_2


uchar ledState = 0;


void DelayMs(uint t)
{
  uint j,k;
  for(j=0;j   {
    for(k=0;k<525;k++);
  }
}


void InitLed(void)
{
  P1SEL &= ~0x07;     //把P1.0、P1.1、P1.2设为GPIO
  P1DIR |= 0x03;      //设置P1.0、P1.1为输出模式
  LED1 = 1;
  LED2 = 1;          //设置为点亮状态
}


void InitSW1(void)
{
  P1DIR &= ~0x04;     //设置P1.2为输入模式
  P1IEN |= 0x04;      //使能P1.2中断模式
  PICTL |= 0x02;      //下降沿触发中断
  IEN2 |= 0x10;       //开启P1的中断
  P1IFG = 0x00;       //清除中断标志位
  EA = 1;             //开启所有中断
}


#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
  ledState = 1;
  LED1 = 0;
  P1IFG = 0;
  P1IF = 0;
}


void main(void)
{
  InitLed();      //初始化LED
  InitSW1();      //初始化按键,并打开中断
  while(1)
  {
    if(ledState == 1)
    {
      DelayMs(1000);      //延时1s
      LED2 = !LED2;
      LED1 = !LED1;
    }
  }
}


以实现题目要求为目的,逐渐提高程序开发的效率。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分