CC2530外部中断启停跑马灯

 直接上代码::::

 

这个程序是测试按键产生中断然后跑马灯的启停(暂停和跑马)

第一次产生中断(按键按下)进入中断执行事件

第二次...

第..次...

#include <iocc2530.h>
/*
    Description:本程序是测试按键产生时跑马灯的暂停和启动程序
    time:2019-2-27
    Auther: Bactiy
*/
// 宏定义按键、LED
#define led   P1_0
#define led1  P1_1
#define led2  P1_3
#define led3  P1_4
#define key   P1_2

unsigned char veil=0;   //  中断执行的标志位

//  延时函数
void delay(unsigned int i)
{
  unsigned int j;
  unsigned int b;
  for(j=0;j<i;j++)
  {
      for(b=0;b<240;b++)
      {
          while(veil);//第一次产生中断则跑马灯暂停,再次产生中断veil值会变为0
      }
  }
}

//  按键初始化
void keyinit()
{
  P1IEN|=0X04;   //使能P1_2产生中断(按键的引脚)
  PICTL|=0X02;   //下降沿产生中断
  IEN2|=0X10;    //使能P1端口产生中断
  P1IFG=0X00;    //中断标志位
  EA=1;          //总中断
}

//  LED初始化
void ledinit()
{
  P1SEL&=~0x1B;//P1SEL用于配置端口的模式为普通还是外设--这里定义为普通模式
  P1DIR|=0X1B;//P1DIR用于配置端口为输入模式还是输出模式--这里定义为输出模式
  /*led=0;
  led1=0;
  led2=0;
  led3=0;*/
  P1 = 0x00;//等同于以上四行  初始化LED的状态
}

//  中断服务函数
#pragma vector= P1INT_VECTOR
 __interrupt void P1_ISR(void )
 {
    if(P1IFG&0x04)      //如果P1_2引脚产生中断
    {
        if(veil==0)     //第一次产生中断(按键按下)改变
        {
            veil=1;
        }
        else
        {
            veil=0;
        }
    }
    P1IFG=0;  //清中断位(这个是具体的位---例P1_1、P1_2、P1_3)
    P1IF=0;   //清中断位(这个是端口---例P0、P1、P2)
 }

//  主函数
void main()
{
    ledinit();
    keyinit();
    while(1)
    {           
       led=1;
       delay(300);
       led=0;
       delay(300);
       led1=1;
       delay(300);
       led1=0;
       delay(300);
       led2=1;
       delay(300);
       led2=0;
       delay(300);
       led3=1;
       delay(300);
       led3=0;
       delay(300);
    }
}

如果调试出现问题,,或对以上程序有疑问请留言,,谢谢大家!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值