51单片机~光敏传感器,比较器

发布者:创意驿站最新更新时间:2022-09-26 来源: csdn关键字:51单片机  光敏传感器  比较器 手机看文章 扫描二维码
随时随地手机看文章

(一)光敏传感器说明:

在这里插入图片描述

(二)电压比较器功能:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)输出模式:

由于比较器的输出电压在0~36V,所以要是把Vout接在比较器的VCC上的话,Vout的电压便也输出 0~ 36V,导致比较器无法和芯片沟通传递数据,所以要在Vout上加一个开漏输出上拉电阻,使其输出5V电压,方便和其他电器和芯片沟通。

在这里插入图片描述
在这里插入图片描述

(2).强推挽输出:(当输出为高(低)电平时,还有驱动能力,因为驱动电流比较大)

既可以输出高电平也可以输出低电平,当输入为1时,下方晶体管(当三极管来看待),导通右边Vout输出为低电平,此时有灌电流。

当输如=入为0时,下方晶体管不导通,上方导通VDD电压下来,使Vout输出为高电平。

(3).难点:参数

在这里插入图片描述

共模输入电压

就是限制比较器的V+和V-的电压范围,以此来使Vout的输出在一个正常范围内。

我们单片机上是VCC-1.5V或者2V。

所以我们输入的两个电压必须在0~3.5V(VCC-1.5V=3.5V)。

在这里插入图片描述

(3).输入失调电压:(输入失调电流是由输入失调电压导致的)

在这里插入图片描述
在这里插入图片描述

计算:(放大倍数)

在这里插入图片描述

(4).电路分析:(手写是电路原理)

GM-OUT就是Vout,U14就是LM393,J15就是电路板上的排针,只要把5和6连起来就可以将光敏电阻接到P1.7上,此时将KS-OUT,ZS-OUT,GM-out接到指示灯上,即可完成光敏控制电路。

在这里插入图片描述

(5)家用安全电压知识:

在这里插入图片描述

(6)代码:

光控电路代码:继电器控制光控电路:


#include"reg52.h"


typedef signed char int8;

typedef signed int  int16;

typedef signed long  int32;

typedef unsigned char uint8;   //字符型

typedef unsigned int uint16;

typedef unsigned long uint32;


sbit GK  =P1^7;


sbit JDQ = P2 ^ 0;

sbit SHIFT_CLOCK_595 = P1 ^ 4;    //74HC595

sbit data_A_595 = P1 ^ 0;

sbit LATCH_CLOCK_595 = P2 ^ 3;


void delay(uint16 x_ms)    //延时毫秒

{

uint16 i,j;

for(i=x_ms;i>0;i--)

for(j=114;j>0;j--);

}


void xp74HC595(uint16 dat)

{

uint16 i;

for (i = 0; i < 8; i++)

{

data_A_595 = (dat << i) & 0X80;

SHIFT_CLOCK_595 = 0; //时钟上升沿

SHIFT_CLOCK_595 = 1;

}

LATCH_CLOCK_595 = 0; //给锁存器脉冲,上升沿

LATCH_CLOCK_595 = 1;

}

int16 i;

void main(void)

{

P1  =0XFF;  //关闭流水灯

xp74HC595(0X40);   //打开流水灯573锁存器的使能端

xp74HC595(0X00);   //锁存关掉流水灯的数据

GK=1;  //打开光敏控制孔,使其处于变暗状态

while(1)

{

if(GK==0)    //因为光线偏暗就输出低电平

{

delay(10);

if(GK==0)

{

xp74HC595(0X08);    //控制打开继电器

}

}

else

{

xp74HC595(0X00);    //光线偏亮,控制关闭继电器

}

}

}


(7).作业:

在这里插入图片描述

作业代码:


#include"reg52.h"


typedef signed char int8;

typedef signed int  int16;

typedef signed long  int32;

typedef unsigned char uint8;   //字符型

typedef unsigned int uint16;

typedef unsigned long uint32;


sbit GK  =P1^7;     //光控模块


sbit key1 = P3 ^ 7;       //独立按键接口

sbit key2 = P3 ^ 6;

sbit key3 = P3 ^ 5;

sbit key4 = P3 ^ 4;


sbit JDQ = P2 ^ 0;

sbit SHIFT_CLOCK_595 = P1 ^ 4;    //74HC595

sbit data_A_595 = P1 ^ 0;

sbit LATCH_CLOCK_595 = P2 ^ 3;



sbit duanxuan = P2 ^ 5;    //段选控制数字显示 

sbit weixuan = P2 ^ 6;     //位选控制有几个或者第几个显示数字



//自加变量,用来测试编码表

uint8 code zifu[19] = { 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF };

uint8  code wei_test[8] = { 0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80 };//位选数组


void delay(uint16 x_ms)    //延时毫秒

