1、 本程序只供参考,应根据自己的实际情况进行编写#include #define uchar unsigned char#define uint unsigned int/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/void delay_20us() uchar a ;for(a=0;a100;a+);/*/显示数据转换程序void display(uint temp) uchar ge,shi,bai;bai=temp/100;shi=(temp%100)/10; ge=temp%10; wela=1;P0=0xf7;w
2、ela=0;dula=1;P0=tablebai;dula=0;delay(1);dula=1;P0=0x00; /关位码dula=0;wela=1;P0=0xef;wela=0;dula=1;P0=tableshi;dula=0;delay(1);dula=1;P0=0x00; /关位码dula=0;dula=1;P0=tablege;dula=0;wela=1;P0=0xdf;wela=0;delay(1);dula=1;P0=0x00; /关位码dula=0;/*void main() uint distance;test =0;Trig=0; /首先拉低脉冲输入引脚EA=1; /打开总
3、中断 0 TMOD=0x10; /定时器 1,16 位工作方式 while(1) EA=0; /关总中断Trig=1; /超声波输入端delay_20us(); /延时 20usTrig=0; /产生一个 20us的脉冲while(Echo=0); /等待 Echo回波引脚变高电平succeed_flag=0; /清测量成功标志EA=1; EX0=1; /打开外部中断 0TH1=0; /定时器 1清零TL1=0; /定时器 1清零TF1=0; /计数溢出标志TR1=1; /启动定时器 1delay(20); /等待测量的结果TR1=0; /关闭定时器 1EX0=0; /关闭外部中断 0if(s
4、ucceed_flag=1) time=timeH*256+timeL;distance=time*0.172; /厘米display(distance); if(succeed_flag=0)distance=0; /没有回波则清零test = !test; /测试灯变化 /*/外部中断 0,用做判断回波电平void exter() interrupt 0 / 外部中断 0是 0号 timeH =TH1; /取出定时器的值timeL =TL1; /取出定时器的值succeed_flag=1;/至成功测量的标志EX0=0; /关闭外部中断/*/定时器 1中断,用做超声波测距计时void timer1() interrupt 3 /TH1=0;TL1=0;