找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5264|回复: 0
收起左侧

CC2530红外对管计数器驱动程序与使用教程

[复制链接]
ID:244570 发表于 2017-11-1 22:45 | 显示全部楼层 |阅读模式
1.实验目的
28.红外对管计数器

1) 通过实验掌握CC2530芯片 GPIO 的配置方法
2) 掌握红外对管计数器的使用
2.实验设备
  硬件:PC 机        一台 EB2530(底板、核心板、仿真器、USB线) 一套 红外对管一个  杜邦线 三条
  软件:2000/XP/win7 系统,IAR 8.10 集成开发环境,串口助手


3.实验相关电路图




其它型号也行的,只是讲他的原理,自己购买请注意电压就行。
【名称】E18-D50NK

【描述】这是一种集发射与接收于一体的光电传感器。检测距离可以根据要求进行调节。该传感 器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器 人避障、流水线计件等众多自动化产品。

光电式传感器(光电开关)NPN 常开 型号:E18-D50NK。




1、输出电流 DC/SCR/继电器 Control output:100mA/5V 供电
2、消耗电流 DC<25mA
3、响应时间 <2ms
4、指向角:≤15°,有效距离 3-50CM 可调
5、检测物体:透明或不透明体
6、工作环境温度:-25℃~+55℃
7、标准检测物体:太阳光 10000LX 以下 白炽灯 3000LX 以下
8、外壳材料:塑料

电气特性:              U:5VDC              I:100mA              Sn:3-50CM

尺寸:              直径:17MM              传感器长度:45MM              引线长度:45CM 应用案例:

1、生产线货物自动计数设备              2、多功能提醒器              3、走迷宫机器人

【注意事项】为保护动作的可靠和寿命长,请避免有关规定以外的温度外界(户外)条件下,接近传感器 虽为耐水结 构,若装上罩使用,勿使水和水容性切削油等淋到,则可更好地提高可靠性及寿命。还请 避免在有化学药剂,特别是在强碱、酸、硝酸、铭酸、热浓硫酸等气候中使用。

红色:接 4.5-5V 电源高电平 黄色:接单片机,输出 TTL 电平给单片机 绿色:接 GND 0V 电源低电平

前方无障碍输出高电平,有障碍输出口(黄色)电平会从高电平变成低电平,背面图有一个电位器可 以调节障碍的检测距离,一旦调节好电位器(如调节好的最大距离 50cm)则在有效距离内(如 40cm


在电路设计中可以再输出端黄线加上拉电阻 10K 到 5V,再接入单片机检测,会比较稳定,单片机检
测可以采用外部硬件中断 INT0 INT1 等来实现。
4.实验相关寄存器

实验中使用 P0_4 作为检测引脚, 挡住红外对管时对管上的灯亮,拿开就灭。发生一次 D1 也会改变。串口配置也 115200 8N1

5.源码分析 请看相应工程,有注释前面讲的太多,不重复讲了。
6.实验步骤
1.用杜邦线连接好传感器,注意引脚一定要接正确哦

2.编译调试下载程序

3.打开串口配置为 115200 8N1 ,D2 应该长亮。挡住红外对管,对管上的灯亮,拿开就灭。



CC2530源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    订: 2017-11-2
  5. * 版    本: 1.0
  6. * 描    述: 挡住红外对管,对管上的灯亮,拿开就灭。发生一次D1也会改变
  7. *           P0.4口为传感器的输入端 串口配置也115200 8N1
  8. ****************************************************************************/
  9. #include <ioCC2530.h>
  10. #include <stdio.h>
  11. #include <string.h>

  12. typedef unsigned char uchar;
  13. typedef unsigned int  uint;

  14. #define LED1 P1_0       //定义P1.0口为LED1控制端
  15. #define LED2 P1_1       //定义P1.1口为LED2控制端
  16. #define LED3 P1_4       //定义P1.4口为LED3控制端

  17. #define DATA_PIN P0_4   //定义P0.4口为传感器的输入端

  18. uint count;             //计数器

  19. /****************************************************************************
  20. * 名    称: DelayMS()
  21. * 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
  22. * 入口参数: msec 延时参数,值越大,延时越久
  23. * 出口参数: 无
  24. ****************************************************************************/
  25. void DelayMS(uint msec)
  26. {
  27.     uint i,j;
  28.    
  29.     for (i=0; i<msec; i++)
  30.         for (j=0; j<535; j++);
  31. }

  32. /****************************************************************************
  33. * 名    称: InitUart()
  34. * 功    能: 串口初始化函数
  35. * 入口参数: 无
  36. * 出口参数: 无
  37. ****************************************************************************/
  38. void InitUart(void)
  39. {
  40.     PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1
  41.     P0SEL |= 0x0c;           //P0_2,P0_3用作串口(外设功能)
  42.     P2DIR &= ~0XC0;          //P0优先作为UART0
  43.    
  44.     U0CSR |= 0x80;           //设置为UART方式
  45.     U0GCR |= 11;                                       
  46.     U0BAUD |= 216;           //波特率设为115200
  47.     UTX0IF = 0;              //UART0 TX中断标志初始置位0
  48. }

  49. /****************************************************************************
  50. * 名    称: UartSendString()
  51. * 功    能: 串口发送函数
  52. * 入口参数: Data:发送缓冲区   len:发送长度
  53. * 出口参数: 无
  54. ****************************************************************************/
  55. void UartSendString(char *Data, int len)
  56. {
  57.     uint i;
  58.    
  59.     for(i=0; i<len; i++)
  60.     {
  61.         U0DBUF = *Data++;
  62.         while(UTX0IF == 0);
  63.         UTX0IF = 0;
  64.     }
  65. }


  66. /****************************************************************************
  67. * 名    称: InitGpio()
  68. * 功    能: 设置LED灯和P0.4相应的IO口
  69. * 入口参数: 无
  70. * 出口参数: 无
  71. ****************************************************************************/
  72. void InitLed(void)
  73. {
  74.     P1DIR |= 0x13;           //P1.0、P1.1、P1.4定义为输出
  75.     P0SEL &= ~0x10;
  76.     P0DIR &= ~0x10;          //P0.4定义为输入口   
  77.     P2INP |= 0x20;
  78.    
  79.     LED2 = 0;                //点亮D2 提示程序已运行
  80. }

  81. void main(void)
  82. {     
  83.     char buf[10];
  84.    
  85.     memset(buf, 0, 10);     
  86.     InitLed();                        //设置LED灯和P0.4相应的IO口
  87.     InitUart();                       //调置串口相关寄存器

  88.     CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
  89.     while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
  90.     CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
  91.       
  92.     InitUart();                       //调置串口相关寄存器
  93.   
  94.     while(1)                          //无限循环
  95.     {
  96.         if(DATA_PIN == 0)             //挡住红外对管输出低电平,平时为高电平
  97.         {                             //不同的型号可能不同,修改触发电平就行        
  98.             LED1 = ~LED1;             //挡住红外对管D1发生变化
  99.             while(!DATA_PIN);           
  100.             count++;
  101.             sprintf(buf, "%05d ", count);
  102.             UartSendString(buf, 6); //串口发送数据,显示当前记数值
  103. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

0.png

所有资料51hei提供下载:
28.红外对管计数器.rar (394.63 KB, 下载次数: 39)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表