CC2530之按键与LED

本文介绍如何使用CC2530单片机的按键控制LED灯的亮灭。主要内容包括配置端口作为输入输出,实现按键检测并反转LED状态。涉及到的关键寄存器包括端口功能选择寄存器、方向选择寄存器和输入模式寄存器。

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

CC2530之按键与LED

在本次学习中,主要是通过板载按键来控制LED的亮灭。
首先,先来查看与LED及按键相关的电路图
由图可知,当CC2530端口1的0号引脚输出低电平时,LED1将被点亮。当按键S1按下时,端口0的1号引脚将为低电平,抬起时为高电平。
这里写图片描述

接下来,先查看与LED(P1_0)配置相关的寄存器。
1. 端口1功能选择寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为普通的I/O口,若设置为1,则将相关引脚设为外设I/O,默认值都为0。
这里写图片描述
2. 端口1方向选择寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为输入引脚,若设置为1,则将相关引脚设为输出引脚,默认值都为0。
这里写图片描述
3. 端口1输入模式寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为上拉/下拉模式,若设置为1,则将相关引脚设为三态模式,其中P1_0和P1_1没有上拉/下拉功能,可以不用配置,默认值都为0。
这里写图片描述

再来看看与按键S1(P0_1)配置相关的寄存器
1. 端口1功能选择寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为普通的I/O口,若设置为1,则将相关引脚设为外设I/O,默认值都为0。
这里写图片描述
2. 端口1方向选择寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为输入引脚,若设置为1,则将相关引脚设为输出引脚,默认值都为0。
这里写图片描述
3. 端口1输入模式寄存器。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为上拉/下拉模式,若设置为1,则将相关引脚设为三态模式,其中P1_0和P1_1没有上拉/下拉功能,可以不用配置,默认值都为0。
这里写图片描述

/*
本实验效果,每按一次按键,LED效果翻转一次
*/
#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define LED1 P1_0
#define KEY1 P0_1

void delay_ms(uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
    for(j=0;j<555;j++);
}

void LEDInit(void)
{
  P1SEL &= ~0x01;  //设置P1_0为普通IO
  P1DIR |= 0X01;  //设置P1_0为输出模式
}

void KEYInit(void)
{
    P0SEL &= ~0x02; //设置P0_1为普通IO
    P0DIR &= ~0x02; //设置P0_1为输入模式
    P0INP &= ~0x02; //设置P0_1为上拉模式
}

/*扫描按键是否按下*/
uchar KEYScan(void)
{
    if(KEY1 == 0)
    {
        delay_ms(10);
        if(KEY1 == 0)
        {
            while(!KEY1);
            return 1;
        }
    }
    return 0;
}

void main(void)
{
    LEDInit();
    KEYInit();
    while(1)
    {
        if(KEYScan())
            LED1 = ~LED1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值