实验二红外测距传感器实验

合集下载

红外传感器的性能测试及应用实验报告

红外传感器的性能测试及应用实验报告

红外传感器的性能测试及应用实验报告学院:计算机与电子信息学院专业:电子信息与通信工程类班级学号:姓名:一、实验目的:1、掌握红外传感器的基本应用电路。

2、掌握收、发红外光的元件的基本特性。

3、掌握红外传感器在黑线检测应用上的性能特点。

二、实验设备:二、万用表,双路直流电压源。

实验基本元件:带有收发功能的一体化的红外传感器RPR220,100k电位器二个,100定值电阻R,2k电阻定值电阻R。

,12 三、实验原理:测试红外线传感的电路如图所示:第 1 页左边为发射管,通过的电流为;右边为接收管,通过的电流为。

IIFC传感器的基本特性是:发射管,通过的电流越大,发射的光的强度也越大;接收管,接收到的光越强,通过的电流就越大。

发射管把红外线发射出去,红外线经过反射平面反射回到接收管。

通过检测接收管的电流大小,就可以感知到反射平面的反射强度。

在白底平面上检测黑线的应用中,就是根据反射回来的光线在接收管中产生的电流大小,来判断是否存在黑线。

测量回路电流大小的方法,就是在回路中,串联阻值已知的电阻,通过测量电阻上的电压,换算出实际电流的大小。

实际应用中,将发射管回路中的电流源换成电压源,通过改变回路串联电阻的大小,来调节回路电流的大小。

本实验中,该串联电阻应由一固定数值的电阻和一电位器组成,其中固定电阻的作用,一是通过它来测量出电流大小,二是防止当电位器调节到0时,有可能会导致电流过大而烧毁发射管。

对于接收管回路,可采用这种方法来达到既能测量回路电流大小,又可以调节接收管上电压大小的目的。

四、实验主要任务:1、根据实验原理所述知识及后面任务的需要,设计并制作一个测试红外线传感器性能的电路。

2、若为传感器前端到反射平面(白纸)之间的距离大小,分别测量出当ddmm,10dmm,20和时的以下特性曲线。

(a) (b)测量(a)图特性时,必须确保流过发射管的电流不超过其极限值。

VImA,10ImA,20测量(b)图特性时,只测量当和的两条特性曲线。

红外测距传感器实训报告

红外测距传感器实训报告

#### 一、实训背景随着科技的飞速发展,红外测距技术在各个领域得到了广泛应用。

红外测距传感器作为一种非接触式测距设备,具有精度高、响应速度快、抗干扰能力强等特点,在工业自动化、机器人导航、智能交通等领域具有广泛的应用前景。

为了更好地掌握红外测距传感器的工作原理和应用,我们开展了本次实训。

#### 二、实训目的1. 理解红外测距传感器的原理和特性;2. 掌握红外测距电路的制作与调试方法;3. 熟悉红外测距传感器的应用场景和编程技巧;4. 培养动手实践能力和团队合作精神。

#### 三、实训内容1. 红外测距传感器原理及特性红外测距传感器通过发射红外线,测量红外线从发射到反射回来的时间,从而计算出与被测物体的距离。

其工作原理如下:(1)红外发射管发射特定波长的红外线;(2)红外线照射到被测物体上,部分红外线被反射回来;(3)红外接收管接收反射回来的红外线,并将信号传输给处理电路;(4)处理电路根据红外线发射和接收的时间差计算出距离。

红外测距传感器的特性包括:- 测量范围广:通常可测量0.1m至数十米距离;- 响应速度快:可达到毫秒级;- 抗干扰能力强:对环境光线、湿度等影响较小;- 成本低:结构简单,易于制作。

2. 红外测距电路制作与调试本次实训采用红外测距传感器LDM301进行电路制作与调试。

具体步骤如下:(1)电路元件准备:LDM301红外测距传感器、单片机(如Arduino)、电源模块、电阻、电容等;(2)电路连接:将红外测距传感器、单片机、电源模块等按照电路图连接;(3)调试:通过编程调整红外测距传感器的参数,使电路稳定工作;(4)测试:在实验室环境中测试红外测距传感器的性能,包括测量范围、响应速度、抗干扰能力等。

