}
执行5次0到n的空循环来实现软件延时。
延时时间约为5*n/32μs。
(关联LED灭)
并且可以修改程序实现LED红灯闪烁。
2按键控制LED灯开关
【实验目的】
1.了解CC2530的GPIO结构和配置原理
2.学习配置按键的GPIO口为输入模式,并采集有效按键
3.如何通过程序控制由按键触发控制LED灯
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验内容】
1.本例中让用户掌握按键应用这一常用人机交互方法,本次使用按键LED灯的开关。
按下“SW2”键切换ZigBee模块左边LED灯开关,实验中操作了的寄存器有P0,P0DIR,没有设置而是取默认值的寄存器有:
P0SEL,P0INP。
2.按键采用五向摇杆按键Joystick,这里只使用按下这个键。
无按键按下时P06的状态为上拉,高电平。
中间键按下时(Cneter),P06与GND连通,P06采集到低电平。
【实验步骤】
1.打开E盘里“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.1GPIO输入输出实验\CC2530-2”中工程文件“switchLED.eww”。
2.打开工程后选择Debug或Release模式。
3.编译工程并下载到目标板。
4.运行和查看效果。
【实验现象】
按下SW2摇杆按键的中间键CC2530模块板载的红色LED灯(右边)点亮,再次按下熄灭。
【实验相关流程及代码】
按键初始化函数voidInitKey(void)
/*****************************************
//按键初始化
*****************************************/
voidInitKey(void)
{
P0SEL&=~0X40;
P0INP|=0x40;//上拉(设置位置)
P0DIR&=~(0x01<<(6));//按键在P06ADC采集
}
主要是配置采集输入采集的GPIOP06为输入模式。
延时子函数ucharKeyScan(void)监测P0.6(K1)上的电平变化,如有高电平变低即有按键产生,返回按键扫描结果为有按键发生。
之后对应相关的LED灯位置。
3按键控制LED灯闪烁
【实验目的】
1.了解CC2530的GPIO结构和配置原理
2.学习配置按键的GPIO口为输入模式,并采集有效按键
3.如何通过程序控制由按键触发控制LED灯闪烁
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验内容】
1.使用按键LED灯的开关。
按下“SW2”键切换ZigBee模块左边LED灯开关,实验中操作了的寄存器有P0,P0DIR,没有设置而是取默认值的寄存器有:
P0SEL,P0INP。
2.按键采用五向摇杆按键Joystick,这里只使用按下这个键。
无按键按下时P06的状态为上拉,高电平。
中间键按下时(Cneter),P06与GND连通,P06采集到低电平。
3.
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.1GPIO输入输出实验\CC2530-3”中工程文件“switchGLINT.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
按下SW2摇杆按键的中间键CC2530模块板载的蓝色LED灯(左边)闪烁,再次按下停止。
【实验相关代码】
程序的初始化和处理流程
相应程序函数构造与实验2相似。
4.按OLED显示
【实验目的】
1.了解OLED显示屏的驱动原理,学习使用UG-9616GLBBG02显示屏
2.通过CC2530的GPIO模拟IIC总线驱动OLED显示。
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验内容】
1.CC2530通过模拟IIC通讯接口控制和驱动OLED的驱动芯片SSD1306
2.
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.1GPIO输入输出实验\CC2530-4”中工程文件“OledDisp.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
程序全速运行后OLED屏幕上显示“Welcome”字符。
【实验相关代码】
1.函数voidugOled9616int(void)进行控制驱动OLED有关的GPIO配置,以及配置OLED
驱动芯片的寄存器启动OLED运行,程序在“ugOled9616.c”文件中。
2.输出显示子函数voidLcdPutString16_8(u8x,u8y,u8*ptr,u8len,u8op),在OLED指定的位置。
【实验中遇到的困难和解决办法】实验4中也可以将英文字符改成汉字输出,但是程序语言中要改变字符类型等。
【实验总结】要学会举一反三,对于代码中的键值控制函数等都要学会处理分析,并修改相应代码实现其他功能。
实验三、定时器控制实验
实验日期:
2016年5月5日3,4节
5.使用定时器T1
【实验目的】
1.了解CC2530的定时器T1的配置和使用
2.如何通过程序控制CC2530的T1驱动LED灯定时点亮。
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验原理】
本例用定时器1来改变小灯的状态,T1每溢出两次,两个小灯闪烁一次闪烁后成闪烁前相反的状态。
T1的操作模式有3种:
free-running模式(计数器从0x0000开始计数,当计算值达到0xFFFF时溢出,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器复位为0x0000,重新开始计数),modulo模式(计数器从0x0000开始计数,当计算值达到T1CC0时溢出,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器复位为0x0000,重新开始计数)和up-down模式(计数器从0x0000开始计数,当计算值达到T1CC0时,计数值开始递减直至0x0000,此时IRCON.T1IF和T1CTL.OVFIF被置1,如果TIMF.OVFIF和IEN1.T1EN也被置1,就会产生中断请求,计数器重新开始计数)
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.2定时器控制实验\CC2530-1”中工程文件“T1.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
CC2530模块板载的蓝色LED灯(左边)和红色LED(右边)交替闪烁。
【实验相关代码】
voidInitial(void)
{
//初始化P1
P1DIR=0x03;
//P10P11为输出
RLED=1;
YLED=1;
//灭LED
//用T1来做实验
T1CTL=0x3d;
//通道0,中断有效,128分频;自动重装模式(0x0000->0xffff);
}
函数功能是将P10,P11设为输出,并将定时器1设为自动重装模式,计数时钟为0.25M。
6使用定时器T2
【实验目的】
1.了解CC2530的定时器T2的配置和使用,定时器的中断使用方式
2.如何通过程序控制CC2530的T1驱动LED灯定时点亮
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验原理】
1.本例开启定时器2的中断,计数比较溢出后产生中断来改变小灯的状态,T2每溢出一次,红色小灯状态改变一次(由亮变暗或由暗变亮)。
T2的操作模式如T1不同没有T1的3种工作模式:
free-running模式,modulo模式和up-down模式。
2.GPIO输出控制对象为CC2530模块上的红色和绿色LED,分别接在CC2530芯片的P1.0和P1.1脚上。
输出置位为0时LED灯点亮,置位为1时LED灯熄灭。
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.2定时器控制实验\CC2530-2”中工程文件“T2.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
CC2530模块板载的蓝色LED灯(左边)由定时器T2的比较溢出中断改变状态。
【实验相关代码】
1.开启溢出中断
#defineSET_TIMER2_CAP_INT()\
do{\
T2IRQM=0x04;\
EA=1;\
T2IE=1;\
T2MSEL|=0xf4;
}while(0)
2.设定溢出周期
#defineSET_TIMER2_CAP_COUNTER(val)SET_WORD(T2M1,T2M0,val)
功能:
将无符号整形数val的高8位写入T2CAPLPL,低8位写入T2CAPHPH。
3.启动T2
#defineTIMER2_RUN()T2CTRL|=0X01
4.停止T2
#defineTIMER2_STOP()do{T2CTRL&=0XFE;}while(0)
实验四、中断输入和采集实验
7定时器T4中断
【实验目的】
1.了解CC2530的T4的使用
2.学习定时器T4的中断模式使用
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验原理】
1.本例用定时器4来改变小灯的状态,T4每2000次中断小灯闪烁一轮,闪烁的时间长度为1000次中断所耗时间。
注意定时器T3,T4是8Bit的定时器。
2.GPIO输出控制对象为CC2530模块上的红色和绿色LED,分别接在CC2530芯片的P1.0和P1.1脚上。
输出置位为0时LED灯点亮,置位为1时LED灯熄灭。
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.3中断输入和采集实验\CC2530-1”中工程文件“forj8-Tn.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
CC2530模块板载的红色LED灯(右边)在T4产生中断1000此后开始闪烁,再次中断1000次后停止闪烁,一直循环执行。
【实验相关代码】
*#pragmavector=T4_VECTOR
__interruptvoidT4_ISR(void)
{
//IRCON=0x00;
//清中断标志,硬件自动完成
if(counter<200)counter++;//10次中断LED闪烁一轮
else
{
counter=0;//计数清零
RLED=!
RLED;//改变小灯的状态
}
}
主函数功能:
这是一个中断服务程序,每200次中断改变一次红色LED的状态。
【实验中遇到的困难和解决办法】:
怎么将T4设置为不同模式。
#defineTIMER3_SET_MODE(val)\
do{\
T4CTL&=~0X03;\
(val==1)?
(T4CTL|=0X01):
/*DOWN*/\
(val==2)?
(T4CTL|=0X02):
/*Modulo*/\
(val==3)?
(T4CTL|=0X03):
/*UP/DOWN*/\
(T4CTL|=0X00);/*freeruning*/\
}while(0)可以根据需要设置不同模式,但前提要在程序里具有定义说明。
8.外部中断实验
【实验目的】
1.了解CC2530的中断使用
2.如何采集外部输出中断(按键触发)并控制LED灯状态
【实验设备】
实验设备
数量
备注
CC2530多传感器节点底板
1
支持CC2530工作的底板
CC2530节点模块
1
无线SOC
USB线
1
连接仿真器
C51RF-3仿真器
1
程序下载调试用
【实验原理】
1.本例使用摇杆按键来翻转LED的状态,但这里按键不是做键盘用,而是产生中断触发
信号。
按下节点底板上“SW2”键,CC2530模块上1个LED灯改变当前状态。
2.按键采用五向摇杆按键Joystick,这里只使用按下这个键。
无按键按下时P06的状态为上拉,高电平。
中间键按下时(Cneter),P06与GND连通,P06采集到低电平。
【实验步骤】
第一步:
打开E盘“\演示及开发例子程序\”内文件夹“CC2530单片机基础程序”。
使用IAR7.51打开“1.3中断输入和采集实验\CC2530-2”中工程文件“for9-external.eww”。
第二步:
打开工程后选择Debug或Release模式。
第三步:
编译工程并下载到目标板。
第四步:
运行和查看效果。
【实验现象】
按下摇杆按键“SW2”的中心按键,点亮红色LED(左边),再次按下时熄灭,循环执行。
【实验相关代码】
#pragmavector=P0INT_VECTOR
__interruptvoidP0_ISR(void)
{
if(P0