历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2020年11月11日 | 单片机红外对射传感器实验详解

2020-11-11 来源:51hei

实验2 红外对射传感器实验-V20160908

1.实验目的

学习红外对射传感器工作原理;

2.实验设备

硬件:红外对射传感器节点,串口线;

软件:Keil u Vision4编译软件,STC下载软件STC_ISP;

芯片手册:配套光盘附件芯片手册红外对射传感器;

电路原理图路径:配套光盘附件电路原理图;

源码路径:配套光盘源代码传感器原理与应用实验2 红外对射传感器实验-V20161122;

hex文件路径:配套光盘源代码传感器原理与应用实验2 红外对射传感器实验-V20161122out;

3.实验原理

3.1 红外对射传感器介绍

红外对射传感器使用的是槽型红外光电开关。红外光电传感器是捕捉红外线这种不可见光,采用专用的红外发射管和接收管,转换为可以观测的电信号。红外光电传感器有效地防止周围可见光的干扰,进行无接触探测,不损伤被测物体。红外光电传感器在一般情况下,有三部分构成,它们分为:发送器、接收器和检测电路。

红外对射传感器的外型如图3.1所示。槽型红外光电开关把一个红外光发射器和一个红外光接收器面对面地装在一个槽的两侧。发光器能发出红外光,在无阻情况下光接收器能收到光。但当被检测物体从槽中通过时,光被遮挡,光电开关便动作,输出一个开关控制信号,切断或接通负载电流,从而完成一次控制动作。槽形开关的检测距离因为受整体结构的限制一般只有几厘米。

图3.1  红外对射传感器


3.2 光敏传感器的电路图

红外对射传感器电路如图3.2,U1的1,2脚为红外发射端,3,4脚为接收端,当凹槽中有物体挡住红外线时,3,4脚之间截止,1IN+为高电平,D4输出高电平;当凹槽中没有物体挡住红外线时,3,4脚之间导通,1IN+为低电平,D4输出低电平。

图3.2  红外对射传感器电路

4.实验步骤

4.1 编写实验源代码文件

4.1.1 取红外对射传感器节点,打开Keil集成开发环境,打开配套光盘源代码传感器原理与应用实验2 红外对射传感器实验-V20161122的工程文件。

4.1.2点击左上角的Rebuild按键,编译整个工程,将生成hongwaiduishe.hex可执行文件,该可执行文件自动保存在配套光盘源代码传感器原理与应用实验2 红外对射传感器实验-V20161122out目录下。(注意:请根据该目录下 hongwaiduishe.hex 文件的生成时间,判断该文件是否是自己刚刚编译完成的。)

4.1.3 使用串口线将电脑与红外对射传感器节点的串口相连,将红外对射传感器节点上的S1开关拨打到左边,让STC单片机和DB9相连。

4.1.4 根据 配套光盘第三方应用软件STC_ISP的STC-ISP软件使用说明书-甄鹏-V20160423,使用STC-ISP软件将4.1.2步中生成的可执行hongwaiduishe.hex文件通过STC_ISP串口下载软件下载进STC单片机中。

4.2  实验源代码解析

#include


#define                            BUF_LENTH              128                            //定义串口接收缓冲长度

#define     uint unsigned int

#define     uchar unsigned char

unsigned char               uart1_wr;                            //写指针

unsigned char               uart1_rd;                            //读指针

unsigned char               xdata RX0_Buffer[BUF_LENTH];              //接收缓冲

unsigned char flag;

unsigned char i;

unsigned char   xdata mbus_buffer[255];

unsigned char   xdata mbus_Sendbuf[255];

unsigned char   xdata Crc_buf[2];  //声明存储CRC校验值的高8位及低8位的缓存

unsigned int  Crc_return_data;  //声明CRC校验值

bit                            B_TI; //发送完成标志

sbit  P1_0 = P1^0;//定义P1.0端口

//                                                                                                                7       6      5       4         3      2    1    0   Reset Value

//sfr ADC_CONTR = 0xBC;                            ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000              //AD 转换控制寄存器

#define ADC_OFF()              ADC_CONTR = 0

#define ADC_ON                            (1 << 7)

#define ADC_90T                            (3 << 5)

#define ADC_180T              (2 << 5)

#define ADC_360T              (1 << 5)

#define ADC_540T              0

#define ADC_FLAG              (1 << 4)              //软件清0

#define ADC_START              (1 << 3)              //自动清0

#define ADC_CH0                            0

#define ADC_CH1                            1

#define ADC_CH2                            2

#define ADC_CH3                            3

#define ADC_CH4                            4

#define ADC_CH5                            5

#define ADC_CH6                            6

#define ADC_CH7                            7


uint adc10_start(uchar channel);

void              uart1_init(void);

void Uart1_TxByte(unsigned char dat);

void Uart1_String(unsigned char code *puts);

void delay_ms(unsigned char ms);

unsigned int cal_crc(unsigned char *snd, unsigned char num);

/*************** 用户定义参数 *****************************/


#define MAIN_Fosc                            11059200UL            

#define Baudrate0                            9600UL                           

                                                                                                                             

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



/************** 编译器自动生成,用户请勿修改 *****************************/


#define BRT_Reload                                          (256 - MAIN_Fosc / 16 / Baudrate0)                            //Calculate the timer1 reload value ar 1T mode



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


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

//函数名:main(void)

//输入  :无

//输出  :无

//功能描述:检测红外对射传感器中间有无物体,用AD量表示,当返回值大于

//500判定有物体        

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

void              main(void)

{

              uint              j;

              uart1_init();//初始化串口

              P1ASF = (1 << ADC_CH0);              //STC12C5A16S2系列模拟输入(AD)选择ADC1(P1.0)

              ADC_CONTR = ADC_360T | ADC_ON;

              while(1)

              {

                                             j = adc10_start(0);              //(P1.0)ADC1转换

                                          delay_ms(5);

              if(flag==1)

                                          {                            delay_ms(5);

                                                                                                                                                                                                                                                     

                                                                      if(RX0_Buffer[0x03] == 0x2C)

                                                                      {

                                                                                 

推荐阅读

史海拾趣

DAVE Embedded Systems公司的发展小趣事

DAVE Embedded Systems公司于1998年在意大利创立,其初衷是提供嵌入式系统解决方案。在成立初期,公司只有几名工程师和有限的资金,但他们凭借对技术的热爱和对市场的敏锐洞察力,成功设计并销售出了第一款基于微处理器和Linux平台的嵌入式系统模块(SOM)。这款产品因其高性价比和出色的性能,很快赢得了市场的认可,为公司的发展奠定了基础。

Connection One公司的发展小趣事

为了进一步提升国际竞争力,Connection One公司开始实施全球化战略布局。公司在全球范围内设立研发中心和销售网络,以便更好地了解当地市场需求并提供定制化产品。这一举措不仅加速了公司的国际化进程,还为其带来了更多的商业机会。

Equator Technologies公司的发展小趣事

Equator Technologies公司成立于XX年代初,当时正值数字视频技术飞速发展的时代。公司凭借其在视频DSP(数字信号处理器)领域的独特见解和技术实力,迅速崭露头角。起初,Equator主要聚焦于提供高性能的视频处理解决方案,用于改善电视和其他显示设备的画质。通过不断的技术创新和产品迭代,Equator逐渐在市场中建立了良好的口碑。

Dowosemi公司的发展小趣事

作为一家高新技术企业,Dowosemi公司深知研发投入对企业发展的重要性。他们每年都将大量的资金投入到研发领域,不断推出新的产品和解决方案。这些新产品不仅提升了公司的技术实力,也为公司带来了更多的市场机会。正是这种对研发的重视和投入,让Dowosemi公司在竞争激烈的电子行业中保持了持续的发展动力。

Advanced Milliwave Laboratories Inc公司的发展小趣事

Advanced Milliwave Laboratories Inc(AML)成立于XXXX年,最初由几位在微波技术领域具有丰富经验的专家组成。初创期,AML专注于高频微波技术的研发,通过不断的实验和创新,成功开发出多款具有高性能和稳定性的微波产品。这些产品迅速获得了市场的认可,为AML在微波技术领域奠定了坚实的基础。

ATO SOLUTION公司的发展小趣事

在电子行业的激烈竞争中,ATO SOLUTION公司通过一项创新性的技术突破,成功引领了市场的新潮流。该公司研发出了一款高效能的半导体芯片,极大地提升了电子设备的性能和能效比。这一技术的问世,迅速获得了行业内外的广泛关注和认可,为公司赢得了大量合作伙伴和客户,奠定了市场领先地位。

问答坊 | AI 解惑

matlab第六课预告!

好不容易盼到这里啦! 这里我们一起来分享一下二维图形的绘制和修饰 对数坐标图,极坐标图 饼状图,梯形图,概率分布图,向量图等等的二维图形 如果你觉得不过瘾, 我们接着来三维图形 甚至是GUI的界面都可以的啦! 期待大家的帮助拉!…

查看全部问答>

【分享】ATmega16学习笔记PDF完整版下载(WinAVR)

笔记均为原创,欢迎转载,转载请注明出处! 持续更新中,敬请关注!…

查看全部问答>

USB的问题

现在碰到了一个问题。。。。在USB枚举这一块 在枚举的工程中 当插入USBdevice后。出现了一个RESET的中断,之后马上就会出现一个SUSPEND中断,这正常吗?出现这个中断我该怎么处理,是硬件的问题还是软件的问题…

查看全部问答>

求嵌入式开发的经典教材

本人是嵌入式开发的新手,请高人说说嵌入式开发的什么教材比较经典或则比较好的网站,谢谢!…

查看全部问答>

打印驱动问题(位图打印),请高手指教

我用的是DDK里的打印成位图驱动。并对OEMSendPage进行了Hook。主要是想把位图按页分成多个图片。当我打印多页时(以5页为例),在第一页插入一张图片,结果只打印后2,3,4,5页。当每页都插入图片,则只是打印成一张长长的位图(又回到了原始的DDK ...…

查看全部问答>

有关捕获单元的编程问题

我是新手,最近在编一个程序需要用到捕获单元,但有一点想不清楚,就是我需要在第一次捕获时屏蔽中断,第二次捕获后响应中断,从而读出这两个的差值,但程序应该怎么编写呢。感谢指点!…

查看全部问答>

DSP 28335

由于本人刚刚接触DSP28335,想学习一下这个处理器,哪位大哥有好的资料,麻烦给小弟分享一下。 还有就是DSP28335在什么软件基础上编程。 谢谢了。  …

查看全部问答>

谁遇到过SIM300,接受TCP数据后,串口读取数据时,发现数据丢失情况

谁遇到过SIM300,接受TCP数据后,串口读取数据时,发现数据丢失情况~~~急啊~~~高手解答一下啊~~急~!!!…

查看全部问答>

频率计

小弟要做个频率计  用32测外部输入频率   没接触过32  现在又急着用    那位大哥大姐有这个程序或者有这方面的程序    请发我下 1501806575@qq.com   万分感激。…

查看全部问答>