智能制造与工业物联网CC2530——模拟按键查询和模拟按键中断

一、实验目的:

  1. 阅读 ZigBee 模块硬件熟悉 ZigBee 模块相关硬件接口。使用 IAR开发环境设计程序,学习CC2530的外部中断的使用,实现用按键(霍尔效应传感器模拟)查询控制 LED 亮灭。
  2. 学习 CC2530 的外部中断的使用,实现用按键(霍尔效应传感器模拟)中断控制 LED 亮灭。

    二、实验原理:

    LED及按键原理图,如下图所示:


    CC2530 的外部中断需要配置三个寄存器 P0IEN、PICTL、P0IFG、IEN1。
    LED 初始化配置:
    P2DIR |= 0x01; //P2_0 定义为输出
    按键初始化配置:
    P0SEL &= ~0X20; //设置 P0_5 为普通 IO 口
    P0DIR &= ~0X20; //按键在 P0_5 口,设置为输入模式
    P0SEL(0XF3) P0[7:0]功能设置寄存器,默认设置为普通 I/O 口
    P0INP(0X8F) P0[7:0]作为输入口时的电路模式寄存器
    P0(0X80) P0[7:0]可为寻址的 I/O 寄存器
    P0DIR(0XFD) P0 口输入输出设置寄存器,0:输入,1:输出
    P0INP &= ~0x20; //打开 P0_5 上拉电阻,不影响
    实验设备与芯片选择


    全代码如下:
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制 LED 灯的端口
#define LED1 P2_0 //LED1 为 P2_0 口控制
#define KEY1 P0_5 //KEY1 为 P0_5 口控制
//函数声明
void Delayms(uint); //延时函数
void InitLed(void); //初始化 LED1
void KeyInit(); //按键初始化
uchar KeyScan(); //按键扫描程序
/**************************** 延时函数 *****************************/
void Delayms(uint xms) //i=xms 即延时 i 毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
/**************************** LED 初始化函数 *****************************/
void InitLed(void)
{
P2DIR |= 0x01; //P2_0 定义为输出
LED1 = 1; //LED1 灯熄灭
}
/**************************** 按键初始化函数 *****************************/
void InitKey()
{
P0SEL &= ~0X20; //设置 P0_5 为普通 IO 口
P0DIR &= ~0X20; //按键在 P0_5 口,设置为输入模式
P0INP &= ~0x20; //打开 P0_5 上拉电阻,不影响
}
/**************************** 按键检测函数 *****************************/
uchar KeyScan(void)
{
if(KEY1==0)
{Delayms(10);
if(KEY1==0)
{
while(!KEY1); //松手检测
return 1; //有按键按下
}
}
return 0; //无按键按下
}
/*************************** 主函数 ***************************/
void main(void)
{
InitLed(); //调用初始化函数
InitKey();
while(1)
{
if(KeyScan()) //按键改变 LED 状态
LED1=~LED1;
}
}
LED 初始化配置: 
P0IEN(0XAB) P0[7:0]中断掩码寄存器,0:关中断, 1:开中断 
PICTL(0X8C) P0 口的中断触发控制寄存器 
Bit0 为 P0[0:7]的中断触法配置: 
0:上升沿触发 1:下降沿触发 
P0IFG(0X89) P0[7:0]中断标志位,在中断发生时,相应位置 1 IEN1(0XB8) Bit5 为 P0[0:7]中断使能位,0:关中断 1:开中断
P2DIR |= 0x01; //P2_0 定义为输出 
外部中断初始化配置: 
P0IEN |= 0X20; // P0_5 设置为中断方式 
PICTL &=~ 0X20; // 下降沿触发 
IEN1 |= 0X20; // 允许 P0 口中断; 
P0IFG = 0x00; // 初始化中断标志位 
全代码如下: 
/************************************* 模块:HALL 模块 功能:使用 KEY1 控制 LED1 亮灭(中断方式) **************************************/ 
#include #define uint unsigned int #define uchar unsigned char 
//定义控制 LED 灯的端口 
#define LED1 P2_0 //LED1 为 P2_0 口控制 
#define KEY1 P0_5 //中断口 
//函数声明 
void Delayms(uint); //延时函数 
void InitLed(void); //初始化 LED 
void KeyInit(); //按键初始化 
uchar KeyValue=0; 
/**************************** //延时函数 *****************************/ 
void Delayms(uint xms) //i=xms 即延时 i 毫秒 
{ uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } 
/**************************** //LED 初始化程序 *****************************/
void InitLed(void) { P2DIR |= 0x01; //P2_0 定义为输出 
LED1 = 1; //LED1 灯熄灭 
} 
/**************************** KEY 初始化程序--外部中断方式 *****************************/ 
void InitKey() { P0IEN |= 0X20; //P0_5 设置为中断方式 
PICTL &=~ 0X20; // 下降沿触发 
IEN1 |= 0X20; // 允许 P0 口中断 
P0IFG = 0x00; // 初始化中断标志位 
EA = 1; //开总中断 
} 
/**************************** 中断处理函数 *****************************/ 
#pragma vector = P0INT_VECTOR //格式:#pragma vector = 中断向量, 
__interrupt void P0_ISR(void) //中断处理程序 
{ Delayms(10); //去除抖动 
LED1=~LED1; //改变 LED1 状态 
P0IFG = 0; //清中断标志 
P0IF = 0; //清中断标志 
} 
/*************************** 主函数 ***************************/ 
void main(void) { InitLed(); //调用初始化函数 
InitKey();
while(1); }

三、步骤:

  1. 将 CC2530 核心板插在 HALL 传感器底板,使用配套方口 USB 线连接PC 机和 DY-WSN-Kit V1.0 物联网综合开发实训平台,给开发实训平台上电,打开 HALL 传感器底板开关(传感器底板左侧开关),传感器底板电源灯亮起。
  2. 使用旋钮开关选择 ZigBee 仿真器要连接的设备模块(根据 LED 指示灯是否亮起判断)。在这个实验中,将旋钮选择到 HALL 传感器底板。
  3. 启动 IAR 开发环境,新建工程,将实验工程中代码拷贝到新建工程中。
  4. 在 IAR 开发环境中编译、运行、调试程序,并把程序下载到 HALL 传感器底板的 CC2530 核心板上,观察实验现象。
  5. 关闭开发平台电源,关闭 HALL 传感器底板电源。
    注:代码为按键查询和按键中断,此过程重复两次。
    初始化时led灯为亮

点击智能制造与工业物联网CC2530——模拟按键查询和模拟按键中断——古月居可查看全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值