本文共 1799 字,大约阅读时间需要 5 分钟。
关于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; } } }}
转载地址:http://bnvqf.baihongyu.com/