3. 红外测距传感器应用本次实训中,我们将红外测距传感器应用于以下场景:(1)避障机器人:通过红外测距传感器检测前方障碍物距离,控制机器人避开障碍物;(2)智能家居:红外测距传感器可应用于智能门锁、窗帘自动关闭等场景;(3)工业自动化:红外测距传感器可用于生产线上的物料检测、设备定位等。

红外对射传感器实训报告

红外对射传感器实训报告

一、实训目的本次实训旨在使学生了解红外对射传感器的工作原理、性能特点和应用领域,掌握红外对射传感器的选型、安装、调试及故障排除方法。

通过实训,提高学生的动手能力和实际应用能力。

二、实训时间2023年11月15日三、实训地点学校电子实验室四、实训器材1. 红外对射传感器模块2. STM32开发板3. 5V电源4. 连接线5. 面包板6. 测试电路五、实训内容1. 红外对射传感器工作原理及性能特点2. 红外对射传感器选型及应用3. 红外对射传感器安装与调试4. 红外对射传感器故障排除六、实训过程1. 红外对射传感器工作原理及性能特点红外对射传感器是一种利用红外线进行检测的传感器,主要由发射器、接收器和信号处理电路组成。

当发射器发射的红外线被物体阻挡时,接收器接收到的信号强度会发生变化,从而判断物体是否存在。

红外对射传感器的性能特点如下:(1)响应速度快:红外对射传感器具有较快的响应速度,适用于实时检测。

(2)抗干扰能力强:红外对射传感器对环境光线、温度等因素影响较小,具有较强的抗干扰能力。

(3)安装方便:红外对射传感器安装简单,适用于各种场合。

2. 红外对射传感器选型及应用根据实训要求,我们选择了以下红外对射传感器:(1)型号:HSR-412(2)工作电压:5V(3)输出方式:开关量输出红外对射传感器广泛应用于以下领域:(1)自动门控制系统(2)机器人避障(3)生产线自动检测(4)安全防护3. 红外对射传感器安装与调试(1)将红外对射传感器模块的VCC和GND分别连接到5V电源的正负极。

(2)将红外对射传感器模块的DO输出端连接到STM32开发板的GPIO口。

(3)编写程序,实现红外对射传感器的检测功能。

(4)通过OLED显示屏显示检测到的物体信息。

4. 红外对射传感器故障排除在实训过程中,我们遇到了以下故障:(1)传感器输出信号不稳定:检查连接线和电源,确保连接正确且电源稳定。

(2)传感器检测距离过近:调整红外对射传感器的安装位置,使其与检测物体的距离适中。

红外传感器实验报告

红外传感器实验报告

红外传感器实验报告红外传感器实验报告引言:红外传感器是一种常用的电子元件,广泛应用于遥控、安防、自动化等领域。

本次实验旨在探究红外传感器的原理、特性以及应用,并通过实际操作验证其性能。

一、红外传感器的原理与结构红外传感器利用红外线的特性实现物体的探测与测量。

其原理基于物体对红外线的反射或吸收,进而产生电信号。

红外传感器的结构一般包括红外发射器和红外接收器两部分。

红外发射器发出红外线,而红外接收器则接收并转化为电信号。

二、红外传感器的特性1. 非接触性:红外传感器无需物体与其直接接触,通过红外线的反射或吸收即可实现探测。

2. 高灵敏度:红外传感器对红外线的响应非常敏感,能够捕捉微弱的红外信号。

3. 宽频率范围:红外传感器能够感知不同频率范围内的红外线,具有较高的适应性。

4. 快速响应:红外传感器的响应速度较快,能够迅速捕捉到物体的变化。

三、红外传感器的应用1. 遥控器:红外传感器广泛应用于电视、空调等家电的遥控器中,通过发射与接收红外信号来实现设备的控制。

2. 安防系统:红外传感器可用于安防系统中,通过感知人体的红外辐射来实现入侵报警、监控等功能。

3. 自动化控制:红外传感器可用于自动化控制系统中,如自动门、自动水龙头等,通过感知物体的接近来实现自动开关。

4. 医疗领域:红外传感器还可以应用于医疗设备中,如体温计、血糖仪等,通过感知人体的红外辐射来实现测量。

四、实验操作与结果本次实验中,我们选择了一款常见的红外传感器进行测试。

首先,我们将红外发射器与红外接收器连接到电路板上,并通过电源供电。

接着,我们使用示波器来观察红外接收器输出的电信号。

