ZigBee学习之25InitBoard

//初始化板上的IOInitBoard(OB_COLD);//参数【OnBoard.h】#defineOB_COLD0#defineOB_WARM1#defineOB_READY2//【OnBoard.c】voidInitBoard(bytelevel){if(level==OB_COLD){//关中断,最初的时候已经见过了osal_int_disable(INTS_ALL);//关闭所有的LED,调用了LED设置函数HalLedSet(HAL_LED_ALL,HAL_LED_MODE_OFF);//【hal_led.h】//#defineHAL_LED_ALL(HAL_LED_1|HAL_LED_2|HAL_LED_3|HAL_LED_4),我这里呢只有两个LED,所以可以屏蔽掉LED3,LED4,或者将后两个LED也映射到前面两个LED(其实就是宏定义啦)//#defineHAL_LED_MODE_OFF0x00//#defineHAL_LED_MODE_ON0x01//#defineHAL_LED_MODE_BLINK0x02//#defineHAL_LED_MODE_FLASH0x04//#defineHAL_LED_MODE_TOGGLE0x08//LED设置函数【hal_led.c】uint8HalLedSet(uint8leds,uint8mode){#if(defined(BLINK_LEDS))&&(HAL_LED==TRUE)//前提条件是定义了闪烁LED和LED硬件驱动服务使能;//HAL_LED定义在【hal_board_cfg.h】#ifndefHAL_LED#defineHAL_LEDTRUE//当设为FALSE时就不使用LED#endif#if(!definedBLINK_LEDS)&&(HAL_LED==TRUE)#defineBLINK_LEDS#endifuint8led;HalLedControl_t*sts;//LED控制结构体typedefstruct{uint8mode;/*操作模式*/uint8todo;/*剩余的闪烁周期数*/uint8onPct;/*周期中所占的比例*/---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---uint16time;/*开关周期时间(msec)*/uint32next;/*下次改变的时间*/}HalLedControl_t;switch(mode){caseHAL_LED_MODE_BLINK:HalLedBlink(leds,1,HAL_LED_DEFAULT_DUTY_CYCLE,HAL_LED_DEFAULT_FLASH_TIME);//LED设置的一些默认参数【hal_led.h】#defineHAL_LED_DEFAULT_MAX_LEDS4#defineHAL_LED_DEFAULT_DUTY_CYCLE5#defineHAL_LED_DEFAULT_FLASH_COUNT50#defineHAL_LED_DEFAULT_FLASH_TIME1000//LED闪烁函数【hal_led.c】voidHalLedBlink(uint8leds,uint8numBlinks,uint8percent,uint16period){#if(defined(BLINK_LEDS))&&(HAL_LED==TRUE)//同样先判断是否启用了LED并且使用LED闪烁功能uint8led;HalLedControl_t*sts;if(leds&&percent&&period)//判断参数的有效性,percent参数指明一个周期中LED将开启的时间{if(percent<100)//如果一个周期中开启时间小于100%{led=HAL_LED_1;leds&=HAL_LED_ALL;//屏蔽掉不想要操作的LEDsts=HalLedStatusControl.HalLedControlTable;//HalLedStatusControl是事先定义好的一个结构体typedefstruct{HalLedControl_tHalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];uint8sleepActive;}HalLedStatus_t;#defineHAL_LED_DEFAULT_MAX_LEDS4#ifdefBLINK_LEDSstaticHalLedStatus_tHalLedStatusControl;#endifwhile(leds)//这个循环主要是对传进来的每一个LED进行独立的设置,比如传进来的是需要设置LED1和LED2,那么此循环会先设置LED1然后再设置LED2{---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---if(leds&led)//检测当前LED是否是需要设置的{preBlinkState|=(led&HalLedState);//储存目前的额LED状态//staticuint8preBlinkState;sts->mode=HAL_LED_MODE_OFF;/*关闭先前的模式*/sts->time=period;/*Timeforoneon/offcycle*/sts->onPct=percent;/*%ofcycleLEDison*/sts->todo=numBlinks;/*Numberofblinkcycles*/if(!numBlinks)sts->mode|=HAL_LED_MODE_FLASH;//如果规定的次数未达到则继续闪烁sts->next=osal_GetSystemClock();/*Startnow*///读取当前系统时钟【OSAL_Timers.c】uint32osal_GetSystemClock(void){return(osal_systemClock);}//staticuint32osal_systemClock;//这样看来第一次运行的时候osal_systemClock=0,系统中应该启动了定时器,用来记录系统运行时间。sts->mode|=HAL_LED_MODE_BLINK;/*Enableblinking*/leds^=led;//屏蔽掉已设置好的这个LED}led<<=1;//检测下一个LEDsts++;}//真的是高手才能写出的函数啊!自叹,C语言编程能力还差的远啊osal_set_event(Hal_TaskID,HAL_LED_BLINK_EVENT);//【hal_drivers.h】//#defineHAL_LED_BLINK_EVENT0x0002//externuint8Hal_TaskID...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?