基于CC2530的LED模块实验
实验内容
- LED模块共有四个按键,4个LED灯,可供完成流水灯、按键处理等相关实验。按键的触发为低电平,LED灯低电平点亮。
 
实验目的
- 了解按键的工作原理;
 - 掌握CC2530上的IO口作为输入端口的配置方法;
 - 加深对编程思想理解。
 
实验环境
实验所需硬件
| 序号 | 名称 | 数量 | 备注 | 
|---|---|---|---|
| 1 | 电脑 | 1台 | 系统Windows7及以上 | 
| 2 | CC2530底座模块 | 1个 | · | 
| 3 | LED模块 | 1个 | · | 
| 4 | CC Debugger 仿真器和连接线 | 1套 | · | 
| 5 | USB线 | 1根 | · | 
| 6 | 配套按键实验代码 | 1份 | · | 
实验所需软件
- IAR 驱动安装步骤
 - CC Debugger 驱动安装步骤
 - Git 软件下载(可选)
 
CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。

CC Debugger 仿真器和连接线


USB线

实验要求
- 掌握PxDIR、PxSEL和PxINP三个寄存器的功能以及配置方法;
 - 掌握按键编程的方法,能够编程读取按键的状态,并根据按键动作编程实现相关模块的控制。
 
实验原理
输入口简介
CC2530的IO口需要配置三个寄存器PxSEL、PxDIR和PxINP,功能如下表所示: | 名称 | 功能 | | – | – | – | | P0SEL(0XF3) | P0[7:0] 功能设置寄存器,默认设置为普通IO口 | | P0INP(0X8F) | P0[7:0] 作输入口时的电路模式寄存器 | | P0DIR(0XFD) | P0口输入输出设置寄存器,0:输入,1:输出 |
- PxSEL (0:普通 IO口,1:第二功能);
 - PxDIR (0:输入,1:输出 );
 - PxINP (0:上拉/下拉,1:三态 )。
 
按照表格寄存器内容,对LED和按键进行初始化。按键对应LED:按键S1开关LED1、S2开关LED2、S3开关LED3、S4开关LED4。
硬件设计

实验步骤
① CC2530底座模块安装LED模块,用CC Debugger连接底座与电脑,如下图所示:

② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:

③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:

④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):
$ cd workspace
⑤ 运行clone命令:
$ git clone https://github.com/aiotcom/eps.git  
下载目录至指定文件夹下。
 如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
 如果电脑没有安装 Git 软件,也可以进入Github,点击 Code -> DownLoad ZIP 下载所有工程代码。如下图所示:
 
 如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。
⑥ 打开 IAR Embedded Workbench 工程软件,点击工具栏: File -> Open -> Workspace,选择工程文件:基于CC2530模块实验\1.LED模块\KEY.eww并打开。


⑦ 点击Make按钮,重新编译文件,显示没有错误。

⑧ 点击Download and Debug按钮,将程序下载到模块中。


⑨ 点击X退出仿真模式。

⑩ 移除CC Debugger仿真器,采用USB线供电。

⑪ 观察实验:
 按下S1,LED1灯亮,再次按下S1熄灭;
 按下S2,LED2灯亮,再次按下S1熄灭;
 按下S3,LED3灯亮,再次按下S1熄灭;
 按下S4,LED4灯亮,再次按下S1熄灭。
代码讲解
① 程序目录结构,如下图。主要的工程文件是delay.c、KEY.c、LED.C、main.c。

② main.c对LED灯控制IO、按键IO初始化,当有按键按下改变相应控制的LED灯的状态。
     void main(void)
    {
        static uint8_t key = 0;  
        Hal_Init_32M();//初始化系统32M时钟
        LED_Init();//初始化LED模块的LED灯控制接口
        KEY_Init();//初始化LED模块的按键控制接口
        while(1)
        {
            key = KEY_Scan(0);//获取按键
            
            switch(key)
            {
                case S1_PRES://按键S1按键下
                    LED1 = ~LED1;
                    break;
                case S2_PRES://按键S2按键下
                    LED2 = ~LED2;
                    break;
                case S3_PRES://按键S3按键下
                    LED3 = ~LED3;
                    break;
                case S4_PRES://按键S4按键下
                    LED4 = ~LED4;
                    break;
                default:break;
            }
        }
    }   
常见问题
-  
弹出警告窗口,不能下载程序。
- 请确认CCDebugger驱动否安装。
 - 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
 - CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
 
 -  
下载代码后程序没观察到实验现象。
- 请重新上电,或者按下底座上的复位按键。
 - 模块没有安装稳妥。
 
 
实验思考
-  
实现按键S1按下后,LED1亮1秒后熄灭。
 -  
实现按键S1按下后,LED1常亮,按键S2按键下LED1熄灭。