1.实验目的
- 通过实验掌握 CC2530 芯片 GPIO 的配置方法
- 学会在E18-D80NK或者E18-D50NK模块的使用方法
- 通过串口输出计数信息
2.实验设备
硬件:PC 机一台, ZB2530,E18-D80NK光电传感器 一个
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境、串口助手
3.实验相关电路图
image.png WeChat Image_20220309065316.jpg接线方式:
image.png或者
红外接口 | CC2530 |
---|---|
棕色 | VCC、5.0V |
蓝色 | GND、0V |
黑色 | 信号线 |
红外对射模块:
应用:
1、生产线货物自动计数设备
2、多功能提醒器
3、走迷宫机器人
注意事项
为保护动作的可靠和寿命长,请避免有关规定以外的温度外界(户外)条件下,接近传感器虽为耐
水结 构,若装上罩使用,勿使水和水容性切削油等淋到,则可更好地提高可靠性及寿命。
光电式传感器(光电开关)NPN 常开
型号:E18-D80NK/ E18-D50NK。。
光电开关 E18 的技术参数:
1、输出电流 DC/SCR/继电器 Control output:100mA/5V 供电
2、消耗电流 DC<25mA
3、响应时间 <2ms
4、指向角:≤15°,有效距离 3-80CM 可调
5、检测物体:透明或不透明体
6、工作环境温度:-25℃~+55℃
7、标准检测物体:太阳光 10000LX 以下 白炽灯 3000LX 以下
8、外壳材料:塑料
- 代码分析
#include <ioCC2530.h>
#include <stdio.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 //定义P1.0口为LED1控制端
#define LED2 P1_1 //定义P1.1口为LED2控制端
#define LED3 P0_4 //定义P0.4口为LED3控制端
#define DATA_PIN P0_6 //定义P0.6口为传感器的输入端
uint count; //计数器
/****************************************************************************
* 名 称: DelayMS()
* 功 能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大,延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; I++)
for (j=0; j<535; j++);
}
/****************************************************************************
* 名 称: InitUart()
* 功 能: 串口初始化函数
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitUart(void)
{
PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1
P0SEL |= 0x0c; //P0_2,P0_3用作串口(外设功能)
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //设置为UART方式
U0GCR |= 8;
U0BAUD |= 59; //波特率设为9600
UTX0IF = 0; //UART0 TX中断标志初始置位0
}
/****************************************************************************
* 名 称: UartSendString()
* 功 能: 串口发送函数
* 入口参数: Data:发送缓冲区 len:发送长度
* 出口参数: 无
****************************************************************************/
void UartSendString(char *Data, int len)
{
uint I;
for(i=0; i<len; i++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
/****************************************************************************
* 名 称: InitGpio()
* 功 能: 设置LED灯和P0.4相应的IO口
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitLed(void)
{
P1DIR |= 0x03; //P1.0、P1.1、P1.4定义为输出
P0DIR |= 0x10; //P04定义为输出
P0SEL &= ~0x40;
P0DIR &= ~0x40; //P0.6定义为输入口
P2INP |= 0x20;
LED2 = 0; //点亮D2 提示程序已运行
}
void main(void)
{
char buf[10];
memset(buf, 0, 10);
InitLed(); //设置LED灯和P0.4相应的IO口
InitUart(); //调置串口相关寄存器
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
InitUart(); //调置串口相关寄存器
while(1) //无限循环
{
if(DATA_PIN == 0) //挡住红外对管输出低电平,平时为高电平
{ //不同的型号可能不同,修改触发电平就行
LED1 = ~LED1; //挡住红外对管D1发生变化
while(!DATA_PIN);
count++;
sprintf(buf, "%05d ", count);
UartSendString(buf, 6); //串口发送数据,显示当前记数值
}
}
}
5. 实验步骤与现象
前方无障碍输出高电平,有障碍输出口(黄色)电平会从高电平变成低电平,背面图有一个
电位器可以调节障碍的检测距离,一旦调节好电位器。则在有效距离内(如40cm处有障碍物、
10cm处有障碍物)则输出低电平,低电平刚好给单片机识别。
在电路设计中可以再输出端黄线加上拉电阻10K到5V,再接入单片机检测,会比较稳定,单片机
检测可以采用外部硬件中断INT0 INT1等来实现。
- 接好线 VCC 和 GND 不要接错了。
- 下载程序到开发板中。打开串口助手设置参考为波特率9600 8N1 。
- 实验中使用 P0_6 作为检测引脚, 挡住红外对管时对管上的灯亮,拿开就灭。发生一次 D1 也会
改变。
网友评论