物联网技能技术大赛cc2530开发

本文介绍了如何使用C语言编程控制GPIO端口,通过定时器1实现LED的周期性亮灭以及按键的检测和处理,包括延时函数、定时器配置和按键去抖处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//首先导入头文件

#include "iocc2530.h"

//宏定义
#define D1 P1_0
#define D2 P1_1
#define SW1 P1_2

unsigned int count=0;        //定时器每隔0.5s +1
unsigned int F_Key=0; //按键按下的次数


void Init_Port()
{
  P1SEL &=~0X03;    //设置为普通I/O端口
  P1DIR |=0X03;     //设置为输出端口
  P1 &=~0X03;       //关闭LED1和LED2

//SW1
  P1SEL &=~0X04;    //设置为普通I/O端口
  P1DIR &=~0X04;    //设置为输入端口
  P1INP &=~0X04;    //设置P1_2口为上拉或下拉
  P2INP &=~0X40;    //设置P1口所有引脚使用上拉
}

//延时函数 

void Delay(unsigned int t)
{
  while(t--);
}

void Timer1()         //0.5s定时
{
    T1CTL |=0X0D;   //将定时器1设置为128分频,模模式

//通过公式计算出0.5秒 的十进制数字,并把它转化为16进制
    T1CC0L =0X24;   //低八位
    T1CC0H =0Xf4;   //高八位
    T1IE =1;        //使能定时器1中断
    T1OVFIM =1;     //使能定时器1溢出中断
    EA=1;           //使能总中断
}

#pragma vector=T1_VECTOR
__interrupt void T1_int(void)
{
  //清除定时器1的溢出中断标志位
  count++;
  if(count==4)
  {
    if(F_Key==1)
    {
    D1=~D1;
    D2=~D2;
  }
      count=0;
  }
  T1STAT &=~0X20;
}

//按键扫描函数
void Scan_Key()
{
  if(SW1==0){    //检测是否有按键按下
    Delay(500);
    if(SW1==0){   //去抖动处理
      while(SW1==0);
      F_Key++;
      if(F_Key==1)//按键按下次数为1,LED1,LED2每隔两秒切换亮灭状态
      {
        D1=1;
        D2=0;
        Timer1(); //启动定时器1实现切换亮灭
      }
      else if(F_Key==2)//按键按下次数为2,关闭LED1和LED2
      {
        D1=0;
        D2=0;
        F_Key=0;//将按键按下次数清0
      }
    }
  }
}

int main()
{
  Init_Port();
  while(1){
    Scan_Key(); //反复调用按键扫描函数
  }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值