在实验过程中,我们将不同物体放置在红外传感器的感知范围内,并记录下红外接收器输出的信号波形。

实验结果显示,当物体靠近红外传感器时,红外接收器输出的电信号幅度增加,而当物体远离时,电信号幅度减小。

这表明红外传感器能够准确感知物体的距离变化。

五、实验总结通过本次实验,我们深入了解了红外传感器的原理、特性以及应用。

红外传感实验报告

红外传感实验报告

红外传感实验报告红外传感实验报告引言:红外传感技术是一种应用广泛的无线通信技术,它能够通过探测和接收红外线信号来实现信息的传输和控制。

本实验旨在通过搭建红外传感器电路,探究红外传感技术的原理和应用。

一、实验目的本实验的主要目的是通过实际操作,了解红外传感器的工作原理和应用场景,并能够掌握相关的实验技巧和数据处理方法。

二、实验器材与方法1. 实验器材:- 红外传感器模块- Arduino开发板- 连接线2. 实验方法:- 将红外传感器模块与Arduino开发板连接- 编写Arduino程序,读取红外传感器模块输出的信号- 进行实验数据采集和分析三、实验过程1. 连接红外传感器模块与Arduino开发板:将红外传感器模块的信号引脚与Arduino开发板的数字输入引脚相连,将电源引脚与5V电源和地引脚相连。

2. 编写Arduino程序:使用Arduino开发环境编写程序,通过digitalRead函数读取红外传感器模块输出的信号。

将读取到的信号通过串口输出,以便后续的数据分析。

3. 实验数据采集与分析:将红外传感器模块放置在不同的位置和距离下,记录下红外传感器模块输出的信号。

通过对不同位置和距离下的信号进行分析,可以得出红外传感器对红外线的探测范围和敏感度。

四、实验结果与讨论通过实验数据的采集和分析,我们可以得出以下结论:1. 红外传感器对红外线的探测范围较广,可以达到几米甚至更远的距离。

2. 红外传感器对不同物体的反射红外线的敏感度不同,可以通过调整传感器的灵敏度来适应不同的应用场景。

3. 红外传感器对环境光的干扰较小,适用于室内和室外各种环境。

五、实验总结通过本次实验,我们深入了解了红外传感技术的原理和应用。

红外传感器作为一种常用的无线通信技术,具有广泛的应用前景。

在实际应用中,我们可以利用红外传感器实现遥控、安防、智能家居等功能。

同时,我们也学会了如何搭建红外传感器电路、编写Arduino程序,并通过实验数据的采集和分析,得出了一些有价值的结论。

利用红外发射接收传感器进行距离检测

利用红外发射接收传感器进行距离检测

利用红外发射接收传感器进展距离检测一、实验要求对红外的发射接收作进一步的探讨。

红外可以用来测距离,理解红外测距的根本原理,能够掌握简单的比例控制方法,以及编程。

掌握定时/计数器的使用。

对循迹效果作分析。

二、实验概要本实验将探讨红外测距的内容。

利用红外检测器的内置电子滤波功能,调节发射红外的载波频率,而检测器对不同频率的信号有不同的“敏感度〞,这样,就能大概的知道距离。

1.测试红外的扫描频率。

记录红外发射接收的距离。

2.尾随小车。

让一个小车跟着另一个小车前行。

要将前后距离控制在一定的X围内,假设前后距离较大,后面跟随的小车应该加速,跟上去;假设距离小于预定值,那么减速。

3.跟踪黑色条纹带。

红外测距的另一种形式的应用。

也能让小车实现循迹功能。

三、实验内容红外技术开展到现在,已经为大家所熟知,这种技术已经在现代科技、国防和工农业等领域获得了广泛的应用。

红外传感系统是用红外线为介质的测量系统,按照功能能够分成五类:〔1〕辐射计,用于辐射和光谱测量;〔2〕搜索和跟踪系统,用于搜索和跟踪红外目标,确定其空间位置并对它的运动进展跟踪;〔3〕热成像系统,可产生整个目标红外辐射的分布图像;〔4〕红外测距和通信系统;〔5〕混合系统,是指以上各类系统中的两个或者多个的组合。

红外传感器根据探测机理可分成为:光子探测器〔基于光电效应〕和热探测器〔基于热效应〕。

本次试验将尝试用红外来测距。

1.测试扫描频率下列图9-1显示的是一个特殊品牌的红外线探测器数据表〔Panasonic PNA4602M〕的局部摘录。

这个摘录显示了红外线探测器在接收到频率不同于38.5 kHz时红外线信号时其敏感程度随频率变化的曲线图。

例如,当你发送频率为40 kHz的信号给探测器时,它的灵敏度是频率为38.5 kHz的50%。

如果红外LED发送频率为42 kHz,探测器的灵敏度是频率为38.5 kHz的20%左右。

尤其是对于让探测器的灵敏度很底的频率,为了让探测器探测到红外线的反射,物体必须离探测器更近让反射的红外光更强。

红外传感器测试实训报告

红外传感器测试实训报告

一、实训目的本次实训旨在让学生了解红外传感器的原理、结构、工作特性,并掌握红外传感器的测试方法。

通过实训,使学生能够熟练使用红外传感器进行实际测量,并具备分析测量结果、解决实际问题的能力。

二、实训内容1. 红外传感器原理与结构红外传感器是一种利用红外线特性进行测量的传感器。

其工作原理是:物体在辐射红外线时,红外传感器通过接收这些红外线并将其转换为电信号,从而实现对物体状态的测量。

红外传感器的结构主要由光学系统、探测器、信号调理电路和显示系统等组成。

其中,光学系统负责将红外线聚焦到探测器上;探测器将红外线转换为电信号;信号调理电路对电信号进行处理;显示系统将处理后的信号显示出来。

2. 红外传感器的测试方法(1)基本测试1)外观检查:检查红外传感器的外观是否有损坏、变形等现象。

2)连接检查:检查红外传感器的连接线是否完好,接触是否牢固。

3)工作电压测试:使用万用表测量红外传感器的工作电压,确保其符合规格要求。

(2)性能测试1)灵敏度测试:将红外传感器置于一定距离处,使用红外辐射源照射传感器,观察传感器输出信号的幅度。

通过改变照射强度,绘制灵敏度曲线,分析传感器的灵敏度。

2)响应时间测试:将红外传感器置于一定距离处,使用红外辐射源照射传感器,记录传感器输出信号从低电平到高电平的时间,以及从高电平到低电平的时间。

通过比较不同传感器的响应时间,分析其性能。

3)抗干扰能力测试:在红外传感器附近加入干扰源,如振动、射频等,观察传感器输出信号的变化,分析其抗干扰能力。

4)温度特性测试:将红外传感器置于不同温度环境下,观察传感器输出信号的变化,分析其温度特性。

5)距离特性测试:将红外传感器置于不同距离处,观察传感器输出信号的变化,分析其距离特性。

3. 实训项目本次实训选取了以下项目进行测试:(1)热释电红外传感器测试(2)红外雨量传感器测试(3)红外测距传感器测试三、实训过程1. 准备工作实训前,准备好所需的仪器设备,包括红外传感器、红外辐射源、万用表、信号发生器等。

红外测距原理实验

红外测距原理实验
七、实验思考题
1、思考红外测距对校准光束的发散角有什么要求,为什么?
答:校准光束的发散角不能太大也不能太小,因为发散角太大或太小的话,反射回来的光束不能被光电监测期间PSD检测器件检测到。
2、思考红外测距结构中的滤光片、凸透镜的作用,去掉他们是否可行,为什么?
答:滤光片的作用是滤光,使检测器PSD接受到的是红外单色光,而凸透镜则起汇聚光线的作用,不能去掉它们,使用它们的目的就是是反射光束打到 PSD上时更容易被PSD检测到,把它们去了,PSD就不易检测到反射光束。
教师评语及评分:
签名:年月日
(式1-2)
得到:
(式1-3)
四、实验注意事项
1、实验过程中严禁用导体接触实验仪裸露元器件及其引脚;
2、实验模块带电时,严禁插、拔实验连线及可拆卸元件;
3、实验过程中,注意电源及信号连线的对应连接,请勿误接。
五、实验步骤
1、检查实验模块是否断电,在断电情况下进行实验。
2、用2#连接导线将“PSD_Vo”端口与数据采集与处理单元中的“A/D”端口相连。
3、打开实验模块电源,观察液晶屏是否工作正常,观察液晶屏是否有示数显示。
4、将挡板放置在结构件探测前端10cm-80cm范围内,且使挡板与传感器垂直;在10cm-80cm的距离范围内,水平移动挡板距离,观察液晶屏显示的电压数值与距离数据是否变化。
5、将挡板放置在垂直放置在传感器10cm处,由近到远水平移动挡板,5cm为间距,记录相应位置的电压V、液晶屏显示距离D。
实验序号
实验三
实验名称
红外测距原理实验
实验时间
2016-4-20
实验室
同析楼三栋216实验室
一、实验目的
1、掌握红外测距的三角测距原理;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息工程学院实验报告课程名称:传感器原理及应用实验项目名称:实验二红外测距传感器实验实验时间:2016.10.8 班级:姓名:学号:一、实验目的1. 学习CC2530 单片机ADC 模块的使用。

2. 学习红外测距传感器的使用。

二、实验原理1. CC2530节点与红外测距传感器的硬件接口红外线测距传感器模块GP2Y0A21YK0F 成绩:指导老师(签名):(1). 红外测距传感器模块(GP2Y0A21YK0F)引脚OUT:模拟量输出接口(AD 模块)GND:外接GNDVCC:数字量输出接口(0 和1) 外接5V 电源(2). 传感器模块与CC2530 模块之间的连接2. ADC(1). 简介CC2530单片机的ADC支持多达14位的模拟数字转换,具有多达12位的ENOB(有效数字位)。

它包括一个模拟多路转换器,具有多达8个各自可配置的通道;以及一个参考电压发生器。

转换结果通过DMA写入存储器。

还具有若干运行模式。

ADC模块的方框图如下所示:ADC的主要特性如下:●可选的抽取率,这也设置了分辨率(7到12位)●8个独立的输入通道,可接受单端或差分信号●参考电压可选为内部单端、外部单端、外部差分或A VDD5 ●产生中断请求●转换结束时的DMA触发●温度传感器输入●电池测量功能(2). 寄存器简介本次实验中主要涉及到ADC模块的寄存器:数据的换算:例如:在CC2530 中配置ADC 的参考电压为A VDD5(3.3V),抽取率为512(12 位有效数据),由于在实验中采用单端转换方式,所以实际数据只有11 位。

这时,ADC 采集到的数据记为x,则ADC采集数据转换为电压(单位:V):V = x * 3.3 / 20483. GP2Y0A21YK0F 红外测距传感器(1). 概述夏普GP2Y0A21YK0F 测距传感器是基于PSD 的微距传感器,其有效的测量距离在80cm 内,有效的测量角度大于40 度,输出信号为模拟电压,在0 到8cm 左右的范围内与距离成正比非线性关系,在10-80cm 的距离范内成反比非线性关系,平均功耗为30mA,反应时间约为5ms,并且对背景光及温度的适应性较强。

GP2Y0A21YK0F 传感器的默认的测距分辨率为1mm。

由于GP2Y0A21YK0F 传感器采用的是PSD 光信号调制法,因此其输出的信号电压并不是标准的直流电压,而是叠加了波幅约为0.2V,频率1KHz 的方波,由于波幅达到0.2V,这就影响了分辨率。

如果不进行信号处理,分辨率的精度仅能达到1mm。

而如果经过有效处理,在正常情况下可以达到0.1mm以上的精度,完全可以满足一般工程定距等方面的需求。

Sharp 的红外传感器都是基于一个原理,三角测量原理。

红外发射器按照一定的角度发射红外光束,当遇到物体以后,光束会反射回来,反射回来的红外光线被CCD 检测器检测到以后,会获得一个偏移值L,利用三角关系,在知道了发射角度a,偏移距L,中心矩X,以及滤镜的焦距 f 以后,传感器到物体的距离 D 就可以通过几何关系计算出来了。

传感器特点:●基本不受背景光及温度的影响,能满足大部分工程应用的性能要求,有很高的性价比,具有很好的工程应用价值。

(2). 使用方法本实验利用CC2530 的ADC 模块采集红外测距传感器输出的模拟电压数据,然后换算成电压值,在根据数据手册上的特性曲线,如下图所示:将特性曲线通过MATLAB 可以拟合出计算公式,直接根据电压值计算出距离,假设测量出的电压为voltage(V),待测距离为distance(cm),则distance = 26.757 * voltage^-1.236。

