Zigbee实验3

#include "iocc2530.h"


#define D7 P1_0   //LED
#define D8 P1_1
#define D9 P1_4

#define SW P0_6   //开关

unsigned char count = 0;                //定时器计数器
unsigned char TimerStartFlag = 0;       //定时器启动标志
unsigned char key_count = 0;            //按键计数

//延时
void delay(unsigned int time){
  while(time--);
}

void gpio_init(){
  P1SEL &=~0x13;  //LED通用IO
  P1DIR |=0x13;   //输出
  //P1 &= ~0x1B;
  
  P0SEL &=~0x40;    //开关通用IO
  P0DIR &=~0x40;    //输入
  P0INP &=~0x40;    //上拉
  P2INP &=~0x20;    

}

void timer1_init(){
  //设置最大计数值0x30d4
  T1CC0L = 0xD4; //1101 0100
  T1CC0H = 0x30; //0011 0000

  //开启比较模式
  T1CCTL0 |=0x04;
  
  T1IE =1;//定时器1中断使能  
  EA=1;   //使能总中断
  
  //启动定时器
  T1CTL = 0x0E; //0000 1110

}


//中断服务函数
#pragma vector = T1_VECTOR
__interrupt void timer1_service(){
  if(TimerStartFlag==1){
    count++;
  }
}

//扫描按键
void Scan_Key(){
  if(SW==0){                    //当按键按下
    delay(30);                  //消抖
    
    if(SW==0){                  //消抖后检测按键按下
      while(SW==0);             //等待松手
      TimerStartFlag = 1;       //定时器 启动
      
      //根据按键按下的次数来执行不同操作
      if(key_count==0){
        key_count = 1;
        D8=0;
      }
      
      else if(key_count==1){
        key_count = 2;
        D9 = 0;
      }
    }
  }
}

//LED运行
void LED_runing(){
  switch(key_count){            //判断按键按下的次数
  
  case 1:                       //按键按下一次
    if(count==10){              //等待10个0.1秒
      D7=0;                     //D7点亮
    }
    else if(count==20){         //等待10个0.1秒
      D9=0;                     //D9点亮
    }
    else if(count==30){         //等待10个0.1秒
      D7=1;                     //三个LED灭
      D8=1;
      D9=1;
      count =0;                 //停止定时器,清零定时器计数器
      TimerStartFlag =0;
    }
    break;
  
  case 2:
    if(count==10){
      D7=0;
    }
    else if(count==20){
      D8=0;
    }
    else if(count==30){
      D7=1;
      D8=1;
      D9=1;
      count =0;
      TimerStartFlag =0;
      key_count=0;
    }
    break;
    
  default:
    break;
  }
}

int main(){

  gpio_init();
  timer1_init();

  while(1){
    Scan_Key();
    LED_runing();
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值