超声波测距C语言源程序代码

上传人:人*** 文档编号:491518440 上传时间:2023-08-25 格式:DOC 页数:10 大小:36KB
返回 下载 相关 举报
超声波测距C语言源程序代码_第1页
第1页 / 共10页
超声波测距C语言源程序代码_第2页
第2页 / 共10页
超声波测距C语言源程序代码_第3页
第3页 / 共10页
超声波测距C语言源程序代码_第4页
第4页 / 共10页
超声波测距C语言源程序代码_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《超声波测距C语言源程序代码》由会员分享,可在线阅读,更多相关《超声波测距C语言源程序代码(10页珍藏版)》请在金锄头文库上搜索。

1、-/*HZ即单位s的倒数本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以部的时钟频率为(12MHZ)/12=1MH即1000000HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时0.000001s,即1us(微秒).*/*/具有模式选择.*include*define UC unsigned char*define UI unsigned intvoid delay(UI);/延时9.56us程序sbit beep = P13;/用于声音报警sbit Lv = P17;/用于光报警sbit Hong = P16;sbit QD = P37;/K8 /P37口

2、(K8)为确定键,sbit G* = P31;/K7/P33口(K2)为修改键,sbit S* = P36;/K6/P32(K3)为测量键.sbit B* = P30;/K5/个(K7),十(K6),百(K5),三位修改键sbit a = P12;/百位/数码管位选sbit b = P11;/十位sbit c = P10;/个位sbit trig = P14;/方波发射端sbit echo = P15;/超声波接收端void IntConfiguration();/用来设置中断的函数,P33口(K2)为修改键,P32(K3)为测量键.void TimeConfiguration();/用来设置

3、定时器的函数sbit K1 = P34;/动态sbit K4 = P35;/静态/用于进展模式切换(K1、K4键)void *ia*ian();/修改函数,用来修改下限void shang*ian();/修改函数,用来修改上限UI min3=0,5,0;/报警极限,拆分为百十个三位UI ma*3=3,0,0;/MIN,MA* 用来存储最大和最小值void MIN*ianshi(UI);/最小围和最大围的显示void MA*ianshi(UI);UC code CharacterCode10 = 0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f;

4、/数码管数字字符(P2口)/*主函数*/void main()TimeConfiguration();/设置定时器0IntConfiguration();/设置中断允许,K4键为修改键,K8键为确定键while(1)MIN*ianshi(40);/1.50169000sMA*ianshi(40);/1.50098300s/*超声波测距函数*/void zhongduan_0() interrupt 0/测量中断函数(外部中断0)UI moshi = 0; UI juli = 0; UI time = 0; UI MA*, MIN; UI TT = 0;/用于第一次测量时给P15口置一,以便正确

5、读取数值UI t1, t2, t3; UI GE = 0, SHI = 0, BAI = 0;/先定义三个变量,用来显示测量的距离.a = 0;b = 0;c = 0;P2 = 0*00;/防止最后显示的那个数码管一直亮MA* = ma*0*100 + ma*1*10 + ma*2;/计算最大与最小值MIN = min0*100 + min1*10 + min2;while(1)/下面进展测量while(1)/*先进展模式判断*/if(0 = K1)moshi = 1;break;/模式1为动态测量if(0 = K4)moshi = 2;break;/模式2为静态测量if(0 = QD)ret

6、urn;/完毕测量函数/*计算距离*/loop:beep = 1;/关掉定时器Lv = 1;Hong = 1;/关掉灯a = 0; b = 0; c = 0;P2 = 0*00;/防止最后显示的那个数码管一直亮if( (0 = QD)&(1 = moshi) )break;if( (0 = QD)&(2 = moshi) )delay(55500);if(0 = QD)delay(55500);if(0 = QD)break;t1 = 35, t2 = 35; t3 = 35;trig = 0; echo = 0; delay(2);/初始化拉低两个端口trig = 1; delay(2);

7、trig = 0;/输出端输出27us的高电压,并将输出端口拉低while(echo = 0);/判断是否有回波返回,有则开启定时器TR0 = 1;/当有高电平输出时,开启定时器while(echo = 1);TR0 = 0;/当高电平变成低电平时,关闭定时器+TT;/测量值加一,记录测量次数if(1 = TT)delay(55500);TH0 = 0*00;TL0 = 0*00;/定时器的初值,定时器的定时为65536us.goto loop;time = TL0 + TH0*256;/接下来显示测量的距离TH0 = 0*00;TL0 = 0*00;/定时器的初值,定时器的定时为65536u

8、s.juli = ( int )( (time*0.034)/2 );BAI = ( (juli%1000)/100 );SHI = ( (juli%100)/10 ); GE = ( juli%10 );/*两种模式的距离显示*/if(juli MA*)Hong = 0;Lv = 1;while( t1- )a = 0; b = 1; c = 1; P2 = CharacterCodeBAI; delay(400);a = 1; b = 0; c = 1; P2 = CharacterCodeSHI; delay(400);a = 1; b = 1; c = 0; P2 = Characte

9、rCodeGE; delay(390);beep = 0;if( (1 = moshi)&(0 = t1) )goto loop;if(moshi = 2)t1 = 2;if(0 = QD)goto loop;else if(juli MIN)Lv = 0;Hong = 1;while( t2- )a = 0; b = 1; c = 1; P2 = CharacterCodeBAI; delay(500);a = 1; b = 0; c = 1; P2 = CharacterCodeSHI; delay(500);a = 1; b = 1; c = 0; P2 = CharacterCodeG

10、E; delay(400);beep = 0;delay(100);beep = 1;if( (1 = moshi)&(0 = t2) )goto loop;if(2 = moshi)t2 = 2;if(0 = QD)goto loop;elsebeep = 1;Lv = 1;Hong = 1;while( t3- )a = 0; b = 1; c = 1;P2 = CharacterCodeBAI;delay(600);a = 1; b = 0; c = 1;P2 = CharacterCodeSHI;delay(600);a = 1; b = 1; c = 0;P2 = CharacterCodeGE; delay(600);if( (1 = moshi)&(0 = t3) )goto loop;if(2 = moshi)t3 = 2;if(0 = QD)goto loop;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号