三、实验内容与步骤1. 将仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530节点的电源,再将仿真器的另一端用USB 接口与PC 计算机相连。

2. 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开串口调试器软件,设置波特率57600,校验位None,数据位8,停止位1,然后点击打开串口按钮,如下图所示:说明:串口号可以在设备管理器看到,具体方法如下图所示:3. 用IAR Embedded Workbench for 8051 8.10 打开配套传感器实中的“SerialPort.Edition\18.IRDMS\Main.eww”工程文件。

4. 点击IAR 功能菜单上的绿色下载按钮,进入程序下载页面,如下图所示:5. 程序下载完成后,点击IAR 开发环境中的运行程序按钮运行程序,如下图所示:此外,也可以通过点击其它按钮实现对当前程序的调试(单步、断点、暂停、步入等功能)。

6. 扩展实验为了能够更加直观地观察到传感器工作的状况,在实验过程中可以利用光盘中配套的上位机软件CurveDisplay 来观察传感器的数据曲线。

操作步骤(1). 将仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530 节点的电源,再将仿真器的另一端用USB 接口与PC 计算机相连。

(2). 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开配套传感器实验中的“CurveDisplay\CurveDisplay.exe”上位机软件,选择正确的串口号后,再设置波特率57600,校验位None,数据位8,停止位1,最后点击打开连接按钮,如下所示:(3). 用IAR Embedded Workbench for 8051 8.10 打开配套传感器实验中的“Curve.Edition\18.IRDMS\Main.eww”工程文件,然后通过IAR 将程序下载到CC2530 模块中。

程序下载完成后,点击IAR 开发环境中的运行程序按钮运行程序。

四、实验结果及分析:1. 程序正常运行后,每采集一次传感器数据,红色LED 闪烁一下,与此同时串口调试器显示信息(功能扩展,实现按键按一下传感器采样一次)如下图所示:2. 在实验过程中,将传感器水平正对着墙壁或障碍物远离移动,可以在串口调试软件上看到相应ADC 采集到的电压数据也发生相应的变化,其数值越小说明两者之间的距离越大。

3. 扩展实验现象(1). 程序正常运行后,在CurveDisplay 软件中可以观察到传感器的数据曲线,如下图所示:(2). 在实验过程中,将传感器水平正对着墙壁或障碍物远离移动,可以在CurveDisplay 软件上的传感器数据曲线也发生相应的变化,如下图所示:五、实验总结:通过这次学习和操作,我学到了对CC2530 单片机ADC 模块的使用,并懂的了红外测距传感器的使用。

以及通过自己对其功能扩展,实现按键控制传感器的采样。

这次的实验操作让我受益匪浅。

