cc2530按键控制流水灯
- 格式:doc
- 大小:27.50 KB
- 文档页数:7
CC2530学习路线-基础实验-GPIO按键控制LED灯亮灭(2)⽬录1.前期预备知识1.1 新⼤陆Zigbee模块按键电路图由上图可知,Zigbee模块的SW1按钮连接在P1.2端⼝上,当SW1导通,P1.2电平从3.3V被拉低接地。
所以P1.2输⼊模式为下拉输⼊.1.2 CC2530相关寄存器寄存器名称寄存器作⽤寄存器描述P1 (0x90)*控制端⼝1的⾼低电平端⼝1.通⽤I/O。
可以通过SFR位寻址P1SEL(0xF4)端⼝1 8个⼦端⼝的功能选择P1SEL的8个bit分别代表 => P1.7~P1.0的功能选择.值为 0:代表通⽤I/0(GPIO)功能.值为 1 : 代表外设功能P1DIR(0xFE)端⼝1 输⼊输出选择P1DIR的bit定义同P1SEL;值为 0:代表从外部输⼊信号⾄CC2530;值为 1:代表从CC2530输出信号⾄外部P1INP (0xF6)端⼝1 输⼊模式选择P1INP定义为P1.7~P1.2的I/O输⼊模式。
其中P1.0和P1.1是没有上拉/下拉功能。
值为 0:上拉/下拉。
值为 1:三态(⾼电平、低电平、⾼阻态)P2INP (0xINP)端⼝2 输⼊模式及其它端⼝选择P2INP⽐较特殊,因为P2端⼝引出的引脚只有3个,所以P2INP还有其它功能。
bit 0 ~ 4 : P2.4~P2.0的输⼊模式。
0 : 上拉/下拉; 1:三态bit 5 : 设置端⼝0上拉/下拉选择。
对端⼝P0上⾯的所有引脚设置为上拉/下拉输⼊ 0 : 上拉; 1: 下拉bit 6 : 同bit 5功能,但是是设置端⼝1上所有引脚bit 7 : 同bit5功能,但是是设置端⼝2上的所有引脚P1IEN(0x8D)端⼝1 中断屏蔽端⼝P1.7~P1.0的中断使能(也就是说中断是否Enable*(打开))0 : 中断禁⽤1 : 中断使能PICTL(0x8C)端⼝中断控制 P0ICON(bit0)端⼝0、1、2输⼊模式下的中断配置。
CC2530外部中断实现按键控制LED闪烁中断任务:1.系统初始化D1(P1.0)、D2(P1.1)闪⼀次灭掉。
2.按⼀次KEY1(P0.1),D1、D2同时闪烁;再按⼀次KEY1,D1、D2灭掉。
3.按⼀次KEY2(P0.1),D1、D2交替闪烁;再按⼀次KEY2,D1、D2灭掉。
#include <ioCC2530.h>#define D1 P1_0 //定义P1.0⼝为D1控制端#define D2 P1_1 //定义P1.1⼝为D2控制端#define KEY1 P0_1 //定义P0.1⼝为S1控制端#define KEY2 P1_2#define ON 1 //⾼电平点亮#define OFF 0//低电平熄灭typedef unsigned char uchar;typedef unsigned int uint;uchar KeyValue0=0;uchar KeyValue1=0;void Delay(uint time)//延时函数{uint i,j;for (i=0; i<time; i++)for (j=0; j<530; j++);}void InitLed(void)//初始化LED{P1SEL &= ~0x03;P1DIR |= 0x03;Delay(1000);//默认点亮LED,因此直接利⽤延时函数即可,⽆需重复操作D1=D2=OFF;}void InitKey()//初始化外部中断{P0IEN |= 0x2; // P0.1 设置为中断⽅式 1:中断使能P1IEN |= 0x4;PICTL |= 0x3; //下降沿触发IEN1 |= 0x20; //允许P0⼝中断;IEN2 |= 0x10; //允许P1⼝中断;EA = 1; //打开中断}void Key_5(){if(KeyValue0 == 1){D2 = D1 = ON;}else if(KeyValue0 == 2){D2 = D1 = OFF;KeyValue0 = 0; //产⽣中断保存中断状态}}void Key_4(){while(KeyValue1 == 1){D1 = ON;Delay(100);D2 = ON;D1 = OFF;Delay(100);D2 = OFF;}while(KeyValue1 == 2){D1 = D2 = OFF;KeyValue1 = OFF; //产⽣中断保存中断状态}}#pragma vector = P0INT_VECTOR__interrupt void P0_ISR(void){if(P0IFG &= 0x02) //按键中断{Delay(10); //延时去抖if(KeyValue0==0) //按键中断{KeyValue0 = 1; //产⽣中断保存中断状态}else if(KeyValue0==1){KeyValue0 = 2; //产⽣中断保存中断状态}}P0IFG = 0; //清中断标志P0IF = 0; //清端⼝0中断标志}#pragma vector = P1INT_VECTOR__interrupt void P1_ISR(void){if(P1IFG &= 0x04) //按键中断{Delay(10);if(KeyValue1==0) //按键中断{KeyValue1 = 1; //产⽣中断保存中断状态1}else if(KeyValue1==1){KeyValue1 = 2; //产⽣中断保存中断状态2}}P1IFG = 0; //清中断标志P1IF = 0; //清端⼝1中断标志}/**************************************************************************** * 程序⼊⼝函数****************************************************************************/ void main(void){InitLed(); //设置LED灯相应的IO⼝InitKey(); //设置KEY相应的IO⼝外部中断while(1){Key_4();Key_5();}}。
cc2530按键控制流水灯本次设计用LED1,LED2,LED3 灯及按键S1 为外设。
采用P10、P11、P14 口为输出口,驱动LED1/LED2/LED3,P01 口为输入口,接受按键信号输入(高电平为按键信号)。
1.高性能2.4G 射频模块Q2530RFQ2530RF是丘捷技基于TI公司第二代2.4GHz IEEE 802.15.4 /RF4CE/ZigBee的第二代片上系统解决方案CC2530 F256的全功能模块,集射频收发及MCU控制功能于一体。
外围原件包含一颗32MHz晶振和一颗32.768KHz晶振及其他一些阻容器件。
射频部分采用巴伦匹配和外置高增益SMA天线,接收灵敏度高,发送距离远,空旷环境最大传输距离可达400米。
模块引出CC2530所有IO口,便于功能评估与二次开发。
2.多功能开发板Q2530EB多功能扩展板Q2530EB 可支持多种射频主控模块(例如Q2530RF等),配置有串口液晶显示接口,USB供电接口,DC 5V电源接口,电池接口,RS232接口,DEBUG接口,五向按键及指示灯,红外遥控信号接收/发射等模块。
所有的外设均通过SPI总线/UART /DEBUG等接口与射频模块Q2530RF 相连,并完全受Q2530RF 控制和访问。
多功能仿真扩展板Q2530EB 采用三种电源供电方式:DC 5V供电、USB接口供电、电池供电,可在插座P5设置跳线选择,PIN1-PIN2 为电池供电,PIN2-PIN3 为外接直流电源或者USB接口供电。
电源开关为P4。
Q2530EB 板卡背面的电池盒可放置3节5号干电池,输出电压3.4~4.5V,板载电源电路将其调整到+3.3V 稳定的直流电压输出供后级使用。
当电池电压低于3.4V 时,应更换电池以保持模块正常工作。
Q2530EB 带有1个DC 5V的电源适配器接口P2和一个USB接口P1,输入电压经过稳压器降压为+3.3V输出供后极使用。
通过这个实验,可以掌握通过CC2530控制外设的基本方法。
本次的实验所要做的让L ED1、LED2、LED3、LED4实现走马灯式的闪烁。
CC2530芯片I/O对照表CC2530的I/O控制口一共有21个,分成3组,分别是P0、P1和P2;由上面的对照表可以看出LED1所对应的I/O口为P1_0,LED2所对应的I/O口为P1_1,LED3所对应的I/O口为P1_4,LED4所对应的I/O为P0_1;下面我们来看一下本次实验所用到的控制寄存器中每一位的取值所对应的意义:P1DIR(P1方向寄存器,P0DIR同理):P1SEL(P1功能选择寄存器,P0SEL同理):寄存器的设置:将控制寄存器的某一位置1:例:P1DIR|= 0X02;解释:”|=“表示按位或运算,0X02为十六进制数,转换成二进制数为0000 0010,若P1DIR原来的值为00110000,或运算后P1DIR的值为0011 0010。
根据上面给出的取值表可知,按位与运算后P1_1的方向改为输出,其他I/O口方向保持不变。
将控制寄存器某一位清0:例:P1DIR&= ~0X02;解释:”&=“表示按位与运算,”~“运算符表示取反,0X02为0000 0010,即~0X02为1111 1101。
若P1DIR原来的值为00110010,与运算后P1DIR的值为0011 0000。
源代码#includ e <ioCC2530.h>#define uint unsign ed int#define ucharunsign ed char//定义控制灯的端口#define RLED P1_0 //定义LED1为P1.0口控制#define GLED P1_1 //定义LED2为P1.1口控制#define YLED P1_4 //定义LED3为P1.4口控制#define BLED P0_1 //定义LED4为P0.1口控制//函数声明void Delay(uint); //延时函数void InitIO(void); //初始化LED控制IO口函数void Delay(uint n) //延时函数{uinti; //定义一个变量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++);}void InitIO(void) //初始化IO口程序{P1DIR|= 0x13; //P1_0、P1_1、P1_4定义为输出 P0DIR|= 0x02; //P0_1定义为输出RLED = 1;GLED = 1;YLED = 1;BLED = 1; //将4盏LED灯都打开}void main(void){InitIO(); //初始化while(1) //死循环让循环内的代码不断执行{RLED = !RLED; // LED1灯若亮着,则关闭LED1灯,否则打开LE D1灯Delay(10000); //延时GLED = !GLED;Delay(10000);YLED = !YLED;Delay(10000);BLED = !BLED;Delay(10000);}}实验小结:为什么使用P1_0变量名就能访问外设:I/O编址有两种方式:独立编址与统一编址,无论是使用哪种编址,访问外设时都需要指出外设的地址。
CC2530应⽤——按键控制灯光状态变化独⽴新建⼯程并编写、编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:【1】程序开始运⾏:D4灯闪烁,D3、D5、D6灯熄灭。
【2】按下模块上的SW1按键松开后,实现D5、D6灯轮流闪烁。
【3】再次按下SW1按键,D5、D6灯灭。
【4】重复上述两个步骤。
此题需要定义⼀个灯光状态的标志位。
通过按键的标志位有三个状态。
状态1:D4灯闪烁,D3、D5、D6灯熄灭。
状态2:D5、D6灯轮流闪烁。
状态3:D5、D6灯灭。
1 #include "ioCC2530.h"23#define D3 P1_04#define D4 P1_15#define D5 P1_36#define D6 P1_47#define SW1 P1_289 unsigned char stat = 0; //灯光状态标志1011/*=======================简单的延时函数========================*/12void Delay(unsigned int t)13 {14while(t--);15 }16/*=======================端⼝初始化函数========================*/17void Init_Port()18 {19 P1SEL &= ~0x1b; //将P1_0,P1_1,P1_3,P1_4设置为通⽤I/O端⼝20 P1DIR |= 0x1b; //将P1_0,P1_1,P1_3,P1_4设置为输出⽅向21 P1 &= ~0x1b; //关闭4个LED灯2223 P1SEL &= ~0x04; //将P1_2设置为通⽤I/O端⼝24 P1DIR &= ~0x04; //将P1_2设置为输⼊⽅向25 P1INP &= ~0x04; //将P1_2设置为上拉/下拉26 P2INP &= ~0x40; //将P1_2设置为上拉27 }2829/*=====================D4灯闪烁函数======================*/30void D4_Flicker()31 {32 D4 = 1;33 Delay(60000);34 D4 = 0;35 Delay(60000);36 }3738/*=====================D5D6灯闪烁函数======================*/39void D5D6_Flicker()40 {41 D3 = 0;42 D4 = 0;43 D5 = 1;44 Delay(60000);45 D5 = 0;46 Delay(60000);47 D6 = 1;48 Delay(60000);49 D6 = 0;50 Delay(60000);51 }5253/*=======================按键扫描函数=========================*/54void Scan_Keys()55 {56if(SW1 == 0) //发现有SW1按键信号57 {58 Delay(100); //延时⽚刻,去抖动处理59if(SW1 == 0) //确认为SW1按键信号60 {61if(stat == 0)62 {63 stat = 1;64 }65else if(stat == 1) //重复66 {67 stat = 2;68 }69else if(stat == 2)70 {71 stat = 1;72 }7374 }75 }76 }7778/*==========================主函数============================*/ 79void main()80 {81 Init_Port(); //端⼝初始化82while(1)83 {84 Scan_Keys(); //按键扫描85switch(stat)86 {87case0: //上电状态,D4闪烁88 D4_Flicker();89break;90case1: //运⾏状态1:D5和D6闪烁91 D5D6_Flicker();92break;93case2: //运⾏状态2:D5和D6熄灭94 D5 = 0;95 D6 = 0;96break;97 }98 }99 }View Code。
cc2530按键控制流水灯
本次设计用LED1,LED2,LED3 灯及按键S1 为外设。
采用P10、P11、P14 口为输出口,驱动LED1/LED2/LED3,P01 口为输入口,接受按键信号输入(高电平为按键信号)。
1.高性能
2.4G 射频模块Q2530RF
Q2530RF是丘捷技基于TI公司第二代2.4GHz IEEE 802.15.4 /
RF4CE/ZigBee的第二代片上系统解决方案CC2530 F256的全功能模块,集射频收发及MCU控制功能于一体。
外围原件包含一颗32MHz晶振和一颗32.768KHz晶振及其他一些阻容器件。
射频部分采用巴伦匹配和外置高增益SMA天线,接收灵敏度高,发送距离远,空旷环境最大传输距离可达400米。
模块引出CC2530所有IO口,便于功能评估与二次开发。
2.多功能开发板Q2530EB
多功能扩展板Q2530EB 可支持多种射频主控模块(例如Q2530RF等),配置有串口液晶显示接口,USB供电接口,DC 5V电源接口,电池接口,RS232接口,DEBUG接口,五向按键及指示灯,红外遥控信号接收/发射等模块。
所有的外设均通过SPI总线/UART /DEBUG等接口与射频模块Q2530RF 相连,并完全受Q2530RF 控制和访问。
多功能仿真扩展板Q2530EB 采用三种电源供电方式:DC 5V供电、USB接口供电、电池供电,可在插座P5设置跳线选择,PIN1-PIN2 为电池供电,PIN2-PIN3 为外接直流电源或者USB接口供电。
电源开关为P4。
Q2530EB 板卡背面的电池盒可放置3节5号干电池,输出电压3.4~4.5V,板载电源电路将其调整到+3.3V 稳定的直流电压输出供后级使用。
当电池电压低于3.4V 时,应更换电池以保持模块正常工作。
Q2530EB 带有1个DC 5V的电源适配器接口P2和一个USB接口P1,输入电压经过稳压器降压为+3.3V输出供后极使用。