找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22856|回复: 6
收起左侧

CC2530控制人体红外传感器的程序与详细教程

  [复制链接]
ID:244570 发表于 2017-11-1 22:44 | 显示全部楼层 |阅读模式
1.实验目的
20.人体红外传感器

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

3.实验相关电路图




D-SUN PIR人体红外感应模块 是基于红外线技术的自动控制产品。灵敏度高、可靠性强、 超低功耗,超低电压工作模式。

接线方式:

1、VCC:接电源正极(5V)
2、OUT:检测引脚

3、GND:接电源负极 自己购买的模块请仔细核对一下引脚,确保连接正确。

更详细介绍请参考厂家手册或“ EEB2530\相关资料与软件\芯片数据手册\完整版 HC-SR501 资料包括原理图”

注意:红外模块正常供电是 5v,仿真器输出是 3.3v,用仿真器供电时勉强能用,可能造 成数据不准确,调试时最好插上底板 usb 就好了并打开电源开关。

4.实验相关寄存器

实验中使用 P0_4 作为检测引脚, 人进入其感应范围模块输出高电平,点亮 LED1,人离开 感应范围 LED1 熄灭 P0.4 口为 HC-SR501 传感器的输入端。具体 HC-SR501 人体感应模块 OUT 输出电平由模块决定,不同厂家可能不一样,不一样关系也不大,改动非常的小。

5.源码分析

6.实验步骤
1.用杜邦线连接好传感器,注意引脚一定要接正确哦

2.编译调试下载程序

3.打开串口配置为 115200 8N1 ,D2 应该长亮,这时你靠近传感器检测范围,D1 灯亮延 时一段时间后熄灭,串口也有相应的输出。做这个实验传感器方向很重要,不要将探头对 准自己,慢慢用手移动到检测范围,观察灯的变化。这实验不太好做,自己多摸索几次相 信你会成功的!




单片机源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    订: 2013-01-10
  5. * 版    本: 1.0
  6. * 描    述: 人进入其感应范围模块输出高电平,点亮LED1,人离开感应范围LED1熄灭,
  7. *           P0.4口为HC-SR501传感器的输入端 串口配置也115200 8N1
  8. ****************************************************************************/
  9. #include <ioCC2530.h>

  10. typedef unsigned char uchar;
  11. typedef unsigned int  uint;

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

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


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

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

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


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

  78. void main(void)
  79. {      
  80.     InitLed();                        //设置LED灯和P0.4相应的IO口
  81.     InitUart();                       //调置串口相关寄存器

  82.     CLKCONCMD &= ~0x40;               //设置系统时钟源为32MHZ晶振
  83.     while(CLKCONSTA & 0x40);          //等待晶振稳定为32M
  84.     CLKCONCMD &= ~0x47;               //设置系统主时钟频率为32MHZ   
  85.       
  86.     InitUart();                       //调置串口相关寄存器
  87.         
  88.     while(1)                          //无限循环
  89.     {
  90.         if(DATA_PIN == 1)
  91.         {
  92.             LED1 = 0;                 //有人时LED1亮
  93.             UartSendString("ON ", 3); //串口发送数据,提示用户
  94.         }            
  95.         else
  96.         {
  97.             LED1 = 1;                  //无人时LED1熄灭
  98.             UartSendString("OFF ", 4); //串口发送数据,提示用户
  99.         }
  100.         
  101.         DelayMS(1000);
  102.     }   
  103. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

0.png

全部资料下载地址:
20.人体红外传感器.rar (635.55 KB, 下载次数: 179)
回复

使用道具 举报

ID:357452 发表于 2018-6-26 20:13 来自手机 | 显示全部楼层
能不能发完整的代码啊
回复

使用道具 举报

ID:587073 发表于 2019-7-31 16:54 来自手机 | 显示全部楼层
能不能发完整的代码啊
回复

使用道具 举报

ID:554992 发表于 2019-11-16 16:59 | 显示全部楼层
可以给完整教学吗
回复

使用道具 举报

ID:755645 发表于 2020-5-19 13:49 | 显示全部楼层
楼主,能不能发完整代码
回复

使用道具 举报

ID:755645 发表于 2020-5-19 14:10 | 显示全部楼层
在最后加一个大括号就可以了
回复

使用道具 举报

ID:510389 发表于 2020-5-20 02:21 | 显示全部楼层
可以给完整代码吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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