6.1 项目一编程实现开发板上灯的点亮
1.项目需求
通过程序设计实现点亮开发板上的灯D5。
2.项目分析
本项目使用的是新大陆公司的Zigbee开发板,Zigbee开发板上LED灯的位置图如图6-1所示。

图6-1 Zigbee开发板上LED灯的位置图
CC2530单片机有三个端口P0、P1、P2,其中,P0口是8位输入输出端口,P1口是8位输入输出端口,P2口只有5位可作为输入输出口。端口引脚对照表如表6-1所示。
表6-1 端口引脚对照表

四个灯D3、D4、D5、D6的对应引脚关系如图6-2所示。

图6-2 四个灯的对应引脚关系
两个引脚P1.0和P1.1所在的P1口对应的功能选择寄存器和方向寄存器如表6-2和表6-3所示。
表6-2 P1口的功能选择寄存器

表6-3 P1口的方向寄存器

续表

D5是图6-1中最右边的那个灯,对应的引脚是P1.3,要是灯能够打开,需要将该引脚设置为输入输出功能,并且方向为输出。
要想从引脚P1.3输出指令控制灯D5的点亮,首先要设置引脚与灯的对应关系。可以通过宏定义#define D5 P1_3定义灯D5为P1.3口控制,这样就建立好了引脚和灯之间的对应关系。然后通过P1口的功能选择寄存器表查看到引脚值为1表示外设功能,为0表示普通输入输出口。要从引脚输出指令控制灯,必须将引脚设为普通输入输出功能,因此引脚值应置为0。P1口的功能寄存器与16进制的03取反后进行逻辑与
运算:
P1SEL&=~0x08
等价于:
P1SEL&=~00001000
等价于:
P1SEL&=11110111
因为逻辑与运算的规则为:
1&&1=1;
1&&0=0;
0&&1=0;
0&&0=0。
因此,无论P1口的功能寄存器原来的值为多少,与11110111做逻辑与运算后,引脚位P1.3的结果一定是0,这就保证了该引脚为普通输入输出功能。要想从引脚向灯输出指令,必须将引脚的方向设置为输出,从P1口的方向寄存器表中查看到引脚值0为输入,1为输出,因此要设置方向寄存器对应的引脚值为1,P1口的方向寄存器与16进制的08取反后进行逻辑或运算:
P1DIR|=0x08
等价于:
P1DIR|=00001000
因为逻辑或运算的规则为:
1||1=1;
1||0=1;
0||1=1;
0||0=0。
因此,无论P1口的方向寄存器原来的值为多少,与00001000做逻辑或运算后,引脚位P1.3的结果一定是1,这就保证了该引脚方向为输出。
Delay为延时函数,通过5个for循环可实现延时一定的时间,每个for循环都是从0到n的计数延时。根据不同的单片机,延时函数的延时时间不同。
在主程序中,设置“D5=1;”为将该灯的状态置为打开,即点亮该灯。
3.程序设计
程序设计如下:

编写好的程序要在IAR平台下通过仿真器烧写到开发板中。运行程序时,可以实现将灯D5点亮。下面介绍如何在计算机中安装IAR软件。
4.软件安装
①首先在网上下载IAR软件安装包。打开安装包中的keygen文件,在出现的界面中输入“a”后单击回车键,如图6-3所示。

图6-3 安装过程选择“a”
②在出现的界面中输入“0”,然后单击回车键,如图6-4所示。

图6-4 安装过程选择“0”
③将出现的“LicenseNumber:5182-867-697-6830”和“Key”下面的内容复制到记事本中,如图6-5所示。

