超声波全部程序(共10页)_第1页
超声波全部程序(共10页)_第2页
超声波全部程序(共10页)_第3页
超声波全部程序(共10页)_第4页
超声波全部程序(共10页)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#includedelay.h#includeBC7281.h#includelcd.h#define uchar unsigned char#define uint unsigned int#define SET(a,b) a|=(1PORTD|=BIT(3);#define CLR(a,b) a&=(1DDRD&=BIT(3);#define CPL(a,b) a=(1AB,(00=0,01=0, /10=0,11=1)异或=与#define CHK(a,b) (a&(1DDRD=BIT(3); /CHK(PORTD,PD3)=PORTD=BIT(3);ui

2、nt got_num, got_num15,temp;uint S1,S2,S3,S4,get_num,d,D,shu,ru,mi,ma;long int Zchang=0,Jshu=0;unsigned long int value=0;uchar Flag=0,m=0,biaozhi=0,T=0;Mima10=0,1,2,3,4,5,6,7,8,9;uchar table=0,1,2,3,4,5,6,7,8,9; /数码(shm),直接调用 /*got_num发送10个脉冲(michng)的个数;got_num15把数据从小到大排列数组; temp是got_num15交换式据中间(zhng

3、jin)变量*/ /*Flag,m实现循环*/ /*/ /*测距离物体长度*/ /*/void PWM40K_style() DDRD|=BIT(7); TCCR2=0X18;/CTC模式比较匹配触发OC2(OC2为原OC2的取反) OCR2=0X0C; void PWM40K_ON() TCNT2=0X00; TCCR2=0X1A; /CTC模式(msh),8分频void PWM40K_OFF() TCNT2=0X00; TCCR2=0X00;void INT1_init() CLR(DDRD,PD3); /(DDRD&=BIT(3)中断(zhngdun)1设为输入 SET(PORTD,PD

4、3); MCUCR=0X08; /(PORTD|=BIT(3)中断1上升(shngshng)沿触发 GICR&=(1INT1); /中断1标志位清零(低电平触发方式不带中断标志位)void ceju() PWM40K_ON(); delay_nus(250); /发十个脉冲 PWM40K_OFF(); /停止发脉冲 TCNT1=0X0000; /定时器1初始值为0 TCCR1A=0X00; /发完的同时开始计数 TCCR1B=0X02; /开定时器1 GIFR|=(1INTF1); /清中断标志位 delay_nus(700); GICR|=(1INT1); /外部中断1使能 delay_nm

5、s(10); /延时足够的时间,以便下一次使用 66?void distance() /获得距离值,测5次 CLI(); INT1_init(); PWM40K_style(); SEI(); for (m=0;m5;m+) ceju(); #pragma interrupt_handler int1wave:3 /设定中断入口地址void int1wave(void) uchar i,j; GICR&=(1INT1); /关中断(zhngdun)1 TCCR1B=0X00; /关定时器1 got_num=TCNT1; if ( got_num1700) got_num+=130; /补偿(b

6、chng)值 else if ( got_num3800) got_num+=50; /补偿(bchng)值 else got_num-=80; /补偿值 got_num1Flag=got_num; /将测得的值放入数组中 got_num=0; /清零 if (Flag=4) for(j=0;jFlag-1;j+) /把5次数据由小到大排列 for(i=0;i got_num1i+1) temp=got_num1i+1; got_num1i+1= got_num1i; got_num1i=temp; for (i=1;i4;i+) /去掉最小值,去掉最大值,取中间3个 got_num+=got

7、_num1i; got_num= got_num/3; /求平均值 value=got_num*33550/200000; /距离算法,以厘米为单位 /(335.5M/S)=(33550CM/1X106uS): / value=10(发10个波计一次数(csh) / got_num*(33550CM/1X106)=got_num*33550/200000; LCD_write(1,1,物距); wr_byte(:); wr_byte(tablevalue/1000); wr_byte(tablevalue%1000/100); wr_byte(tablevalue%1000%100/10);

8、wr_byte(.); wr_byte(tablevalue%10); wr_byte(C); wr_byte(M); Flag+;/* if (Flag=S2) if(PIND&0 x02)=0 x02) d=S1-S2; elsed=0; /*物长1*/void wchang1() /: CC if(S4=S3) if(PIND&0 x02)=0 x02) D=S4-S3; elseD=0;/*显示(xinsh)物长0 */void xswchang0() CES1(); CES2(); wchang0(); get_num=d; LCD_write(2,1,物长); wr_byte(:)