六、源程序清单(加上必要的注释)主要代码如下:#include <ioCC2530.h>#include <math.h>//GPIO_LED定义(1:点亮,0:熄灭)#define GPIO_GLED P1_0#define GPIO_RLED P1_1//GPIO_KEY定义(0:被按下,1:未按下)#define GPIO_SW1 P1_2#define GPIO_SW2 P1_3void InitClock(void) //初始化时钟{unsigned int i;//turn on 16MHz RC and 32MHz XOSC SLEEPCMD &= ~0x04;//wait for 32MHz XOSC stablewhile(!(SLEEPSTA & 0x40));//chip bug workaroundasm("nop");//延时63usfor(i = 0; i < 504; i++){asm("nop");}//Select 32MHz XOSC and the source for 32K clock CLKCONCMD = 0x00;//Wait for the change to be effectivewhile(CLKCONSTA != 0x00);//turn off 16MHz RCSLEEPCMD = 0x80;}void InitGPIO(void) //初始化GPIO{//GPIO_RLED引脚(P1_0,通用IO,输出)P1SEL &= ~0x01;P1DIR |= 0x01;//GPIO_GLED引脚(P1_1,通用IO,输出)P1SEL &= ~0x02;P1DIR |= 0x02;//GPIO_SW1引脚(P1_2,通用IO,输入)P1SEL &= ~0x04;P1DIR &= ~0x04;//GPIO_SW2引脚(P1_3,通用IO,输入)P1SEL &= ~0x08;P1DIR &= ~0x08;}void InitUART(void) //初始化串口USART0{//P0[5..2]配置为外设IOP0SEL |= 0x3C;//USART 0 I/O location: Alternative 2 locationPERCFG &= ~0x01;//UART modeU0CSR |= 0x80;//无流控制,无校验,1位停止位,8位数据位,起始位为低电平,停止位为高电平U0UCR = 0x02;//波特率57600U0GCR |= 0x0A;U0BAUD = 216;//使能串口接收器U0CSR |= 0x40;}void UART_SendStr(const unsigned char *str) //通过串口发送字符串{while(*str){//发送一个字符U0DBUF = *str++;//等待发送完毕while(!UTX0IF);//清除发送中断标志UTX0IF = 0;}}void Float2Str(void *str, float Num, unsigned char FractLen) //将float型数据转换为字符串(FractLen:小数位数1-6){unsigned char *ptr = ((unsigned char *)str);unsigned char FractCache[6] = {'\0'};unsigned char i = FractLen, j;unsigned char tmp;unsigned char sign = (unsigned char)(Num < 0);unsigned long trunc; //整数部分unsigned long fract; //小数部分(4位)if (sign){Num *= -1;}trunc = (unsigned long)Num;fract = (unsigned long)((Num-(unsigned long)Num)*1000000); //处理小数部分if (fract == 0){ptr[i++] = '0';}else{for(j=0; j<6; j++){FractCache[j] = (unsigned char)((fract % 10) + '0');fract /= 10;}}//调整小数位数for(j=0; j<FractLen; j++){ptr[FractLen - 1 - j] = FractCache[6 - 1 - j];}//添加小数点ptr[i++] = '.';//处理整数部分if (trunc == 0){ptr[i++] = '0';}while (trunc > 0){ptr[i++] = (unsigned char)((trunc % 10) + '0');trunc /= 10;}//添加符号位if (sign){ptr[i++] = '-';}//字符串逆序输出for(j=0; j<(i/2); j++){tmp = ptr[j];ptr[j] = ptr[(i-j)-1];ptr[(i-j)-1] = tmp;}//添加字符串结束符ptr[i] = '\0';}void DelayXus(unsigned int Xus) //延时Xus{while(Xus--){asm("nop");asm("nop");asm("nop");}}void DelayXms(unsigned int X) //延时Xms{while (X--){//延时1msDelayXus(1000);}}void InitADC(void) //初始化ADC{//P0.1配置为外设IOP0SEL |= 0x02;//P0.1配置为模拟IOAPCFG |= 0x02;}unsigned int ADC_ReadVal(void) //通过ADC读取P0.1的电压数据{int val;//ADC参考电压: A VDD5 PinADCCON3 |= 0x80;//512 decimation rate (12 bits ENOB)ADCCON3 |= 0x30;//Single channel: AIN1ADCCON3 &= ~0x0F;ADCCON3 |= 0x01;//Wait for the conversion to be donewhile(!(ADCCON1 & 0x80));//Read the result(最高位为符号位)val = (unsigned int)ADCL;val |= (unsigned int)(ADCH << 8);//Treat small negative as 0val = val < 0 ? 0 : val;//12位有效数据(由于单端转换,所以实际数据11位)val = val >> 4;return val;}void main(void){unsigned char cache[16];unsigned int val;float voltage;//初始化时钟InitClock();//初始化IOInitGPIO();//初始化串口USART0InitUART();//初始化ADCInitADC();//关闭GPIO_RLED和GPIO_GLEDGPIO_RLED = 0;GPIO_GLED = 0;//发送串口初始化成功消息UART_SendStr("\nUSART0 Init Successfully!\n");while(1){//点亮GPIO_RLEDGPIO_RLED = 1;//通过ADC读取P0.1的电压数据if(GPIO_SW1){GPIO_RLED = 0;}else {val = ADC_ReadVal();//换算为电压值voltage = val * 3.3 / 2048;//发送ADC采集到的数据UART_SendStr("V oltage(V): ");//最多保留三位小数Float2Str(cache, voltage, 3);UART_SendStr(cache);UART_SendStr(", Distance(cm): ");//换算成距离值(cm)并最多保留两位小数//6cm~80cm之间拟合公式:distance = 26.757 * voltage^-1.236Float2Str(cache, 26.757 * pow(voltage, -1.236), 2);UART_SendStr(cache);UART_SendStr("\n");//关闭GPIO_RLED// GPIO_RLED = 0;}//延时350msDelayXms(350);}}。

相关文档
最新文档