光敏电阻控制LED亮灭

1理论分析

1.1概述

光敏电阻(photocell),又称光敏电阻器(photoresistor or light-dependent resistor,后者缩写为 ldr)或光导管(photoconductor),如下图所示,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。

1.2原理

大家要知道,单单一个光敏电阻是无法应用到 CC2530 上面的,这是因为它的驱动电流远远达不到 CC2530 所需要的 4mA 的输入电流。所以,我们往往需要加上一个单限比较器,如下图所示。

图1 光敏传感器

按照上面原理图设计出来的光敏传感器的功能有:
(1) 可以检测周围环境的亮度和光强度;
(2) 灵敏度可调(由下图中电位器调节);
(3) 工作电压 3.3V-5V;
(4) 数字开关量输出(0 和 1)。

注意:
(1) 光敏二极管模块对环境光强最敏感,一般用来检测周围环境的亮度和光强,在大多数场合可以与光敏电阻传感器模块通用,二者区别在于,光敏二极管模块方向性较好,可以感知固定方向的光源.

(2) 模块在无光条件或者光强达不到设定阈值时,DO 口输出高电平,当外界环境光强超过设定阈值时,模块 DO 输出低电平;

(3) 本光敏传感器的数字量输出 DO 可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光强改变。

2实验详解

2.1实验目的

  1. 通过实验掌握CC2530 芯片GPIO 的配置方法
  2. 掌握光敏和热敏传感器的使用

2.2实验设备

硬件:PC 机一台 ;ZB2530(底板、核心板、仿真器、USB 线) 一套; 光敏或热敏传感器一个
软件:win7 系统,IAR 8.20 集成开发环境

2.3实验相关电路图

接线方法:
1)、VCC:接电源正极(3V3)
2)、GND:接电源负极
3)、DO:TTL 开关信号输出
4)、AO:模拟信号输出(悬空没有使用)

2.4实验相关寄存器

将传感器插到J8 上光敏、热敏共用P0.5 引脚。不过配置不同,当使用继电器
P0.5

表1 端口0的功能选择

这里写图片描述

表2 端口0的方向

这里写图片描述

2.5参考代码

/**Includes*********************************************************************/
#include <ioCC2530.h>

/**宏定义***********************************************************************/
//定义数据类型
typedef unsigned char uchar;
typedef unsigned int  uint;

//端口定义
#define LED1 P1_0            //定义P1.0口为LED1控制端
#define DATA_PIN P0_5        //定义P0.5口为传感器输入端


/**函数声明*********************************************************************/
void InitLed(void);
void DelayMS(uint msec);

/**
  * @brief     主函数
  * @param     None
  * @retval    None
  */
void main(void)
{          
  P0DIR &= ~0x20;          //P0.5定义为输入口 
  
  InitLed();               //设置LED灯相应的IO口

  while(1)                 //死循环  
  {
    if(DATA_PIN == 1)    //当光敏电阻处于黑暗中时P0.5高电平,LED1熄灭
    { 
      LED1 = 1;     
      DelayMS(1000);    
    }
    else    
    {     
      LED1 =  0;       //检测到光线时P0.5为低电平LED1亮
      DelayMS(1000);
    }   
  }    
}

/**
  * @brief     LED初始化函数
  * @param     None
  * @retval    None
  */
void InitLed(void)
{  
  P1DIR |= 0x01;           //P1.0定义为输出口
}

/**
  * @brief     以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M
  * @param     msec 延时参数,值越大,延时越久
  * @retval    None
  */
void DelayMS(uint msec)
{   
  uint i,j;
     
  for (i=0; i<msec; i++)   
    for (j=0; j<535; j++);
}

2.6实验现象

用手挡住光敏电阻,D1亮,移开D1熄灭。

  • 8
    点赞
  • 172
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值