物联网通信技术实验报告2(按键中断控制LED闪烁)

实验2 按键中断控制LED闪烁

实验目的

1. 掌握CC2530 的中断设置方法;

2. 掌握中断函数程序的编写方法。

实验设备

  1. CC2530实验节点
  2. SmartRF04EB仿真器
  3. PC机

实验原理

  1. ZigBee节点的上的KEY按键位于节点右下方,如图所示。

 KEY接CC2530的P0_7引脚。

 

  1. 端口0的中断处理函数格式如下:

#pragma vector=P0INT_VECTOR

__interrupt void P0_ISR(void){

...

...

...

}

实验内容

  1. 编程实现用按键KEY控制LED灯闪烁。
#include "ioCC2530.h"

#define uint unsigned int

#define uchar unsigned char



#define LED1 P1_0

#define LED2 P1_1

#define LED3 P1_4

#define LED4 P0_1

#define KEY P0_7

//延时子函数

void Delay(uint n)

{

 // uint tt;

  for(int i=n;i>0;i--)

    for(int i=n;i>0;i--);

}

void  led_init(void)

{

  //设置成通用IO口

  P1SEL &=~0X13;

  //P1SEL &=~0X02;

  //设置P1_0,P1_1,P1_4输出

  P1DIR |=0X13;

 // P0DIR |=0X02;

  

  //关闭LED1

  LED1=1;

  //关闭LED2

  LED2=1;

  //关闭LED3

  LED3=1;

  //关闭LED4

 // LED4=0;

}

void key_init(void)

{

  //设置成通用IO口

   P0SEL &=~0X80;

  //设置P0_7为输入模式

  P0DIR &=~0X80;

  //P0_7上拉模式

  P0INP &=~0X80;

  //P0_7,下降沿触发

 // PICTL |=0x01;

}





void key_interrupt_init(void)

{

  //开总中断

  EA=1;

  //P0中断标志清零

  P0IFG &=0x00;

  //端口0中断使能

  IEN1 |=0x20;

  //开端口0的第8位的(P0_7)中断使能

  P0IEN |=0X80;

}



//key不用中断控制LED

uchar key_flag=0;

void key_proc(void)

{

  if(KEY == 0 && key_flag == 0)

  {

    LED1 =0;

    key_flag=1;

  }

else if(KEY == 0 && key_flag==1)

{
 LED1 =0;

 key_flag=0;


}

}



#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

  if(P0IFG>0)

  {

    LED1 = !LED1;

    LED2 = !LED2;

    P0IFG = 0;

    P0IF = 0;

  }

}



int main(void)

{

    //LED初始化

    led_init();

    //IO及外部中断初始化

    key_init();

    key_interrupt_init();

    //等待中断

    Delay(100);

  while(1)

  {

    //key_proc();

  }

  

}

上述代码实现了两种方式按键控制LED灯亮灭亮灭的功能,第一种方式是中断方式,第二种就是相当于轮询的方式,在while循环中不断地看按键KEY是否按下,如果按下则执行相应的功能,否则跳过.

运行代码,并且烧录到板子中,现象如图所示

 

实验结果以及分析:

1.首先通过原理图,判断按键是哪个引脚,所以是P0_7

 

  1. 1然后开始编程,查看编程手册
    1. 2有以下步骤
      • 首先将LED的引脚以及KEY的引脚设置成通用的I/O口
      • 然后将LED的引脚设置成输出模式,将KEY引脚设置成输入模式,同时将KEY这个模式设置成上拉模式(输入模式的两种选择,作用就是当引脚时浮空的状态,该引脚默认的状态,如果上拉就是高电平,如果下拉就是低电平)
      • LED:初始化LED灯为全灭,KEY:1.将P0的中断标志位清零,2.开总中断,3.开端口0的中断,4.开端口0的第八位(P0_7)的中断
      • 编写中断服务函数如果按键按下,那么此时的端口零的中断状态标志位就会置1,在中断函数中判断,该标志位是否为1,或者>0,然后编写功能函
      • 关于以上步骤可参考书面的代码,皆是模块化编程

实验心得:

本次实验时使用按键中断控制LED闪烁,主要学习到的模块就是定时中断,通过此次实验队寄存器操作变得更加熟练,理解也更加深刻。

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值