图6-5 安装过程得到LicenseNumber和Key
可以单击鼠标右键,在出现的快捷菜单中选择“标记”,然后全选当前界面的内容,将内容粘贴到记事本中,如图6-6所示。
(https://www.daowen.com)
图6-6 复制“License Number”和“Key”的内容到记事本中
④安装IAR文件。应选择跟自己的计算机系统版本对应的安装文件,本书中选择的是WIN7系统的64位的安装包,打开安装包后选择图6-7中的“Install IAR Embedded Workbench?”。

图6-7 选择“Install IAR Embedded Workbench”进行安装
⑤在弹出的界面中,选择“Install a new instance of this application”,如图6-8所示,然后单击“Next”按钮。

图6-8 选择“Install a new instance of this application”
⑥在图6-9中选择“I accept the terms of the license agreement”,单击“Next”按钮。

图6-9 选择“I accept the terms of the license agreement”选项
⑦在出现的界面中,将记事本中的“License Number”后面的“5182-867-697-6830”复制到对应的位置,如图6-10所示,单击“Next”按钮。

图6-10 输入License
⑧在出现的界面中,将记事本中“Key”后面的一段字符复制到界面中的文本框里,如图6-11所示,单击“Next”按钮。

图6-11 粘贴Key
⑨在出现的界面中,选择安装的类型,此处选择“Complete”,如图6-12所示,然后单击“Next”按钮。

图6-12 选择安装类型
⑩选择安装的位置,如图6-13所示,然后单击“Next”按钮。

图6-13 选择安装位置
○1选择文件夹,如图6-14所示。

图6-14 选择文件夹
○12在图6-15所示的界面中选择“Install”按钮。

图6-15 选择“Install”按钮
此时程序开始安装,如图6-16所示。安装完成的界面如图6-17所示,单击“Finish”按钮。

图6-16 安装过程
启动IAR软件时,在图6-18的程序列表中,选择“IAR Embedded Workbench”。打开软件并新建文件后,将编写好的程序粘贴进去,调试运行后即可看到灯D5已经点亮,并延时一定的时间。

图6-17 安装完成的界面

图6-18 程序列表
5.举一反三
如果需求改为点亮灯D6,程序该怎么编写?
分析:
灯D6是图6-1中最右边的那个灯,对应的引脚是P1.4,要使灯能够打开,需要将该引脚设置为输入输出功能,并且方向为输出。
要想从引脚P1.4输出指令控制灯D6的点亮,首先要设置引脚与灯的对应关系。可以通过宏定义#define D6 P1_4定义D6为P1.3口控制,这样就建立好了引脚和灯之间的对应关系。然后通过P1口的功能选择寄存器表查看到引脚值为1表示外设功能,为0表示普通输入输出口。
要想从引脚输出指令控制灯,必须将引脚设为普通输入输出功能,因此引脚值应置为0。P1口的功能寄存器与16进制的10取反后进行逻辑与运算:
P1SEL&=~0x10
等价于:
P1SEL&=11101111
因此,无论P1口的功能寄存器原来的值为多少,与11101111做逻辑与运算后,引脚位P1.4的结果一定是0,这就保证了该引脚为普通输入输出功能。
要想从引脚向灯输出指令,必须将引脚的方向设置为输出,从P1口的方向寄存器表中查看到引脚值0为输入,1为输出。因此要设置方向寄存器对应引脚值为1,P1口对应的方向寄存器与16进制的10取反后进行逻辑或运算:
P1DIR|=0x10
等价于:
P1DIR|=00010000
因此,无论P1口的方向寄存器原来的值为多少,与00010000做逻辑或运算后,引脚位P1.4的结果一定是1,这就保证了该引脚方向为输出。
在主程序中,设置“D6=1;”为将该灯的状态置为打开,即点亮该灯。程序设计如下:


思考:如果需求改为要使四个灯D4、D3、D6、D5全亮,需要怎么编写程序?
分析:
首先要明确四个灯的对应引脚,四个灯对应的引脚分别为P1.1、P1.0、P1.4、P1.3,因此,在开始的宏定义中,四个灯都要定义和引脚的对应关系,在主程序中,功能寄存器和方向寄存器也要设置对应引脚的输出方向和功能。
程序设计如下:

