微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机驱动超声波测距模块C51程序

51单片机驱动超声波测距模块C51程序

时间:11-30 来源:互联网 点击:
************/void inter_T1() interrupt 3 { TR1=0; EX0=0; //关外部中断0TH1=0; TL1=0; flag=2; } /************************************************************************************** * 名 称 :void inter1() interrupt 2 * 功 能 :外部中断1函数 * 入 口 参 数 :NULL * 全 局 变 量 :Count_TH,Count_TL * 返 回 值 :NULL **************************************************************************************/void inter0() interrupt 0{ TR1=0; EX0=0; flag=1; } /************************************************************************************** * 名 称 :void send_T() * 功 能 :发送10个超声波脉冲 * 入 口 参 数 :NULL * 全 局 变 量 :Count * 返 回 值 :NULL **************************************************************************************/void send_T() { delay_100us();//发送100us的方波 TR0=0;//关定时器T0 } /************************************************************************************** * 名 称 :void delay(uint z) * 功 能 :延时一段时间 * 入 口 参 数 :z * 全 局 变 量 :NULL * 返 回 值 :NULL **************************************************************************************/void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=1000;y>0;y--); } /************************************************************************************** * 名 称 :void delay_300us() * 功 能 :延时300us * 入 口 参 数 :NULL * 全 局 变 量 :NULL * 返 回 值 :NULL **************************************************************************************/void delay_300us() { uint x; for(x=75;x>0;x--); } /************************************************************************************** * 名 称 :void delay_100us() * 功 能 :延时100us * 入 口 参 数 :NULL * 全 局 变 量 :NULL * 返 回 值 :NULL **************************************************************************************/void delay_100us() { uint x; for(x=24;x>0;x--); } //*************************************************************************************** void main() { uint t,s; init_Total();//总初始化 while(1) { TR1=1;//启动定时器1 TR0=1;//启动定时器0 send_T(); //发送100us超声波脉冲 delay_300us();//延时300us跳过盲区 EX1=1; //开外部中断1 while(!flag); //等待回波或定时器T1溢出 if(flag==1) //回波 { Count_TH=TH1;//读计数器T1的高位TH1 Count_TL=TL1;//读计数器T1的低位TL1 t=Count_TH*256+Count_TL; s=(33140*t)/400000; distance(4,s);//液晶1602显示距离 } /* else //定时器T1溢出 { Count_TH=0XFE; Count_TL=0X7F; // P2=Count_TH; P2=Count_TL; } */delay(150); flag=0;//标志位清0 TH1=0; //T1清0重新计时 TL1=0; } }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top