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的引脚之外的其他引脚,按理来说是不对的!但是技术有限,请大家理解!
相关文章推荐
- 基于FPGA的按键控制LED的循环左移一位
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
- 基于FPGA的按键控制4盏LED灯循环左移点亮
- CC2530基础实验之采集光照模拟量控制LED状态
- cc2530 串口实验--控制led灯
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)
- CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)
- cc2530 串口实验--控制led灯
- CC2530基础实验之串口控制LED灯
- 嵌入式成长轨迹51 【Zigbee项目】【CC2430基础实验】【在PC用串口控制LED】
- 大一上学期C++第11周实验报告(三)学会使用循环控制语句解决实际问题
- 基于for循环的c语言循环控制条件的使用陷阱解密
- JTAG_UART控制LED实验(转帖)
- 第十一周实验报告1--学会使用循环控制语句解决实际问题,并强化注重效率的观念
- 基于Z301P摄像头 H.264OK6410的远程视频web监控 项目笔记5(小车驱动)GPIO控制
- 第十四周实验报告二(用循环控制语句编写程序 学生人数和成绩)
- 基于开源项目二次开发之版本控制实践
- 基于pic16f883芯片的汇编秒闪LED实验
- 我的第一个led实验--基于arm6410