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

一.cc2530 IO端口

关于CC2530的IO端口介绍 我们在前面一章已经很详细的阐述了,如果还没有掌握点击这里

二.按键寄存器及其理解

按键在我们的CC2530芯片中和前面的LED灯一样也占用一个引脚,基于上节课的了解我们知道,要想控制LED灯的亮灭首先就要设置LED灯端口为普通IO口且为输出。按键与LED一样都属于简单的端口应用所以我们也需要对PXSEL和PXDIR进行操作,


在这里我们需要将按键是设置为普通IO口,且为输出。

(一)复习寄存器

寄存器PxSEL,其中x 为端口的标号0~2,用来设置端口的每个引脚为通用I/O 或者是外部设备I/O 信号。
zigbee菜鸟笔记(四)基础实验检测按键输入_第1张图片
在任何时候,要改变一个端口引脚的方向,就使用寄存器PxDIR 来设置每个端口引脚为输入或输出。因此只要设置PxDIR 中的指定位为1,其对应的引脚口就被设置为输出了。zigbee菜鸟笔记(四)基础实验检测按键输入_第2张图片
(二)按键初始化模拟

1.假设按键是处于端口1

P1SEL &= ~0x02//0x02 = (0000 0010) 取反 (1111 1101) 
P1DIR &= ~0x02;//设置为输入所以也是设置为0

2.假设按键处于端口2

P1SEL &= ~0x04;
P1DIR &= ~0x04;

三.实战操作按键输入监测

(一)了解端口
通过电路图可以看出 这次的LED端口 分别是P1.0 P1.1,P1.3,P1.4,和上次是不一样的,并且本次灯处于高电位点亮,低电位熄灭,所以我们在学习前期就要养成学会看电路图的习惯,
zigbee菜鸟笔记(四)基础实验检测按键输入_第3张图片

这是本次的按键,在图中为SW1(keyswitch),可以看到按键与P1.2相连,当按键按下时可以看到P1.2是处于低电平(这里要是看不明白,可以询问一下你们的数电或者模电老师或者发邮件到[email protected]
zigbee菜鸟笔记(四)基础实验检测按键输入_第4张图片
(二)实战演习
题目要求,将D3,D4,D5,D6初始时全部熄灭,当按下时LED灯全部处于点亮的状态,松手则处于熄灭,依次往复;

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

#define LED1 P1_0     // P1_0定义为P1.0
#define LED2 P1_1     // P1_1定义为P1.1
#define LED3 P1_3     // P1_0定义为P1.3
#define LED4 P1_4     // P1_0定义为P1.4
#define SW1 P1_2      // P1_2定义为P1.2 


void IO_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 IO_INIT(void)   
{ 
  P1SEL &= ~0x1F; //0001 1111 取反全部设置为0
  P1DIR |= 0x1B; //0001 1011  灯全部输出
  P1DIR &= ~0x02; //0000 0010  取反按键者设置为输入
  P1 &= ~0x1B; //将灯的端口置0
}


void main(void)
{
  IO_INIT();    //初始化                        
  while(1)
  {
    if(SW1 == 0)	//低电平有效
    {  
      delay(50);	//检测到按键 防止抖动
      if(SW1 == 0)	//前面定义了 #define SW1 P1.2
      { 
        while(!SW1)  //按键按住期间,灯亮
        {
          P1 |= 0x1B;
        }
        P1 &= ~0x1B;             
      }  
    }    
  }
}

余呆呆的java基础欢迎点击

你可能感兴趣的:(菜鸟自学zigbee,zigbee入门,zigbee,物联网,zigbee)