1.实验目的:

a.通过实验掌握CC2530芯片GOIP的配置方法

b.掌握Led驱动电路以及开光Led的原理

c.查看cc2530-datasheet.pdf手册查找各个寄存器的意思。

二、实验相关原理图

android gpio led灯点亮_死循环


android gpio led灯点亮_初始化_02


CC2530核心板:

CC2530有3个端口,分别是P0、P1、P2,我们通过控制IO操作来完成实验。第一个LED灯连接的是P1_0

android gpio led灯点亮_寄存器_03

android gpio led灯点亮_android gpio led灯点亮_04


由于发光二极管是单向导电特性,只有给正向电压才能够导通,也就是P1_0得输出低电平,D1就会发亮,如果P1_0输出3.3V,D1就会灭。

代码中 我们用宏定义来控制P1_0

android gpio led灯点亮_android gpio led灯点亮_05


延迟函数(1ms)中535这个值是通过示波器测量出来的,也可以修改这个值判断波形 得到延时函数延时的时间。

android gpio led灯点亮_寄存器_06

三、配置寄存器

初始化:设置LED灯相应的IO口LED讲P1_0定义为输出口

死循环给LED一个低电平,LED被点亮延时1s后

给LED一个高电平,熄灭LED灯,延时1s

再不断循环。

android gpio led灯点亮_android gpio led灯点亮_07


搜索P1DIR表示的是端口P1的方向寄存器:用来分别控制P1_0~P1_7,这8个IO口是输入还是输出状态。

比如输出0V或3.3V就可以用来开关LED灯的亮和灭,如果是接在继电器上就可以控制继电器的开和关。

android gpio led灯点亮_死循环_08


操作P1.0还需要掌握相关寄存器的作用和配置方法:

android gpio led灯点亮_android gpio led灯点亮_09

P1SEL:

android gpio led灯点亮_寄存器_10

android gpio led灯点亮_寄存器_11


android gpio led灯点亮_初始化_12


从芯片手册中查找到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秒

}
}

五、实验现象

android gpio led灯点亮_android gpio led灯点亮_13

android gpio led灯点亮_android gpio led灯点亮_14