您的位置:首页 > 其它

cc2530实验小项目-循环控制LED灯 (基于ZigBee协议)

2016-09-05 09:29 816 查看

导言:

本人由于刚刚接触硬件开发,所以对这些硬件的理解没有多深入,如果有什么错误,请各位大神赐教!

项目要求:

三个灯全部亮2秒,灭2秒,D1亮1次灭2秒, D2亮2次,每次间隔1秒,灭2秒,D3亮3次,每次间隔1秒,灭2秒。重复循环

源代码浅析:

#include <ioCC2530.h>  <span style="white-space:pre">		</span>//定义头文件
typedef unsigned char uchar;<span style="white-space:pre">	//后面的uchar等同于typedef unsigned char
typedef unsigned int  uint;	</span>


</pre><pre name="code" class="html">uchar LED[]={0xff,0xfe,0xfd,0xef,0x00};     //定义一个用于LED循环控制的数组:LED[0]=0xff:当i=0的时候,全部不亮!    0xfe:i=1,就只有LED1亮


/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/

void DelayMS(uint msec)
{
uint i,j;

for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}


/****************************************************************************

* 名    称: InitLed()
* 功    能: 设置LED灯相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/

void InitLed(void)
{
P1DIR |= 0x13;      //P1.0、P1.1、P1.4定义为输出  0001 0011
P1=0xff;      //使所有LED灯默认为熄灭状态
}


/****************************************************************************

* 程序入口函数
****************************************************************************/

void main(void)
{
uint i,j;

InitLed();          //初始化LED

while(1)                 //死循环
{

P1 = LED[4];        //全亮
DelayMS(2000);      //延迟两秒
P1 = LED[0];        //全灭
DelayMS(1000);      //延迟1秒+1秒

for(i=0;i<4;i++)
{
for(j=0;j<i;j++)   //第n个亮n次
{
P1 = LED[i];
DelayMS(1000);     //亮灯延时
P1 = LED[0];
DelayMS(1000);     //同一灯的闪烁延时1秒
}
DelayMS(1000);     //不同灯之间的等待延时+内部for循环1秒
}
}
}

总结:

1、在刚开始之前,我没有使用数组来循环控制,我直接利用了LEDi这种方式来循环控制,但是很遗憾,在IAR中是没有办法编译的,显示的未定义LEDi,代码如下!迫于无奈,我就只好换一种方式,在通过查阅网上的资料过后,发现了利用数组来循环控制LED的办法!
for(i=0;i<4;i++)
{
for(j=0;j<i;j++)   //第n个亮n次
{
<span style="color:#ff0000;">P1 = <strong>LEDi</strong>;<span style="white-space:pre">		</span>//在此句时会报错,显示无法识别<span style="font-family: Arial, Helvetica, sans-serif; "><strong>LEDi</strong></span><span style="font-family: Arial, Helvetica, sans-serif;">;</span></span>
DelayMS(1000);     //亮灯延时
}
DelayMS(1000);     //不同灯之间的等待延时+内部for循环1秒
}

2、也许有些同学会说我的题目要求的是不同灯之间的延迟是两秒,但是除了第一个,其他的都只是延迟了一秒,这个需要进入Debug模式,一步一步执行,就能够看出了!不方便贴图,所以需要大家自行调试一下!

3、我在定义LED数组的时候,并没有管除了管理LED的引脚之外的其他引脚,按理来说是不对的!但是技术有限,请大家理解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  硬件学习