使用GPIO输出控制Led亮灭(CC2530)

1.实验目的:
a.通过实验掌握CC2530芯片GOIP的配置方法
b.掌握Led驱动电路以及开光Led的原理
c.查看cc2530-datasheet.pdf手册查找各个寄存器的意思。
二、实验相关原理图
在这里插入图片描述
在这里插入图片描述
CC2530核心板:
CC2530有3个端口,分别是P0、P1、P2,我们通过控制IO操作来完成实验。

第一个LED灯连接的是P1_0
在这里插入图片描述


由于发光二极管是单向导电特性,只有给正向电压才能够导通,也就是P1_0得输出低电平,D1就会发亮,如果P1_0输出3.3V,D1就会灭。
代码中 我们用宏定义来控制P1_0
在这里插入图片描述
延迟函数(1ms)中535这个值是通过示波器测量出来的,也可以修改这个值判断波形 得到延时函数延时的时间。

在这里插入图片描述

三、配置寄存器

初始化:设置LED灯相应的IO口LED讲P1_0定义为输出口
死循环给LED一个低电平,LED被点亮延时1s后
给LED一个高电平,熄灭LED灯,延时1s
再不断循环。
在这里插入图片描述
搜索P1DIR表示的是端口P1的方向寄存器:用来分别控制P1_0~P1_7,这8个IO口是输入还是输出状态。
比如输出0V或3.3V就可以用来开关LED灯的亮和灭,如果是接在继电器上就可以控制继电器的开和关。
在这里插入图片描述
操作P1.0还需要掌握相关寄存器的作用和配置方法:
在这里插入图片描述

P1SEL:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
从芯片手册中查找到P1SEL是P1端口的功能选择也就是P1SEL的第零位到第七位决定着P1端口P1_0到P1_7的功能选择.
当P1SEL相应的位配置为0时,是通用的IO功能;
当P1SEL相应的位配置为1时,是外设功能。

P1SEL &=~0x01;配置P1.0为通用IO口就是P1_0可以输出0V也可以输出3.3V;从而来控制LED灯的亮和灭。

由于CC2530寄存器初始化有默认值:
P1SEL = 0x00;
P1DIR = 0x00;
P1INP = 0x00;
我们可以将命令进行简化,P1DIR I=0x01;就可以把P1_0配置为输出.
四 :相关代码

#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define LED1 P1_0 //定义P1.0口为LED1控制端

/****************************************************************************

  • 名 称: DelayMS()

  • 功 能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)

  • 入口参数: msec 延时参数,值越大,延时越久

  • 出口参数: 无
    ****************************************************************************/
    void DelayMS(uint msec)
    {
    uint i,j;

    for (i=0; i<msec; i++)
    for (j=0; j<535; j++);
    }

/****************************************************************************

  • 名 称: InitLed()
  • 功 能: 设置LED灯相应的IO口
  • 入口参数: 无
  • 出口参数: 无
    ****************************************************************************/
    void InitLed(void)
    {
    P1DIR |= 0x01; //P1.0定义为输出口
    }

/****************************************************************************

  • 程序入口函数
    ****************************************************************************/
    void main(void)
    {
    InitLed(); //设置LED灯相应的IO口

    while(1) //死循环
    {
    LED1 = 0; //点亮LED1
    DelayMS(1000); //延时1秒

      LED1 = 1;                //LED1熄灭
      DelayMS(1000);           //延时1秒
    

    }
    }

五、实验现象
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值