zigbee菜鸟笔记(三)基础实验点亮led灯

一.cc2330 IO端口

有问题发送邮件至468078841@qq.com
(一)io介绍
CC2530有21个数字输入/输出引脚,可以配置为通用数字I/O或外设I/O信号,配置为连接到ADC、定时器或USART外伤。这些I/O的用途可以通过一系列寄存器配置,由用户程序加以实现。
(二)IO 特性
I/O端口具备如下重要特性:

21个数字I/O引脚

可以配置为通用I/O或外部设备I/O

输入口具备上拉或下拉能力

具有外部中断能力

在这里插入图片描述

TIP:21个I/O引脚都可以用作于外部中断源入口。因此如果需要外部设备可以产生中断,外部中断功能也可以从睡眠模式唤醒设备。

(三)IO引脚
由电路图可以得知一共有51个可用IO端口,当用作通用I/O 时,引脚可以组成3 个8 位端口,端口0、端口1 和端口2,表示为P0、P1 和P2。其中,P0和P1 是完全的8 位端口,而P2 仅有5 位可用。所有的端口均可以通过SFR 寄存器P0、P1 和P2 位寻址和字节寻址。每个端口引脚都可以单独设置通用I/O 或外部设备I/O。除了两个高驱动输出口P1.0 和P1.1 各具备20 mA 的输出驱动能力之外,所有的输出均具备4 mA 的驱动
能力。

二.LED灯IO寄存器及其理解

TIP:我们的2530 LED分布在P1端口
如果我们需要通过代码控制LED的亮灭 那么我们就要通过代码将cc2530的寄存器功能设置为 普通IO口 且 配置为输出,下面我们讲解如何认识这两个寄存器

(一)寄存器PxSEL,其中x 为端口的标号0~2,用来设置端口的每个引脚为通用I/O 或者是外部设备I/O 信号。(这个寄存器控制端口功能 在下面我们叫其功能寄存器)
因为我们的灯在P1的IO口,所以我在这里只对P1端口进行讲解,如果存在其他疑问请发邮件联系,邮箱468078841@qq.com
在这里插入图片描述
1.我们要控制LED灯的闪烁就必须要将其设置为普通的IO口,

配置寄存器的方法:
将功能寄存器第一位端口1值0 P1SEL & = ~0x02;

解释:**0x02为16进制 将其转为二进制表示为 0000 0010 取反后为 1111 1101 (这里的二进制高低位分别对应上面表格的端口0到端口七) 这时候我们由于不知道P1SEL端口是处于什么状态 这时候我们只知道在这里我是要将P1.1为普通IO口 也就是第二位值0 这时候为了避免引起不必要的错误 我们选用&=学过C语言的都知道 1&任何数为任何数, 0&任何数为0 ,我们在这里可以保证 我们的代码P1SEL & = ~0x02只对第二位进行了操作改变

练习 : 将P1.3 P1.2 P1.1 P1.0设置为通用口

首先我们要提前取反 0000 1111 等于16 进制0x0F

  P1SEL &= ~0x0F

取反是因为我比较菜 前几位方便运算 个人习惯 不喜勿喷

significant:**在这里我们要理解八位二进制与P1处八个端口的映射对应关系,了解这个才可以保证以后学会其他寄存器操作。

(2)在任何时候,要改变一个端口引脚的方向,就使用寄存器PxDIR 来设置每个端口引脚为输入或输出。因此只要设置PxDIR 中的指定位为1,其对应的引脚口就被设置为输出了。(这个寄存器控制端口的输入输出在下面我们叫其输入输出寄存器)
在这里插入图片描述
1.我们要控制LED灯的闪烁就必须要将其设置为输出,
在前面我们已经知道如何见P1SEL如何设置了 在这里,我们就不提这里了 但是为了加强练习 我在这里设置几个小问题,希望可以独立完成

(1)端口1设置为输出口

 P1DIR  |= 0x01

在这里我用 |= 运算符是因为我们需要将这一位设置为1 1或上任何数为1 0或上任何数 为任何数,

(2)端口2和端口1一起设置为输出模式

P1DIR  |= 0x06

三.实战操作点亮LED灯

在上面我们已经知道了如何将端口设置为可以点亮LED灯的步骤 在这里我将讲述如何控制LED灯的亮灭

(一)了解端口
这个为我们的LED灯端口电路图,接下来的基础实验我也都会以这个电路图为模板写下去,
在这里插入图片描述
我们可以看到 这是一个二极管 当P1.1 P1.2,P1.3为低电平时灯就可以闪烁 在代码中 如果我们已经设置好之后 我们可以直接令端口等于0 则点亮 为1 则熄灭

(二)实战演示
题目要求,将D4,D2,D3,初始时全部熄灭,然后依次闪烁

#include "ioCC2530.h"  //引入头文件 类似C语言 #include"stdio.h" 

#define D4 P1_0   //宏  定义引脚为端口 方便记忆
#define D2 P1_1  
#define D3 P1_2  


void LED_INIT(void);    //函数申明  这里建议书写规范
void delay(unsigned int time);

void delay(unsigned int time)  //延时函数 这里是为了让程序多执行几次for循环 让函数延时
{ 
  for(unsigned char j = 0; j < time;j++)
  { 
    for(unsigned int i = 0; i < time; i++)
    {   
      
    }  
  }  
}
void LED_INIT(void)   //LED初始化函数
{ 
  P1SEL &= ~0x07;    // P1SEL  &= ~(0000 0111)P1SEL  &= (1111 1000)
  P1DIR |= 0x07;
  P1 = 0x07;
}


void main(void)
{
  LED_INIT();    //初始化                        
  while(1)
  {
    D4 = 0;   //D4亮
    delay(100);
    D4 = 1;   //D4灭
    
    D2 = 0;
    delay(100);
    D2 = 1;
    
    D3 = 0;
    delay(100);
    D3 = 1;
    
    
    
  }    
}


zigbee菜鸟笔记(四)基础实验检测按键输入点击

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值