LED控制实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.1 LED 控制实验

1.1.1 实验目的

通过I/O 控制小灯闪烁的过程;

在ZXBee CC2530节点板上运行自己的程序。

1.1.2 实验环境

硬件:ZXBee CC2530节点板一块,CC2530仿真器,PC 机; 软件:Windows 7/Windows XP ,IAR 集成开发环境。

1.1.3 实验原理

通过CC2530 的I/O 引脚,输出高低电平来控制D6及D7的亮与灭。

CC2530的I/O 控制口一共有21个,分成3组,分别是P0、P1和P2;由电路原理图可以看出D7所对应的I/O 口为P1_0,D6所对应的I/O 口为P1_1。

如图为LED 灯的驱动电路,本实验选择P1_0和P1_1 I/O 引脚, P1_0与P1_1分别控制LED4(D7)和LED3(D6),因此,在软件上只要配置好P1_0口及P1_1口。

图2.2.1 LED 驱动电路图

下面我们来看一下本次实验所用到的控制寄存器中每一位的取值所对应的意义:

寄存器的设置:

将控制寄存器的某一位置1: 例:P1DIR |= 0X02;

解释:”|=“表示按位或运算,0X02为十六进制数,转换成二进制数为0000 0010,若P1DIR 原来的值为0011 0000,或运算后P1DIR 的值为0011 0010。根据上面给出的取值表可知,按位或运算后P1_1

的方向改为输出,其他I/O 口方向保持不变。

将控制寄存器某一位清0: 例:P1DIR &= ~0X02;

解释:”&=“表示按位与运算,”~“运算符表示取反,0X02为0000 0010,即~0X02为1111 1101。若P1DIR 原来的值为0011 0010,与运算后P1DIR 的值为0011 0000。

1.1.4 实验内容

通过上述实验原理得知,要实现D6、D7的点亮熄灭只需配置P1_0、P1_1口引脚即可,然后将引脚适当的输出高低电平则可实现D6、D7的闪烁控制。下面是源码实现的解析过程:

主函数中主要实现了以下步骤:

1)初始化LED 灯即led_init():设置P1.0 和P1.1为普通I/O 口,

P1方向为输出,关闭D6、D7灯。 2)在主函数中使用 while(1) 等待LED 灯开关的测试即可。 上述代码实现了P1选择寄存器和方向寄存器的设置,并将LED 灯的电平置为高电平,即初始状态下LED 灯灭。接下来就只需要实现LED 灯的轮流闪烁了,通过下面的代码来解析LED 灯开关的测试:

上述代码中,通过改变LED 灯的电平高低来实现灯的亮与灭,即每隔250ms 让LED 灯闪烁一次。为了增加实验效果,也可以手动更改闪烁时间。其中,延时函数的代码如下:

下图2.2.2是本节LED 实验的流程图:

图2.2.2LED 灯实验流程图

通过图2.2.2流程图可得知,实现D6、D7的轮流闪烁,会经过系统时钟初始化的过程,而且系统时钟初始化

每隔250ms

是必须的,8051微处理器的正常运行,必须要经过系统初始化,也就是xtal_init()方法,该方法在sys_init.c源文件中定义。而在main.c中并没有看到调用系统时钟初始化的方法,这是因为官方库文件已经将系统时钟初始化的方法的调用过程写进启动文件中了。(在后面的所有章节中也需要涉及到系统时钟的初始化,将不再重复说明)

1.1.5 实验步骤

1)正确连接CC2530仿真器到PC机和ZXBee CC2530节点板,确定按照第一章1.2节设置节点板跳线为模式一,打开ZXBee CC2530节点板电源(上电)。

2)打开实验工程:在文件夹“05-实验例程\第2章\2.2-LED”下双击打开工程LEDs.eww,选择Project->Rebuild All重新编译工程。

3)将连接好的硬件平台上电(CC2530务必按下开关上电),然后按下CC2530仿真器上的复位按键。接下来选择Project->Download and debug将程序下载到CC2530节点板。

4)下载完后将CC2530重新上电或者按下复位按钮,观察两个LED的闪烁情况。

5)修改延时函数,可以改变LED小灯的闪烁间隔时间。

相关文档
最新文档