历史上的今天
今天是: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) {
史海拾趣
|
好不容易盼到这里啦! 这里我们一起来分享一下二维图形的绘制和修饰 对数坐标图,极坐标图 饼状图,梯形图,概率分布图,向量图等等的二维图形 如果你觉得不过瘾, 我们接着来三维图形 甚至是GUI的界面都可以的啦! 期待大家的帮助拉!… 查看全部问答> |
|
我用的是DDK里的打印成位图驱动。并对OEMSendPage进行了Hook。主要是想把位图按页分成多个图片。当我打印多页时(以5页为例),在第一页插入一张图片,结果只打印后2,3,4,5页。当每页都插入图片,则只是打印成一张长长的位图(又回到了原始的DDK ...… 查看全部问答> |
|
我是新手,最近在编一个程序需要用到捕获单元,但有一点想不清楚,就是我需要在第一次捕获时屏蔽中断,第二次捕获后响应中断,从而读出这两个的差值,但程序应该怎么编写呢。感谢指点!… 查看全部问答> |
|
谁遇到过SIM300,接受TCP数据后,串口读取数据时,发现数据丢失情况 谁遇到过SIM300,接受TCP数据后,串口读取数据时,发现数据丢失情况~~~急啊~~~高手解答一下啊~~急~!!!… 查看全部问答> |




