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的LED闪烁灯操作系统摘要:随着科技更新迭代,智能电子更加不断充裕市场技术,大部分产品用上了单片机就能达到事半功倍的效果,LED照明已经被广泛应用到日常生活和工业企业建设中,使用LED这种新型的光源的灯具或照明设施,具有寿命长,节约电能的优点[[1]]。
本文基于CC2530的LED灯无线控制系统,采用C#语言编写了PC 端照明控制软件[[2]],并引入RGB混光、按键指数优化算法来控制LED灯的闪烁频率和时长,达到LED灯具的亮灯闪烁功能以此来实现基础照明灯的智能化和可操作性。
关键词:LED灯 CC2530 控制软件1 引言LED驱动电路的构思预备在整个设计中十分重要,其内部运转和构造直接影响LED灯的功能和寿命。
智能灯具设计主要由三部分构成,分别是LED阵列、驱动电路和控制电路,其中内部的驱动电路性能的优胜更是决定性因素。
单片机是LED驱动电源系统的核心部件,它控制着LED驱动电源的脉冲信号,能够提高电源输出的效率,同时提高设备能效[[3]]。
想要改变单片机三种颜色灯光实现整个照明和灯光调制,通过操作单片机的系统控制功能,再搭配三基色配色原理即可完成。
CC2530无线控制系统可调试灯具的使用时长和频率变化,通过软件编程来改变单一的灯光闪烁。
文章基于CC2530的LED灯无线控制系统,利用RGB混光原理、按键指数优化多种算法来控制LED灯的闪烁频率和时长,通过C#语言软件编译了PC端照明控制软件,以这样的操作来实现LED灯具的亮灯闪烁功能,会更完美的呈现出LED灯带给现代人不同的视觉效果。
2 系统总体设计方案图1系统总体设计方案/系统结构图2.1 系统硬件结构CC2530模块如下图:图2硬件展示图CC2530创建其系统内部的网络节点只需要很低的材料成本,主要是用于生活实际应用和科研项目的芯片开发板。
它包含一个增强型的8位8051微控制器内核,完全适应低功耗要求的系统,内部包含数字内核和外设,带约有1.8V低配供电设备,提供了电源管理功能一方面可以实现通过使用不同用电模式提高用电效率、节省电池资源;一方面开发板内部提供了一个具有外联无线收发器内有内核管制调控装置的无线控制模块接口,停止和执行某项程序、存储器的移动、控制使用内部文件、设置代码断点等都可以通过调试接口进行操作,并且提供相关指令可完成内核中全部步骤的单步调试,通过连接开发板和烧录程序就能达到四种功能状态:发出命令、读取状态、自主操作和确定无线设备时间。
按键控制流水灯设计报告一、项目名称:按键控制流水灯二、目的:通过对按键控制发光二极管项目的改变,设计出自己的方案,来加深对硬件技术的理解,同时锻炼关于硬件的编程技术,掌握keil等软件的使用。
三、硬件原理:数码管与发光二极管硬件电路图:芯片引脚电路图:按键与导航按键:四、软件原理:变量Key1,Key2,Key3分别代表第一个、第二个、第三个按键,值为零时表示按下了该按键。
那么可以写出一个判断条件,当这三个变量的值分别为1 时,就分别调用三个不同的函数,三个函数分别表示LED灯的三种不同的闪亮方式。
五、软件流程:首先判断哪一个变量的值为1,即哪一个按键被按下,然后就调用相应的函数。
六、关键代码:void main(){Init();P0=0x00;while(1){//其他两个key通过中断实现// if(Key3==0)// {// G_count=0;// while(G_count!=200);//延时10ms// while(!Key3)//等待直到释放按键// {// P0=0x33;// }// }if(Key1==0)fun2();if(Key2==0)fun3();if(Key3==0)fun4();}}七、操作说明:当把软件下载到电路板以后,给它插上电源,然后按下不同的按键,可以观察到LED灯亮。
八、存在的问题:原先的main()函数中只有KEY3,并没有Key1和Key2,所以暂时不清楚如何感应到按键一和按键二什么时候按下。
九、后续设计计划:可以设计更炫酷的亮灯方式。
以下是附加文档,不需要的朋友下载后删除,谢谢顶岗实习总结专题13篇第一篇:顶岗实习总结为了进一步巩固理论知识,将理论与实践有机地结合起来,按照学校的计划要求,本人进行了为期个月的顶岗实习。
这个月里的时间里,经过我个人的实践和努力学习,在同事们的指导和帮助下,对村的概况和村委会有了一定的了解,对村村委会的日常工作及内部制度有了初步的认识,同时,在与其他工作人员交谈过程中学到了许多难能可贵经验和知识。
CC2530中按键与LED研究ZStack-CC2530-2.4.0-1.4.0 中按键与LED研究hal_key.h和hal_key.c文件/* Switches (keys) */#define HAL_KEY_SW_1 0x01 // Joystick up#define HAL_KEY_SW_2 0x02 // Joystick right#define HAL_KEY_SW_5 0x04 // Joystick center#define HAL_KEY_SW_4 0x08 // Joystick left#define HAL_KEY_SW_3 0x10 // Joystick down#define HAL_KEY_SW_6 0x20 // Button S1 if available#define HAL_KEY_SW_7 0x40 // Button S2 if available#define MY_KEY7 0xF7;(自己加的)#define MY_KEY6 0xF6;#define MY_KEY5 0xF5;#define MY_KEY4 0xF4;/* Joystick */#define HAL_KEY_UP 0x01 // Joystick up#define HAL_KEY_RIGHT 0x02 // Joystick right#define HAL_KEY_CENTER 0x04 // Joystick center#define HAL_KEY_LEFT 0x08 // Joystick left#define HAL_KEY_DOWN 0x10 // Joystick down说明TI 板子上的那个joystick上下左右键分别有对应的普通按键;hal_key.c中有个读取键值的函数(后面几个是我自己加的),先研究下普通的按键;uint8 HalKeyRead ( void ){uint8 keys = 0;if (HAL_PUSH_BUTTON1()){keys |= HAL_KEY_SW_6;}if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active low */{keys |= halGetJoyKeyInput();}if(HAL_PUSH_BUTTON3()){keys |=MY_KEY7;}if(HAL_PUSH_BUTTON4()){keys |=MY_KEY6;}if(HAL_PUSH_BUTTON5()){keys |=MY_KEY5;}if(HAL_PUSH_BUTTON6()){keys |=MY_KEY4;}return keys;}hal_board_cfg.h文件中定义了/* ----------- Push Buttons ---------- */#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))#define PUSH1_POLARITY ACTIVE_HIGH(就是原值)#define PUSH1_SBIT P0_1uint8 HalKeyRead ( void )调用HAL_PUSH_BUTTON1() ,当HAL_PUSH_BUTTON1()==1时,就把键值赋给keys;(这边有改成低电平触发)。
计算机科学与技术学院实验报告课程名称:无线传感器网络原理与应用实验一CC2530 LED灯闪烁实验一、实验目的熟悉鼎轩 WSN 实验平台使用的基本步骤,熟悉 IAR 开发环境,掌握 CC2530 芯片 LED 对应的 GPIO 引脚,并且熟练掌握 LED 的使用。
二、实验内容1)安装 IAR 开发环境;2)控制红灯、绿灯、蓝灯(蓝灯、黄灯、绿灯)交替闪烁。
三、实验环境硬件:鼎轩 WSN 实验箱(汇聚网关、烧录线),PC 机;软件:IAR 软件。
四、实验步骤目前网关上有红、绿、蓝 3 个 LED 灯,还另有一个红色的 LED 工作指示灯,节点上有红、蓝、黄、绿 4 个 LED 灯,其中,红灯是工作指示灯,蓝灯和黄灯主要用于程序调试。
现在对 LED 灯的操作主要是点亮和关闭,下面是CC2530 中 LED部分的原理图。
LED 颜色, MCU 管脚,信号控制关系如下:对于网关板:对于节点板:要想通过编程 P1,P2 引脚控制 LED 的亮灭,必须设置对应的引脚方向为输出,对应的暂存器为 P1DIR,P2DIR。
P2DIR :D0~D4 设置 P2_0 到到 P2_4 的方向D7 、D6 位作为端口 0 外设优先级的控制1)打开鼎轩 WSN 实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关;2)安装好 IAR 开发环境以及驱动程序,详细方法见说明资料;3)用烧录线连接汇聚网关上的烧录接口与 PC 机 USB 接口,连接方法可参考相应的说明资料;4) 双击打开目录(/cc2530-simple-demo/LED_BLINK)下的工程图标 AUTO.eww 打开工程;5) 点击 IAR 中的图标按钮编译程序;6)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮将程序下载到汇聚网关上;7) 运行程序,可以观察到红灯和绿灯交替闪烁。
8) 修改程序代码,实现红、蓝、绿三个灯一起闪烁。
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输出供后极使用。