一.cc2530 IO端口
关于CC2530的IO端口介绍 我们在前面一章已经很详细的阐述了,如果还没有掌握点击这里
二.按键寄存器及其理解
按键在我们的CC2530芯片中和前面的LED灯一样也占用一个引脚,基于上节课的了解我们知道,要想控制LED灯的亮灭首先就要设置LED灯端口为普通IO口且为输出。按键与LED一样都属于简单的端口应用所以我们也需要对PXSEL和PXDIR进行操作,
在这里我们需要将按键是设置为普通IO口,且为输出。
(一)复习寄存器
寄存器PxSEL,其中x 为端口的标号0~2,用来设置端口的每个引脚为通用I/O 或者是外部设备I/O 信号。
在任何时候,要改变一个端口引脚的方向,就使用寄存器PxDIR 来设置每个端口引脚为输入或输出。因此只要设置PxDIR 中的指定位为1,其对应的引脚口就被设置为输出了。
(二)按键初始化模拟
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,和上次是不一样的,并且本次灯处于高电位点亮,低电位熄灭,所以我们在学习前期就要养成学会看电路图的习惯,
这是本次的按键,在图中为SW1(keyswitch),可以看到按键与P1.2相连,当按键按下时可以看到P1.2是处于低电平(这里要是看不明白,可以询问一下你们的数电或者模电老师或者发邮件到468078841@qq.com)
(二)实战演习
题目要求,将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;
}
}
}
}