您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MSP430F149超声波测距
//P1.0发出信号,P4.0接收信号,将距离显示到显示屏上#includemsp430x14x.h#include12864.h#defineCPU_F((double)8000000)#defineDelayUs(x)__delay_cycles((unsignedlong)(CPU_F*(double)x/1000000.0))#defineDelayMs(x)__delay_cycles((unsignedlong)(CPU_F*(double)x/1000.0))unsignedintwidth;floatfloat_range;unsignedint_range;unsignedinti=0;unsignedintint_range100,int_range10,int_range1;voidStartModule(){P1OUT|=BIT0;DelayUs(100);P1OUT&=~BIT0;DelayMs(70);}voidmain(){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗P1DIR|=BIT0;P4SEL|=BIT0;//P4.0作为捕获模块功能的输入端输入方波//-------开晶振XT2---------BCSCTL1&=~XT2OFF;//打开XT2振荡器do{IFG1&=~OFIFG;//清除振荡器失效标志for(i=256;i0;i--);//延时,等待XT2起振}while((IFG1&OFIFG)!=0);//判断XT2是否起振BCSCTL2=SELM_2+SELS;//选择MCLK=SMCLK为XT2//-----------------------------TBCCTL0&=~(CCIS1+CCIS0);//捕获源为P4.0,即CCI0A(也是CCI0B)TBCCTL0|=CM_2+SCS+CAP;//下降沿捕获,同步捕获,工作在捕获模式TBCCTL0|=CCIE;//允许捕获比较模块提出中断请求TBCTL|=ID_3;TBCTL|=TBSSEL_2;//选择时钟MCLKTBCTL|=TBCLR;//定时器清零,//定时器开始计数(连续计数模式0~0xFFFF)TBCTL|=MC_2;LcdInit();//初始化液晶屏LcdDisplayStr(1,0,测得的距离:);LcdDisplayStr(2,6,mm);_EINT();for(;;){StartModule();}}//―――――定时器TB的CCR0的中断:用于检测脉冲上升与下降沿――――#pragmavector=TIMERB0_VECTOR__interruptvoidTimerB0(void){if(TBCCTL0&CM0)//捕获到上升沿{TBCTL|=TBCLR;TBCCTL0=(TBCCTL0&(~CM0))|CM1;//改为下降沿捕获:CM0置零,CM1置一}elseif(TBCCTL0&CM1)//捕获到下降沿{width=TBCCR0;//记录下结束时间TBCCTL0=(TBCCTL0&(~CM1))|CM0;//改为上升沿捕获:CM1置零,float_range=0.2125*width;//计算距离,单位毫米int_range=(int)float_range;int_range1=int_range%10;int_range10=(int_range-int_range1)/10%10;int_range100=(int_range-int_range1-int_range10)/100%10;LcdDisplayStr(2,4,);//里面什么也不写,相当于给它定位置Send(1,int_range100+0x30);//写入数字,但是只能显示一个数字Send(1,int_range10+0x30);Send(1,int_range1+0x30);}}
本文标题:MSP430F149超声波测距
链接地址:https://www.777doc.com/doc-5365349 .html