9、; wr_byte(tableget_num/1000); wr_byte(tableget_num%1000/100); wr_byte(tableget_num%1000%100/10); wr_byte(.); wr_byte(tableget_num%10); wr_byte(C); wr_byte(M); /* 显示(xinsh)物长1*/void xswchang1() CES3(); CES4(); wchang1(); get_num=D; LCD_write(2,1,物长); wr_byte(:); wr_byte(tableget_num/1000); wr_byte(ta

10、bleget_num%1000/100); wr_byte(tableget_num%1000%100/10); wr_byte(.); wr_byte(tableget_num%10); wr_byte(C); wr_byte(M); /*计总长(zngzhng),个数0*/void zchang0() /: BB Zchang+=d; if(S1=S2)Jshu+; if(Zchang99999)|(Jshu999) /总长(zngzhng)最大9999.9CM;计数最多999个 Zchang=0;Jshu=0; LCD_write(3,1,总长);wr_byte(:);wr_byte(t

11、ableZchang/10000); wr_byte(tableZchang/1000%10);wr_byte(tableZchang%1000/100);wr_byte(tableZchang%1000%100/10);wr_byte(.);wr_byte(tableZchang%10); wr_byte(C);wr_byte(M); LCD_write(4,1,计数);wr_byte(:);wr_byte(tableJshu%1000/100);wr_byte(tableJshu%1000%100/10);wr_byte(tableJshu%10);LCD_write(4,5,个);/*计

12、总长(zngzhng),个数1*/void zchang1() /: DD Zchang-=d; if(S4=S3)Jshu-; if(Zchang0)|(Jshu0) Zchang=0;Jshu=0; LCD_write(3,1,总长(zngzhng);wr_byte(:);wr_byte(tableZchang/10000); wr_byte(tableZchang/1000%10);wr_byte(tableZchang%1000/100);wr_byte(tableZchang%1000%100/10);wr_byte(.);wr_byte(tableZchang%10); wr_by

13、te(C);wr_byte(M); LCD_write(4,1,计数(j sh);wr_byte(:);wr_byte(tableJshu%1000/100);wr_byte(tableJshu%1000%100/10);wr_byte(tableJshu%10);LCD_write(4,5,个);void panduan() if(GB_Number=0 x0D) /键值等于1时木棒长度,计数加 xswchang0(); if(GB_Number=0 x0E) /键值等于2时木棒长度,计数减 xswchang1();void dianji() switch(GB_Number) /*顺转数据

14、相加*/ case 0 x0C: DDRA|=BIT(2); PORTA|=BIT(2); delay_nus(1); LCD_write(1,8,逆);LCD_write(3,8,相);LCD_write(2,8,转);LCD_write(4,8,加); break;/*逆转(nzhun)测数据相减*/ case 0 x0D: DDRA|=BIT(3); PORTA|=BIT(3); delay_nus(1);LCD_write(1,8,顺);LCD_write(3,8,相);LCD_write(2,8,转);LCD_write(4,8,减); break;/*停止(tngzh)数据丢失*/

15、 case 0 x0E: DDRA&=0 x0C; PORTA&=0 x0C; delay_nus(1); LCD_write(1,8, );LCD_write(2,8,停);LCD_write(3,8,止); LCD_write(4,8, ); got_num=0, got_num15=0;value=0,D=0; S1=0,S2=0,S3=0,S4=0,get_num=0,d=0; Zchang=0,Jshu=0;Flag=0,m=0,biaozhi=0; break;/*暂停数据(shj)不丢失*/ case 0 x0F: LCD_write(1,8, );LCD_write(2,8,暂

16、);LCD_write(3,8,停); LCD_write(4,8, );break; void main() DDRA=BIT(2)|BIT(3); PORTA&=BIT(2); PORTA&=BIT(3); BC7281_init(); int0_init(); LCD_int(); SEI();while(1) / 一直(yzh)测距 if(T=0)switch(GB_Number) case 0: LCD_write(2,1,学习(xux)是灯,);shu=0;ru=0;mi=0;ma=0;break; case 1: LCD_write(2,1,努力(n l)是油。);shu=0;r

17、u=0;mi=0;ma=0;break; case 2: LCD_write(2,1,要想灯亮,);break; case 3: LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break; case 4: LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 5: LCD_write(2,1,努力是油。);break; case 6: LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 7: LCD_write(2,1,必须加油。);break;

18、case 8: LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 9: LCD_write(2,1,努力是油。);break; case 10:LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 11:LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break; case 12:LCD_write(2,1,学习是灯,);shu=0;ru=0;mi=0;ma=0;break; case 13:LCD_write(2,1,努力是油。);shu=0;ru=0;mi=0;ma=0;break; case 14:LCD_write(2,1,要想灯亮,);shu=0;ru=0;mi=0;ma=0;break; case 15:LCD_write(2,1,必须加油。);shu=0;ru=0;mi=0;ma=0;break;if(GB_Number=30) LCD_write(2,1,请输入密码);if(GB_Number=0 x01) shu=; if(GB_Number=0 x02)&(shu=) ru=; i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论