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

上传人:夏** 文档编号:510637626 上传时间:2024-02-03 格式:DOCX 页数:12 大小:18.19KB
返回 下载 相关 举报
超声波测距C语言源程序代码_第1页
第1页 / 共12页
超声波测距C语言源程序代码_第2页
第2页 / 共12页
超声波测距C语言源程序代码_第3页
第3页 / 共12页
超声波测距C语言源程序代码_第4页
第4页 / 共12页
超声波测距C语言源程序代码_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

1、/具有模式选择.#include #define UC unsigned char #define UI unsigned int void delay(UI);sbit beep = P1A3;sbit Lv = P1A7;sbit Hong = P1A6;sbit QD = P3A7;/K8sbit GX = P3A1;/K7 sbit SX = P3A6;/K6 sbit BX = P3A0;/K5 sbit a = P1A2;/ 百位 sbit b = P1A1;/ 十位 sbit c = P1A0;/个 位 sbit trig = P1A4;sbit echo = P1A5;void

2、 IntConfiguration(); 键.void TimeConfiguration();sbit K1 = P3A4;/ 动态sbit K4 = P3A5;/ 静态 void xiaxian();void shangxian();UI min3=0,5,0;UI max3=3,0,0;void MINxianshi(UI);void MAXxianshi(UI);/*HZ即单位s的倒数本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率 为(12MHZ)/12=1MH即1000000HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时0.000

3、001s,即1us (微秒).*/延时9.56us程序用于声音报警/用于光报警/P3A7 口(K8)为确定键,/时3 口(K2)为修改键,/P3A2(K3)为测量键.个(K7),十(K6),百(K5),三位修改键数码管位选方波发射端超声波接收端/用来设置中断的函数,P33 口(K2)为修改键,P3W(K3)为测量/用来设置定时器的函数/用于进行模式切换(K1、K4键)/修改函数,用来修改下限修改函数,用来修改上限/报警极限,拆分为百十个三位/MIN,MAX用来存储最大和最小值最小范围和最大范围的显示UC code CharacterCode10 = 0x3f,0x06,0x5b,0x4f,0x

4、66,0x6d,0x7d,0x07,0x7f,0x6f;/数码管数字字符(P2 口)/*主void main()TimeConfiguration();设置定时器 0IntConfiguration(); /设置中断允许,K4键为修改键,K8键为确定键 while(1) MINxianshi(40); /1.50169000sMAXxianshi(40); /1.50098300s/* 超 声 波 测 距 函void zhongduan_0() interrupt 0 测量中断函数(外部中断 0)UI moshi = 0;UI juli = 0;UI time = 0;UI MAX, MIN;

5、UI TT = 0;/用于第一次测量时给P5 口置一,以便正确读取数值UI t1, t2, t3;UI GE = 0, SHI = 0, BAI = 0;先定义三个变量,用来显示测量的距离.a = 0;b = 0;c = 0;/防止最后显示的那个数码管一直亮P2 = 0x00;MAX = max0*100 + max1*10 + max2; 计算最大与最小值 MIN = min0*100 + min1*10 + min2;while(1)/下面进行测量/*先进行模式判断*/while(1)if(0 = K1)moshi = 1;break;if(0 = K4)moshi = 2;break;i

6、f(0 = QD) return;/模式1为动态测量/模式2为静态测量/结束测量函数/* 计loop:beep = 1;/关掉定时器Lv = 1;Hong = 1;/关掉灯a = 0;b = 0;c = 0;P2 = 0x00;/防止最后显示的那个数码管一直亮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); /初始化拉低两个

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

8、器的初值,定时器的定时为65536us.juli = ( int )( (time*0.034)/2 );BAI = ( (juli%1000)/100 ); SHI = ( (juli%100)/10 ); GE = ( juli%10 );的距离显示/*壬击 焙/两 种 模 式if(juli MAX)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 =

9、0;P2 = CharacterCodeGE; 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 = CharacterC

10、odeGE;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 = CharacterCode

11、GE;delay(600);if( (1 = moshi)&(0 = t3) goto loop;if(2 = moshi)t3 = 2;if(0 = QD)goto loop;显示结束*/void zhongduan_1() interrupt 1定时器溢出时的中断,显示测得的距离(定时器中断0)TH0 = 0x00;/定时器的初值,定时器的定时为65536us,TL0 = 0x00;*/void zhongduan_2() interrupt 2修改键(K4)的中断函数(外部中断1)xiaxian();while(QD=0);shangxian();*/void MINxianshi(UI

12、 TT)显示最小距离while(TT-)a = 0;b = 1;c = 1;P2 = CharacterCodemin0;delay(500);a = 1;b = 0;c = 1;P2 = CharacterCodemin1;delay(500);a = 1;b = 1;c = 0;P2 = CharacterCodemin2;delay(500);P2 = 0x00;delay(55500);void MAXxianshi(UI TT)显示最大距离while(TT-)a = 0;b = 1;c = 1;P2 = CharacterCodemax0;delay(500);a = 1;b = 0;c = 1;P2 = CharacterCodemax1; delay(500);a = 1;b = 1;c = 0;P2 = CharacterCodemax2;delay(500);P2 = 0x00;delay(55500);*/void delay(UI T)延时程序while(T-);/* */void IntConfiguration()设置中断函数优先级设置PT2 = 0;PS = 0;PT1 = 0;PX1 = 0;PT0 = 1;PX0 = 0;IT1 = 1;外部中断0为跳变沿触发EX1 = 1;/P3A3 口(K4键)修改

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

当前位置:首页 > 学术论文 > 其它学术论文

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