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内部电路分析;独立按键实现和消抖

推荐阅读最新更新时间:2024-11-12 14:17

有关C51存储器类型与51单片机的物理区域
1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 扩展阅读:51单片机的特殊功能寄存器(SFR) 3、 确保你的程序中没有未调用的函数。 在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。 4、 程序中遇到的逻辑标志变量
[单片机]
C51单片机0~60计数器
源码 #includeunsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char second=0; bit a=0; char t=0; int0_srv() interrupt 1{ t++; if(t==20){t=0;a=1;} TH0=0x3c; TL0=0xb0; } main(){ P0=P2=table ; TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; while(1){ if(a){
[单片机]
C<font color='red'>51单片机</font>0~60计数器
AT89S51单片机对十字路口交通信号灯的控制设计
一、技术要求 某十字路口,如下图所示,设计一个交通灯信号控制器,指挥交通车的通行。要求如下: 1)东西通道和南北通道交替通行,东西通道每次放行时间大于南北通道每次放行时间。 2)绿灯亮表示可以通行,红灯亮表示禁止通行。 3)每次绿灯变红灯时,绿灯先闪转变黄灯(此时另一干道上的红灯不变)。 4)要有数字显示,作为时间提示,以便人们更直观地把握时间。具体要求东西通道、南北通道通行时间及黄灯亮的时间均以秒为单位作减计数。 二、硬件电路说明 2.1电路设计原理图 本设计是以89S51为主控芯片 ,利用P1口控制74LS240(八反相缓冲器,线驱动器)驱动发光二极管模拟交通灯。倒计时显示部分采用串口实现。串口工作在方式0时通过外接
[单片机]
AT89S<font color='red'>51单片机</font>对十字路口交通信号灯的控制设计
51单片机程序及调试步骤实战经验
我刚参加工作的时候,用的是stc 51单片机的,51单片机不像stm32那样可以通过st-link在keil上面在线仿真。 有时候出现bug的时候,非常难找问题,要一段一段屏蔽然后测试。 在刚开始接触开发的时候,我非常不习惯用在线仿真,大概是因为没用过。 记得有一次进了一家公司做行车记录仪,用的台产GRAIN的单片机。 那时候基本上没什么资料,就一个dada sheet和demo程序。 在开发之前,老大安排了给我一个任务,就是把这个仿真环境先给搭起来。 相当于是他们原厂没有的东西,让我去搞定,这个芯片是基于Fa626TE core的32位控制器。 网上的资料太少了,光是测试搭建这个环境花了半个多月,最后还没搭建出来。
[单片机]
基于51单片机的无线供电模块的无线传输系统效率检测
1引言 无线供电是一种方便、安全的供电装置,之间不需要任何物理连接,当发送端产生的振荡磁场 频率 和接收端的固有频率相同时,接收端就产生共振,从而实现了能量的传输。现在已经用于一些小的家电中,也许在不久的将来将用于室内供电和城市的供电,彻底代替电线,应用前景广泛。本文主要阐述近距离无线供电,具有低功耗、安全等特点,通过单片机检测 更好的增加了它的可靠性。 2系统方案设计 无线供电演示装置的设计制作。该电路由电源发射电路、接收电路、检测显示电路三部分组成 。 2.1方案论证与选择 方案1:震荡电路 发射电路用NE555产生可以调节频率的对称方波,接L298放大和恒流源模块产生 电压 12v、频率20M
[单片机]
基于<font color='red'>51单片机</font>的无线供电模块的无线传输系统效率检测
51单片机串口通信例子
小记:本例子是在别人的版本修改而来的,因本人没有11.0592MHz的晶振,进而采用12MHz的,经过波特率的调整发现在波特率为1200时,定时器工作在方式二,穿口工作在模式二,且SMOD=1.此时定时器的TH1=TL1=0xCC,此时调试串口没有错误。 发送例子: #include reg52.h #include stdio.h void delay(unsigned int i); char code message ="welcome"; unsigned char a; void main(void) { SCON=0x50; //REN=1 ,串口工作模式2; TMOD=0x20; //
[单片机]
51单片机常见的六个问题
  一,为何51单片机爱用11.0592MHZ晶振?   其一:由于它能够精确地划分红时钟频率,与UART(通用异步接纳器/发送器)量常见的波特率有关。特别是较高的波特率(19600,19200),不论多么古怪的值,这些晶振都是精确,常被运用的。   其二:用11.0592晶振的缘由是51单片机的定时器致使的。用51单片机的定时器做波特率发生器时,假如用11.0592Mhz的晶振,根据公式算下来需求定时器设置的值都是整数;假如用12Mhz晶振,则波特率都是有误差的,比如9600,用定时器取0XFD,实践波特率10000,通常波特率误差在4%摆布都是能够的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率6
[单片机]
AT89C2051单片机双路路灯照明控制器
  通常我们常见的路灯、通道灯、广告灯箱等公共场所用照明灯具往往彻夜通明,或者说在白天不应照明时工作了,造成了电能的浪费。还有些因为采用了定时控制方式,随着季节的变化未能及时设置好控制器,造成了控制不适时,如天已暗灯未明等现象,影响了照明效果。本文介绍采用AT89C2O5l 单片机 制作的双路路灯照明控制器,仍然采用光控式,但与一般的光控开关相比由于采用了单片机,具有较强  的抗干扰性能,一路为夜间全明,另一路可设置晚上照明时间,到时自动关闭。 iframe id="iframeu2163852_0" src="http://pos.baidu.com/ycmm?conwid=250&conhei=250&rdid=216
[单片机]
AT89C20<font color='red'>51单片机</font>双路路灯照明控制器
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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