新大陆cc2530流水灯的启动再启停

新大陆cc2530流水灯的启动再启停

功能

上电后灯全灭,按一下按键1流水灯开始工作,再按一下保持流水灯当前状态,再按一下流水灯继续工作

代码



#include "ioCC2530.h"
#define d3 P1_0
#define d4 P1_1

#define sw P1_2
#define d5 P1_3
#define d6 P1_4

int c;
int flag = 1;  //如果这里是0就需要按两下按键才能开始流水动作

void delay(unsigned int time){
unsigned int i;
unsigned char j;
for(i = 0;i < time;i++){
  for(j = 0;j < 240;j++){
  asm("NOP");
  asm("NOP");
  asm("NOP");
  while(flag);     //这里是通过中断来改变0和1
  }
}
}

void port_init(){
P1SEL &= ~0X1b;
P1DIR |= 0x1B;
P1 &= ~0X1b;

P1DIR |= ~0X04;
P1INP &= ~0x04;
P2INP &= ~0x40;



IEN2 |= 0X10;  //
P1IEN |= 0x04; //中断配置
PICTL |= 0x02; // 
EA = 1;        //
}

void led(){
d4 = 1;
d3 = 0;
d6 = 0;
d5 = 0;
delay(6000);
d4 = 0;
d3 = 1;
d6 = 0;
d5 = 0;
delay(6000);
d4 = 0;
d3 = 0;
d6 = 1;

d5 = 0;
delay(6000);

d4 = 0;
d3 = 0;
d6 = 0;
d5 = 1;
delay(6000);
}

#pragma vector = P1INT_VECTOR
__interrupt void p1int(){
  if(P1IFG & 0x04){
    if(flag == 0){
    flag = 1;
    }else{
    flag = 0;
    }
    P1IFG &= ~0X04;
  }
  P1IF = 0;  //清零
}
void main(void){
  port_init();
  while(1){
    if(sw == 0){
    delay(5);
    if(sw == 0){
      while(!sw);
      while(1){
         
      led();    //这里是为了中断的执行所以要使它进入while循环下
     
      }
    }
    }
  }
}
_贡献自己的小笔记_```
  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值