标题:
CC2530远程控制灯亮灭程序
[打印本页]
作者:
fairy123
时间:
2019-9-27 09:25
标题:
CC2530远程控制灯亮灭程序
一,按 A模块的按键---控制 B模块的 LED 亮灭
1、实验需求:
硬件需求:cc2530 模块两个、调试器一个。
单片机源程序如下:
/***********************************************************************************
网蜂ZigBee-无线点灯实验代码 详细解释请参考《ZigBee实战演练》中无线电灯相关内容
实验操作:
第一步: 找到下面内容,把appLight(); 注释掉,下载到发射模块。
appSwitch(); //节点为按键S1 P1_2
// appLight(); //节点为指示灯LED1 P1_0
第二步:找到相同位置,这次把appSwitch();注释掉,下载到接收模块。
//appSwitch(); //节点为按键S1 P0_4
appLight(); //节点为指示灯LED1 P1_0
完成烧写后上电,按下发射模块的S1按键,可以看到接收模块的LED1被点亮。
*********************************************************************************
Filename: light_switch.c
Description: This application function either as a light or a
switch toggling the ligh. The role of the
application is chosen in the menu with the joystick at initialisation.
Push S1 to enter the menu. Choose either switch or
light and confirm choice with S1.
Joystick Up: Sends data from switch to light
***********************************************************************************/
/***********************************************************************************
* INCLUDES
*/
#include <hal_lcd.h>
#include <hal_led.h>
#include <hal_joystick.h>
#include <hal_assert.h>
#include <hal_board.h>
#include <hal_int.h>
#include "hal_mcu.h"
#include "hal_button.h"
#include "hal_rf.h"
#include "util_lcd.h"
#include "basic_rf.h"
/***********************************************************************************
* CONSTANTS
*/
// Application parameters
#define RF_CHANNEL 25 // 2.4 GHz RF channel
// BasicRF address definitions
#define PAN_ID 0x2007
#define SWITCH_ADDR 0x2520
#define LIGHT_ADDR 0xBEEF
#define APP_PAYLOAD_LENGTH 1
#define LIGHT_TOGGLE_CMD 0
// Application states
#define IDLE 0
#define SEND_CMD 1
// Application role
#define NONE 0
#define SWITCH 1
#define LIGHT 2
#define APP_MODES 2
/***********************************************************************************
* LOCAL VARIABLES
*/
static uint8 pTxData[APP_PAYLOAD_LENGTH];
static uint8 pRxData[APP_PAYLOAD_LENGTH];
static basicRfCfg_t basicRfConfig;
// Mode menu
static menuItem_t pMenuItems[] =
{
#ifdef ASSY_EXP4618_CC2420
// Using Softbaugh 7-seg display
" L S ", SWITCH,
" LIGHT ", LIGHT
#else
// SRF04EB and SRF05EB
"Switch", SWITCH,
"Light", LIGHT
#endif
};
static menu_t pMenu =
{
pMenuItems,
N_ITEMS(pMenuItems)
};
#ifdef SECURITY_CCM
// Security key
static uint8 key[]= {
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
};
#endif
/***********************************************************************************
* LOCAL FUNCTIONS
*/
static void appLight();
static void appSwitch();
static uint8 appSelectMode(void);
/***********************************************************************************
* @fn appLight
*
* @brief Application code for light application. Puts MCU in endless
* loop waiting for user input from joystick.
*
* @param basicRfConfig - file scope variable. Basic RF configuration data
* pRxData - file scope variable. Pointer to buffer for RX data
*
* @return none
*/
static void appLight()
{
halLcdWriteLine(HAL_LCD_LINE_1, " W e B e e ");
halLcdWriteLine(HAL_LCD_LINE_2, " ZigBee CC2530 ");
halLcdWriteLine(HAL_LCD_LINE_4, " LIGHT ");
#ifdef ASSY_EXP4618_CC2420
halLcdClearLine(1);
halLcdWriteSymbol(HAL_LCD_SYMBOL_RX, 1);
#endif
// Initialize BasicRF
basicRfConfig.myAddr = LIGHT_ADDR;
if(basicRfInit(&basicRfConfig)==FAILED) {
HAL_ASSERT(FALSE);
}
basicRfReceiveOn();
// Main loop
while (TRUE) {
while(!basicRfPacketIsReady());
if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) {
if(pRxData[0] == LIGHT_TOGGLE_CMD) {
halLedToggle(1);
}
}
}
}
/***********************************************************************************
* @fn appSwitch
*
* @brief Application code for switch application. Puts MCU in
* endless loop to wait for commands from from switch
*
* @param basicRfConfig - file scope variable. Basic RF configuration data
* pTxData - file scope variable. Pointer to buffer for TX
* payload
* appState - file scope variable. Holds application state
*
* @return none
*/
static void appSwitch()
{
halLcdWriteLine(HAL_LCD_LINE_1, " GEC-EDU ");
halLcdWriteLine(HAL_LCD_LINE_2, " ZigBee CC2530 ");
halLcdWriteLine(HAL_LCD_LINE_4, " SWITCH ");
#ifdef ASSY_EXP4618_CC2420
halLcdClearLine(1);
halLcdWriteSymbol(HAL_LCD_SYMBOL_TX, 1);
#endif
// Initialize BasicRF
basicRfConfig.myAddr = SWITCH_ADDR;
if(basicRfInit(&basicRfConfig)==FAILED) {
HAL_ASSERT(FALSE);
}
pTxData[0] = LIGHT_TOGGLE_CMD;
// Keep Receiver off when not needed to save power
basicRfReceiveOff();
// Main loop
while (TRUE) {
//if( halJoystickPushed() )**********************by boo
if(halButtonPushed()==HAL_BUTTON_1)//**************by boo
{
basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);
// Put MCU to sleep. It will wake up on joystick interrupt
halIntOff();
halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global
// interrupt enable
halIntOn();
}
}
}
/***********************************************************************************
* @fn main
*
* @brief This is the main entry of the "Light Switch" application.
* After the application modes are chosen the switch can
* send toggle commands to a light device.
*
* @param basicRfConfig - file scope variable. Basic RF configuration
* data
* appState - file scope variable. Holds application state
*
* @return none
*/
void main(void)
{
uint8 appMode = NONE;
// Config basicRF
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.ackRequest = TRUE;
#ifdef SECURITY_CCM
basicRfConfig.securityKey = key;
#endif
// Initalise board peripherals
halBoardInit();
halJoystickInit();
// Initalise hal_rf
if(halRfInit()==FAILED) {
HAL_ASSERT(FALSE);
}
// Indicate that device is powered
halLedSet(2); //关闭LED2
halLedSet(1); //关闭LED1
/***********************************************
// Print Logo and splash screen on LCD
utilPrintLogo("Light Switch");
// Wait for user to press S1 to enter menu
while (halButtonPushed()!=HAL_BUTTON_1);
halMcuWaitMs(350);
halLcdClear();
// Set application role
appMode = appSelectMode();
halLcdClear();
// Transmitter application
if(appMode == SWITCH) {
// No return from here
appSwitch();
}
// Receiver application
else if(appMode == LIGHT) {
// No return from here
appLight();
}
**************************************/
/************Select one and shield to another***********by boo*/
//appSwitch(); //节点为按键S1 P1_2
appLight(); //节点为指示灯LED1 P1_0
// Role is undefined. This code should not be reached
HAL_ASSERT(FALSE);
}
/****************************************************************************************
* @fn appSelectMode
*
* @brief Select application mode
*
* @param none
*
* @return uint8 - Application mode chosen
*/
static uint8 appSelectMode(void)
{
halLcdWriteLine(1, "Device Mode: ");
return utilMenuSelect(&pMenu);
}
复制代码
所有资料51hei提供下载:
CC2530 BasicRF无线点灯部署.7z
(525.14 KB, 下载次数: 7)
2019-9-27 17:40 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-9-27 17:42
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者:
ssd4561
时间:
2019-9-28 13:25
学习了》》》厉害,英语牛逼
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1