cc2530按键控制led灯闪烁
时间: 2023-09-01 08:07:46 浏览: 106
以下是使用cc2530芯片和Z-Stack协议栈控制LED灯闪烁的示例代码:
```
#include "ZComDef.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "OnBoard.h"
#include "SampleApp.h"
#include "DebugTrace.h"
#include "ZDProfile.h"
#include "ZDObject.h"
#include "ZDConfig.h"
#include "hal_drivers.h"
#include "hal_key.h"
#define SAMPLEAPP_ENDPOINT 20
#define SAMPLEAPP_PROFID 0x0F08
#define SAMPLEAPP_DEVICEID 0x0001
#define SAMPLEAPP_DEVICE_VERSION 0
#define SAMPLEAPP_FLAGS 0
#define LED_BLINK_TIME 500
#define HAL_KEY_CODE_TOGGLE 0x01
static byte SampleApp_TaskID;
static uint8 Sensor_TaskID;
static endPointDesc_t SampleApp_epDesc;
static byte SampleApp_Data[16];
static void SampleApp_HandleKeys( byte shift, byte keys );
const cId_t SampleApp_InClusterList[] = { 0 };
const cId_t SampleApp_OutClusterList[] = { 0 };
SimpleDescriptionFormat_t SampleApp_SimpleDesc =
{
SAMPLEAPP_ENDPOINT, // Endpoint
SAMPLEAPP_PROFID, // Profile ID
SAMPLEAPP_DEVICEID, // Device ID
SAMPLEAPP_DEVICE_VERSION, // Device Version
SAMPLEAPP_FLAGS, // Flags
0, // Help
0, // NumClusters
(cId_t *)NULL, // InClusterList
0, // NumOutClusters
(cId_t *)NULL // OutClusterList
};
void SampleApp_Init( byte task_id )
{
SampleApp_TaskID = task_id;
SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_epDesc.task_id = &SampleApp_TaskID;
SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
SampleApp_epDesc.latencyReq = noLatencyReqs;
RegisterForKeys( SampleApp_TaskID );
SimpleDescriptor_Init( &SampleApp_SimpleDesc );
afRegister( &SampleApp_epDesc );
HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );
}
UINT16 SampleApp_ProcessEvent( byte task_id, UINT16 events )
{
afIncomingMSGPacket_t *MSGpkt;
(void)task_id;
if ( events & SYS_EVENT_MSG )
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_STATE_CHANGE:
SampleApp_HandleZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
case KEY_CHANGE:
SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
default:
break;
}
osal_msg_deallocate( (uint8 *)MSGpkt );
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
}
return ( events ^ SYS_EVENT_MSG );
}
return 0;
}
void SampleApp_HandleZDOMsgs( zdoIncomingMsg_t *inMsg )
{
switch ( inMsg->hdr.event )
{
case ZDO_STATE_CHANGE:
if ( (inMsg->hdr.status == NetworkSecured) ||
(inMsg->hdr.status == DevConfgured) )
{
HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );
}
break;
default:
break;
}
}
void SampleApp_HandleKeys( byte shift, byte keys )
{
if ( keys & HAL_KEY_CODE_TOGGLE )
{
uint8 leds = HalLedGet();
if ( leds & HAL_LED_1 )
{
HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );
}
else
{
HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );
}
}
}
```
在此示例代码中,使用`SampleApp_HandleKeys`函数处理按键事件。当按下`HAL_KEY_CODE_TOGGLE`按键时,切换LED灯的状态。在`SampleApp_Init`函数中,通过调用`RegisterForKeys`函数注册按键事件。在`SampleApp_HandleZDOMsgs`函数中,当网络安全性被确认或设备被配置时,LED灯会闪烁。
请注意,此示例代码需要与Z-Stack协议栈一起使用,以便在cc2530芯片上运行。