{

uint16 i,j;

for(i=x_ms;i>0;i--)

for(j=114;j>0;j--);

}


void Disp()   //数码管显示OFF

{

duanxuan=0;   //首先归零

weixuan=0;

P0= zifu[0];   //控制输入 , 自加变量,测试编码表

duanxuan=1;

duanxuan=0;  //以上是我们锁存器芯片段选的控制

duanxuan=0;   //再次归零

weixuan=0;

P0=   0X20;   //位选输入

weixuan=1;    //位选控制

weixuan=0;    //位选锁存

delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、

/*****************************************************/

duanxuan=0;   //首先归零

weixuan=0;

P0= zifu[15];   //控制输入 , 自加变量,测试编码表

duanxuan=1;

duanxuan=0;  //以上是我们锁存器芯片段选的控制

duanxuan=0;   //再次归零

weixuan=0;

P0=   0X40;   //位选输入

weixuan=1;    //位选控制

weixuan=0;    //位选锁存

delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、

/*****************************************************/

duanxuan=0;   //首先归零

weixuan=0;

P0= zifu[15];   //控制输入 , 自加变量,测试编码表

duanxuan=1;

duanxuan=0;  //以上是我们锁存器芯片段选的控制

duanxuan=0;   //再次归零

weixuan=0;

P0=   0X80;   //位选输入

weixuan=1;    //位选控制

weixuan=0;    //位选锁存

delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、

/*****************************************************/

}

void Disp2()     //控制数码管显示ON

{

duanxuan=0;   //首先归零

weixuan=0;

P0= zifu[0];   //控制输入 , 自加变量,测试编码表

duanxuan=1;

duanxuan=0;  //以上是我们锁存器芯片段选的控制

duanxuan=0;   //再次归零

weixuan=0;

P0=   0X40;   //位选输入

weixuan=1;    //位选控制

weixuan=0;    //位选锁存

delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、

/*****************************************************/

duanxuan=0;   //首先归零

weixuan=0;

P0= zifu[16];   //控制输入 , 自加变量,测试编码表

duanxuan=1;

duanxuan=0;  //以上是我们锁存器芯片段选的控制

duanxuan=0;   //再次归零

weixuan=0;

P0=   0X80;   //位选输入

weixuan=1;    //位选控制

weixuan=0;    //位选锁存

delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、

/*****************************************************/

}


void xp74HC595(uint16 dat)

{

uint16 i;

for (i = 0; i < 8; i++)

{

data_A_595 = (dat << i) & 0X80;

SHIFT_CLOCK_595 = 0; //时钟上升沿

SHIFT_CLOCK_595 = 1;

}

LATCH_CLOCK_595 = 0; //给锁存器脉冲,上升沿

LATCH_CLOCK_595 = 1;

}

int16 i;

void sunshine()    //光控电路

{

if(GK==0)    //因为光线偏暗就输出低电平

{

delay(10);

if(GK==0)

{

xp74HC595(0X08);    //控制打开继电器

Disp2();       //显示OFF

}

}

else

{

xp74HC595(0X00);    //光线偏亮,控制关闭继电器

Disp();

}

}

void mos1()

{

sunshine();   //调用sunshine函数写出光控电路

}

uint16 num;

void mos2()      //人工控制电路

{

num=0;        //初始化key2按键按下次数

if(num%2==0)    //按下key2键次数为偶数

{

if(key2==0)   //检测到按键按下

{

xp74HC595(0X04);  //继电器闭合

GK ==1;     //灯亮

Disp();    //显示ON

delay(10);   //按键消抖

while(key2==0)  //松手检测

{

//空:因为保持原状即可,无需再进行操作

num++;

}

}

}

else

{

if(key2==0)

{

xp74HC595(0X00);  //继电器断开

GK  ==0;    //灯灭

Disp2();    //显示OFF

delay(10);

while(key2==0)   //松手检测

{

  //空:因为保持原状即可,无需再进行操作

  num++;

}

}

}

}

void main(void)

{

P1  =0XFF;  //关闭流水灯

xp74HC595(0X40);   //打开流水灯573锁存器的使能端

xp74HC595(0X00);   //锁存关掉流水灯的数据

key1  =1;   //初始化按键

key2  =1;

i=0;     //用i来控制按下key1的次数,用来判断模式1or2   

GK=1;  //打开光敏控制孔,使其处于变暗状态

while(1)

{

if(i%2==0)

{

i++;

mos2();    //如果为偶数,则是模式2

}

else

{

i++;

mos1();    //为奇数,则是模式1

}

}

}

关键字:51单片机  光敏传感器  比较器 引用地址:51单片机~光敏传感器,比较器

上一篇:51单片机~运放控制声控电路,运算放大器
下一篇:51单片机之IO口输入的内部工作原理 ;IO内部电路分析;独立按键实现和消抖

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved