2023年上海市“星光计划”中职物联网技术应用与维护样题 CC2530辅助开发,单片机按键控制

第一次写,有不对的地方还望大家多多指正。

任务要求:
1. 程序通电,节点盒的 LED1 、 LED2 灯都不亮。
2. 长按 SW1 键不松开, LED1 灯亮, LED2 灯熄灭。
3. 松开 SW1 键, LED1 、 LED2 亮灯都常亮。
4. 将编写好的程序发布到蓝色 ZigBee 节点盒中。

代码部分:

#include <iocc2530.h>

// 定义LED和开关对应的端口位
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define OUT1 P1_5 
#define OUT0 P1_6

// 定义无符号字符类型别名
#define unsigned char uchar

// 全局标志变量和计数器
int flag=0;
int count=0;

/**
 * @brief 初始化GPIO端口
 * 配置P1.2~P1.3为普通I/O,设置P1.0和P1.1为输出,P1.2为输入并上拉。
 */
void init_gpio()
{
  P1SEL &= ~0x0C; 
  P1DIR |= 0x03;  
  P1INP |= 0x04; 
}

/**
 * @brief 延迟函数
 * 通过循环计数实现延迟,时间取决于参数t。
 * @param t 延迟时间,单位为循环次数。
 */
void delay(long t)
{
  while(t--);
}

/**
 * @brief 初始化中断
 * 配置P1口中断,使能P1.2口的外部中断功能,并设置为上升沿触发。
 */
void initial_interrupt()
{
  IEN2|=0x10;  // 打开P1口中断的使能位
  P1IEN|=0x04; // 使能P1.2口的外部中断功能
  PICTL|=0x02; // 配置P1.3-P1.0的中断为上升沿触发
  EA=1;        // 打开全局中断使能
}

// P1口中断服务程序
#pragma vector=P1INT_VECTOR
__interrupt void  P1_ISR()
{
  // 如果按键SW1被按下且LED2为亮态,则关闭两个LED并重置相关变量
  if (SW1==0&&LED2==1) 
  {
    LED1=LED2=0;
    flag=count=0;
  }
  flag=0; // 重置标志位
  P1IF=0x00; // 清除P1口的中断标志
  P1IFG=0x00; // 清除P1口的中断标志待触发状态
}

/**
 * @brief 定期扫描按键状态并处理按键事件
 * 检测按键SW1的状态,当按键被
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值