找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 113|回复: 0
打印 上一主题 下一主题
收起左侧

关于zigbee的按键

[复制链接]
跳转到指定楼层
楼主
ID:1118179 发表于 2024-4-24 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断服务函数与一般自定义函数不同,有特定的书写格式:
<1> 在每一个中断服务函数之前,都要加上一句起始语句:
        #pragma vector = <中断向量>
        <中断向量>表示接下来要写的中断服务函数是为那个中断源服务的,该 语句有两种写法:
        #pragma  vector = 0x7B    或者    #pragma  vector = P1INT_VECTOR
        前者是中断向量的入口地址,后者是头文件“ioCC2530.h”中的宏定义。
<2> _ _interrupt关键字表示该函数是一个中断服务函数,<函数名称>可以 自定义,函数体不能带有参数,也不能有返回值。


按照步骤走
1. 先配置按键的寄存器输入配置  以按键P1_2为例
P1SEL &=~0x04;   
P1DIR &= ~0x04;
P1INP &= ~0x04; //设置为上拉引脚

2.配置中断寄存器 以先位中断允许   然后端口中断允许 最后总中断允许的顺序去配置

1.P1IEN |= 0x04;   //位中断允许

2.  IEN2 |=0x10;  //端口中断允许

3.  PICTL =0x00;               //配置跳变沿方向  上升沿
4. EA=1;  //总中断标志
5. P1IFG=0;   //中断标志位清


下述是整体代码 实现按键第一次按下 led1亮  第二次按下 led2亮 第三次按下全亮  第四次按下全灭的效果

  1. #include<ioCC2530.h>
  2. //led低电平是亮灯
  3. #define led1(x) P1_0=x
  4. #define led2(x) P1_1=x
  5. volatile int cnt=0;
  6. void delay_us(int n)
  7. {
  8.   while(n--)
  9.   {
  10.     asm("nop");
  11.    
  12.   }
  13. }
  14. void delay_ms(int n)
  15. {
  16.   for(int i=0;i<n;i++)
  17.   {
  18.     delay_us(500);
  19.   }
  20. }
  21. void main()
  22. {
  23.   
  24.   //P1SEL &= ~0x03;
  25.   //P1DIR |= 0x03;
  26.    P1SEL &= ~0x07;
  27.    P1DIR |= 0x03;
  28.    P1DIR &= ~0x04;
  29.    P1INP &= ~0x04;
  30.    
  31.    P1IEN |= 0x04;
  32.    //P1IE =1;
  33.    IEN2 |= 0x10;
  34.    
  35.    PICTL |= 0x02;
  36.    
  37.    P1IFG =0x00;
  38.    EA=1;
  39.    
  40.   while(1)
  41.   {
  42.    
  43.   }
  44.   
  45. }
  46. #pragma vector =P1INT_VECTOR
  47. __interrupt void P1_ISR(void)
  48. {
  49.   if(P1IFG>0)
  50.   {
  51.     cnt++;
  52.     if(cnt%4==0)
  53.     {
  54.       led1(1);
  55.       led2(0);
  56.     }
  57.     if(cnt%4==1)
  58.     {
  59.       led1(0);
  60.       led2(1);
  61.     }
  62.     if(cnt%4==2)
  63.     {
  64.       led1(1);
  65.       led2(1);
  66.     }
  67.     if(cnt%4==3)
  68.     {
  69.       led1(0);
  70.       led2(0);
  71.     }
  72.     P1IFG=0;
  73.     P1IF=0;
  74.   }
  75.   
  76.   
  77. }
复制代码





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表