2021-10-06

使用CC2530的P10、P11、P14口为输出口,驱动 LED1/LED2/LED3 ;P01口为高电平即按键S1信号输入。本实验程序用外部中断方式实现按键控制 LED灯:开机按键一次,LED1灯亮;按键两次,LED3、 LED2、LED1依次闪烁;按键三次,LED1、LED2、LED3依次闪烁;按键四次,LED1、LED2、 LED3灯灭,如此循环。

#define unint unsigned int

#define uchar unsigned char

#define uint32 unsigned long

#define led1 P1_0

#define led2 P1_1

#define led3 P1_4

#define key1 P0_1

#include<ioCC2530.h>

#include"exboard.h"

uchar Keyvalue = 0 ; //定义变量记录按键动作

uint KeyTouchtimes = 0 ; //定义变量记录按键次数

uchar KeyScan(void)

{

if(KEY1 == 1) //高电平有效

{

Delay(100); //防抖检测,检测到按键

if(KEY1 == 1)

{

 while(KEY1);   //直到松开按键

 return(1);

}

}

return(0);

}

void Delay(uint n)

{

uint i,j;

   for(j = 0; j<5; j++)

  {

  for(i = 0;i<5;i++);

   }

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

   if(P0IFG>0)           //按键中断

   {

     P0IFG = 0;

     Delay(100);

     if(P0IFG==0)        //按键中断

   {

     Delay(100);

     KeyTouchtimes = KeyTouchtimes+1;  //每次中断发生时记录按键次数加1

   }

   }

   P0IF = 0;            //清中断标志

}

void main()

{

 P0SEL &= ~0x02;/*将P0_0端口设为通用I/O**/

 P0INP &= 0x02;/*上拉**/

 P0IEN &= 0x02;/*P0_1设置为中断方式**/

 PICTL |= 0x02;/*下降沿触发**/

 EA = 1;

 IEN1 |= 0x20;/**P0设置为中断方式*/

 P0IFG |= 0x00;/*初始化中断标志位**/

 /*设置led灯**/

 P1SEL &= ~0x13;/*P1SEL将端口014位设为通用I/O**/

 P1DIR |= 0x13;/*P1DIR第014位设为输出模式**/

 led1 = 0;

 led2 = 0;

 led3 = 0;

 while(1)

 {

    Keyvalue = KeyScan();      //读取按键动作

    if (Keyvalue==1)

    {

      KeyTouchtimes = KeyTouchtimes+1;   //记录按键次数

    }

       if(KeyTouchtimes ==1)       //第一次按下按键设置LED1灯亮

       {

      led1 = 1;

   led2= 0;

     led3= 0;

        }

    if(KeyTouchtimes == 2)        //第二次按下按键设置为                                         LED3,LED2,LED1倒序流水闪烁

    {

      led2 = !led2;                             Delay(20000);

     led3 = !led3;

      Delay(20000);

      LED1 = !led1;

      Delay(20000);

          }

     if(KeyTouchtimes == 3)      //第三次按下按键设置为                                        LED1,LED2,LED3顺序流水闪烁

         {

      led1 = !led1;

      Delay(20000);

      led3 = !led3;

      Delay(20000);

      led2= !led2;

      Delay(20000);

           }

    if(KeyTouchtimes == 4)      //第四次按下按键设置为                                         LED1,LED2,LED3全部关闭

          {

      led1 = 0;

      led2 = 0;

      led3 = 0;                  //关闭所有LED

      KeyTouchtimes =0;           //重置按键次数记录变量

           } 

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值