红外测距系统的基本结构该系统主要由红外发射电路、红外接收电路、A/D转换电路,AT89C52芯片、键盘接口电路及LCD显示电路等组成。其组成框图如图所示红外测距系统工作流程在整个红外测距系统工作中,当系统被接入启动电源后,首先,对STM32单片机进行初始化,当单片机接收到红外传感器GP2Y0A21传输的模拟电压信号后,经过A/D转换电路,将输入单片机的模拟电压信号Vout转换为单片机可识别的数字信号,并经过电压距离转换程序,转换出要测量的距离,然后通过10次均值滤波来提高测量的精确度,最后在通过液晶显示屏LCD显示出测量结果。为了实现红外测距,在硬件设计中,我们可以使红外发射驱动电路驱动发射头的红外二极管发出红外光,当红外光由红外接收驱动电路驱动红外接收头的光敏二极管接收到,并通过电压转换,将其转换为可测量的电压值,因为红外光的强度会随距离的缩小而增强,红外接收电路转化的电压值会随之增强。又因为电压与距离成比例,通过对转换的电压的计算,我们可以知道红外发射模块与接收模块的距离。我们采用LCD显示屏动态显示变化中的距离,LCD显示器与AT89C52芯片的P0口与P2.0-2.2接口相接,在红外接收模块运动过程,AT89C52芯片内部会将电压模拟量通过A/D转换将其转化为可显示的数字量,然后通过LCD显示器显示出。通过键盘接口可以实现距离的测量与面积的计算。系统硬件结构电路图红外测距的硬件设计红外收发模块红外发送管是用于发送信号,经过障碍物将信号反射,红外接收管接收到反射回来的信号,然后根据信号强弱将对应的电压值显示在显示模块上,并将此时的距离记录下来。然后整改程序,用红外收发模块进行测距,就可在显示模块上显示出红外接收管接收的信号强度对应的距离值。如图所示GP2Y0A02YK0F有3个端口,其中VCC接信号输入,VO接MCP3001的IN+,GND接地线。GP2Y0A02YK0F测量范围在20cm-150cm之间,测量误差小于0.5cm。是一个距离测量传感器单元,PSD的集成组合构成(位置敏感探测器),IRED(红外发光二极管)和信号原理电路。由于采用三角测量方法,各种物体的反射率,对环境温度和工作时间距离检测不容易产生影响。复位系统单片机复位系统就是让程序计数器回到0000h这个地址,程序重头开始执行,将一些寄存器、存储单元都置为初始设定值,单片机复位的形式有很多种,比如上电复位、看门狗复位、手动复位等等。本开发板运用的是外接电路来手动复位,如图8所示,STM32单片机采用低电平复位,使复位开关RESET按下单片机接入低电平即完成复位操作。A/D转换模块A/D转换器按照转换的原理可分为直接A/D转换器和间接A/D转换器两种类型。直接A/D转换器,就是把模拟信号直接转换成数字信号,比如逐次逼近型。间接A/D转换器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型,电压/频率转换型,电压/脉宽转换型等。其中积分型A/D转换器的电路简单,抗干扰的能力强,而且能做到高分辨率,但是转换速度较慢。有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已经远超出了单纯A/D转换功能,使用十分方便。A/D转换器转换原理:一个完整的A/D转换过程中,必须包括取样、保持、量化与编码等路。取样与保持由于取样的时间极短,取样输出为一串断断续续的窄脉冲。要把每个取样的窄脉冲信号数字化,需要一定的时间。因此在两次取样之间,应将取样的模拟信号暂时储存直到下个取样脉冲到来,我们把这个动作称之为保持。在模拟电路设计中,需要增加一个取样-保持电路。为了保证正确转换,模拟电路要保留着还未转换的数据。LCD显示模块AT89C52单片机概述单片机是在集成电路芯片上集成各种组件的微型计算机,这些组件包括中央处理器CPU、数据存储器RAM、程序内存ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口等电路。由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点,因此在现代电子技术和工业领域中应用较为广泛,在智能仪表中单片机是应用最多、最活跃的领域之一。在控制领域中,现如今人们更注意计算机的底成本、小体积、运行的可靠性和控制的灵活性。在各类仪器、仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,提高计算机的运算速度,简化仪器仪表的硬件结构,提高其性能价格比。最小电路如图所示:程序如下:#includereg52.h#includeintrins.h//包含NOP空指令函数_nop_#includestdio.htypedefunsignedcharBYTE;typedefunsignedintWORD;typedefbitBOOL;#defineucharunsignedchar#defineuintunsignedintsbiteoc=P3^0;sbitoe=P3^1;sbitst=P3^2;sbitclk=P3^6;sbitrs=P0^7;sbitrw=P0^6;sbitep=P0^5;ucharcodetable[]=0123456789;ucharcodetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};//数码管共阴级显示0~9uintad_0809,a1,a2,a3;ucharout;voiddelaynms(uintx);voiddisplay();voidad0809();voiddelayms(uintx){uinti,j;for(i=x;i0;i--)for(j=110;j0;j--);}voiddelay(intm){unsignedchari,j;for(i=0;im;i++)for(j=0;j253;j++);}BOOLlcd_bz(){BOOLresult;rs=0;//读忙信号rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(BOOL)(P2&0x80);ep=0;result;}lcd_wcmd(BYTEcmd){while(lcd_bz());rs=0;rw=0;ep=0;_nop_();_nop_();P2=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}lcd_pos(BYTEpos){lcd_wcmd(pos|0x80);}lcd_wdat(BYTEdat){while(lcd_bz());rs=1;rw=0;ep=0;_nop_();_nop_();P2=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}lcd_init(){lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);}voidmain(){lcd_init();delay(10);TMOD=0X01;TH0=(65536-2)/256;TL0=(65536-2)%256;EA=1;ET0=1;TR0=1;while(1){ad0809();ad_0809=out;display();lcd_pos(7);lcd_wdat(table[a1]);lcd_pos(8);lcd_wdat(table[a2]);lcd_pos(9);lcd_wdat(table[a3]);}}voidT0_time()interrupt1{TH0=(65536-2)/256;TL0=(65536-2)%256;clk=~clk;}voiddelaynms(uintx){while(x--0){unsignedchark;for(k=10;k0;k--);}}voiddisplay(){a1=(ad_0809*49/25)/100;//thehighestbita2=(ad_0809*49/25)/10%10;a3=(ad_0809*49/25)%100%10;}voidad0809(){P1=0xff;//inputoe=0;st=0;st=1;//清0st=0;//启动delaynms(1);while(!eoc);//eoc等于零的话,在这里等待直到eoc=1,结束循环,向下执行oe=1;out=P1;oe=0;}