3、ZigBee 开发教程之基础篇—GPIO 输出控制实验-控制 Led 亮灭

36 篇文章 88 订阅 ¥49.90 ¥99.00

1、实验的目的

1)通过实验掌握 CC2530 芯片 GPIO 的配置方法

2)掌握 Led 驱动电路及开关 Led 的原理

2、实验设备

硬件:1、PC机一台;2、ZigBee(CC2530)(底板、核心板、仿真器、USB 线)开发板一套

软件:Windows 10系统,IAR for 8051 集成开发环境

3、实验相关电路图

在这里插入图片描述
  发光二极管是属于二极管的一种,具有二级管单向导电特性,即只有在正向电压(二极管的 正极接正,负极接负)下才能导通发光。P1.0 引脚接发光二极管(D1)的负极,所以 P1.0 引脚输出 低电平 D1 亮,P1.0 引脚输出高电平 D1 熄灭, D2, D3 同理。

4、实验相关寄存器

  操作 P1、P0端口我们需要掌握相关寄存器的作用和配置方法。如下表所示:

寄存器作用描述
P0 (0x80)端口0端口0。通用I/O端口。可以从SFR位寻址。
该CPU内部寄存器可以从XDATA (0x7080)读,但是不能写。
P1 (0x90)端口1端口1。通用I / O端口。可以从SFR位寻址。
该CPU内部寄存器可以从XDATA (0x7090)读,但是不能写。
P0SEL (0xF3)端口0 功能选择P0.7到 P0.0功能选择
0: 通用I / O
1: 外设功能
P1SEL (0xF4)端口1 功能选择P1.7 到P1.0功能选择
0: 通用I / O
1: 外设功能
P0DIR (0xFD)端口 0方向P0.7到P0.0的I/O方向
0: 输入
1: 输出
P1DIR (0xFE)端口1 方向P1.7到P1.0的I/O方向
0: 输入
1: 输出
P0INP (0x8F)端口 0输入模式P0.7到P0.0的I/O输入模式
0: 上拉/下拉(见P2INP (0xF7)–端口2输入模式)
1: 三态
P1INP (0xF6)端口1 输入模式P1.7到P1.2的I/O输入模式
0: 上拉/下拉(见P2INP (0xF7)–端口2输入模式)
1: 三态
P1.1到P1.0 不使用

  按照表格寄存器的内容,对 P1.0、P1.1、P0.4 口进行配置,当 P1.0、P1.1、P0.4 输出低电平时 D1、D2、D3 被点亮。所以配置如下:

  P1SEL &=~0x03; //配置 P10、P11为通用 IO 口,默认为 0 的,可以不设

  P1DIR |= 0x03; //P10、P11 定义为输出

  P0SEL &=~0xEF;//配置 P04为通用 IO 口,默认为 0 的,可以不设

  P0DIR |= 0x10; // P04 定义为输出

  由于 CC2530 寄存器初始化时默认值为(详细说明请参考《CC2530 中文数据手册完全版.pdf》):

  P1SEL = 0x00; //通用IO口
  P1DIR = 0x00; //方向为输入
  P1INP = 0x00; //输入模式为上拉/下拉

  P0SEL = 0x00; //通用IO口
  P0DIR = 0x00; //方向为输入
  P0INP = 0x00; //输入模式为上拉/下拉

  所以 IO 口初始化我们可以简化初始化指令:

  P1DIR |= 0x03; //配置 P1.0、P1.1为输出
  P0DIR |= 0x10; //配置 P0.4为输出

5、源码分析

/*******************************************************************************
 * @文件名 :CC2530IOTest.c
 * @作  者 :GeekYang
 * @版  本 :V1.0.0
 * @描  述 :CC2530 GPIO 实验
 *******************************************************************************/

/***************************** 头文件 ****************************/
#include <ioCC2530.h>

/***************************** 宏定义 ***************************/
//类型定义
#define uint  unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0	//定义LED1为P10口控制
#define LED2 P1_1	//定义LED2为P11口控制
#define LED3 P0_4	//定义LED3为P04口控制

/****************************** 函数声明 ******************************/
void Delay(uint);		//延时函数
void InitIO(void);		//初始化LED控制IO口函数


/****************************** 函数定义 ******************************/

/************************************************
函数名称:Delay
功    能:延时
参    数:无
返 回 值:无
*************************************************/
void Delay(uint n)
{
  uint i;
  for(i = 0;i<n;i++);
  for(i = 0;i<n;i++);
  for(i = 0;i<n;i++);
  for(i = 0;i<n;i++);
  for(i = 0;i<n;i++);
}
/************************************************
函数名称:InitIO
功    能:GPIO初始化
参    数:无
返 回 值:无
************************************************/
void InitIO(void)
{
  P1DIR |= 0x03;  //P10、P11定义为输出
  P0DIR |= 0x10;  //P04定义为输出
  LED1 = 1;
  LED2 = 1;
  LED3 = 1;	//LED灯初始化为关
}

/************************************************
函数名称:main
功    能:主函数
参    数:无
返 回 值:无
***********************************************/
void main(void)
{
  InitIO();		//初始化LED灯控制IO口
  
  while(1)                //死循环
  {  
    LED1 = !LED1;           // LED1灯闪一次
    Delay(50000);           
    LED2 = !LED2;           // LED2灯闪一次
    Delay(50000);            
    LED3 = !LED3;           // LED3灯闪一次
    Delay(50000);
    
  }
}

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek@Yang

码字不易,来点鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值