AT89C2051超声波测距程序范例 作者:尼士 来源: 时间:2009-1-1 10:50:30 阅读次数:924 超声波测距原理:测出回波和发射脉冲之间的时间间隔,由公式:距离=速度*时间/2计算,输出显示。 AT89C2051通过P1.6输出10个40kHz脉冲,由非门做电流放大,以推挽形式加到变压器的初级,升压后推动超声波换能器。在发射的同时,P1.7输出一个高电平启动,给电容C4充电,。发射结束时高电平翻转为低电平,C4开始对R2、R3组成的分压器放电并输出到比较器的负端。 超声波接收换能器将回波送到放大器进行放大后,送入机内比较器的正输入端。发射时P1.7输出的电平用以抑制比较器的翻转,称为渡越时间,抑制发射器发射的超声波直接辐射到接收器。 超声波测距系统软件
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
采用模块化设计,由主程序、发射子程序、查蟓接收子程序、定时子程序、显示子程序等模块组成。该系统的主程序处于键控循环工作方式,当按下测量键时,主程序开始调用发射子程序、查询接收子程序、定时子程序,并把测量结果用显示子程序在液晶屏上显示出来。 由于液晶要使用同一P3口,所以必须使用位操作,否则将导致LCD不能正常显示。在系统还可以加入温度传感器来监测环境温度,可进行温度被偿。为了增强系统的可靠性,应在软硬件上采用抗干扰措施。 # pragma DB OE CD OT(5,SPEED) ROM(LARGE)IV /*连接所需要的库*/ #include #include #include /*定义数据类型*/ typedef unsingned char byte; typedef unsigned int word #define uchar unsigned char #define unint unsigned int #define ulong unsigned long /*定义系统常数*/ #define TRUE 1 #define FALSE 0 #define C=340 /*声速*/ /*定义功能位*/ sbit bflag=ACC7; sbit VOLCK=P1^5; sbit MING=P3^5; sbit QUIET=P1^3; sbit BACK=P1^2; /*定义显示缓冲区*/ uchar idata ON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8 ’8’,’m’,’’,’’,’’}; /*主程序用延时子程序*/ woid main-delay(void) { register i; TRO=1; for(i=0;i<15;i++) { TH0=0; TL0=0; Do{}while(!TF0); TF0=0; } TR0=0; } */通用延时子程序*/ void delay(void) { unint i; for(i=0;i<200;i++){;} } /*键盘延时子程序*/ void key-delay(void) { unint i; for(i=0;i<200;i++){;} } /*初始化程序*/ void start_main() { tegister i; uchar a[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8 ’,’m’,’’,’’,’’}; for(i=0;<16;i++) {ON[i]=a[i];} nitlcd();/*初始化液晶*/ display(ON);/*更新显示*/ } /*主程序*/ void main() { register s,keycode; long idata t; start-main();/*初始化*/ main-delay();/*延时*/; if(keycoed= =true) { keycode=key-scan-wait(); /*判断是否有测量键按下*/ t=measure();*/测量*/ S=0.5*t*C;*/换算*/ Decode-bcd(s.0x09); /*把测量结果置换入显示缓冲区*/ init-lcd();/*初始化液晶*/ display(ON);/*更新显示*/ } }