430f149超声波程序.docx
《430f149超声波程序.docx》由会员分享,可在线阅读,更多相关《430f149超声波程序.docx(7页珍藏版)》请在冰豆网上搜索。
430f149超声波程序
#include"msp430x14x.h"
#include"lcd12864.h"
#defineucharunsignedchar
#defineuintunsignedint
/***************端口定义*******************************/
#definetrig_hP2OUT|=BIT0//触发端口
#definetrig_lP2OUT&=~BIT0
#defineechoP2IN&BIT1//接收端口
uintge,shi,bai,dian1,dian2,dian3,cnt;
unsignedlonginttim_data,dista_data,dista_data_all;
/***************延时*******************************/
voiddelay(uintn)
{
uchari;
for(;n>0;n--)
for(i=10;i>0;i--);
}
/********************系统时钟初始化****************/
voidinit_clk(void)//初始化系统时钟
{
uchari;
BCSCTL1&=~XT2OFF;//打开XT2振荡器
BCSCTL2|=SELM_2+SELS;
do
{
IFG1&=~OFIFG;//清除错误标志
for(i=0;i<0xff;i++);//延时等待
}
while((IFG1&OFIFG)!
=0);
IFG1&=~OFIFG;
}
/********************滤波,取十次数据平均值***************/
voiddista_f(unsignedlongintdistance_data)
{
dista_data_all=dista_data_all+distance_data;
cnt=cnt+1;
if(cnt==10)
{
cnt=0;
dista_data_sum=dista_data_all/10;
dista_data_all=0;
}
}
voidmain(void)
{
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0XFF;P1OUT|=0XFF;
P2DIR=0XFD;P2OUT|=0XFF;
P3DIR=0XFF;P3OUT|=0XFF;
P4DIR|=0XFF;P4OUT|=0Xff;
P5DIR|=0XFF;P5OUT|=0Xff;
P6DIR|=0XFF;P6OUT|=0Xff;
init_clk();
lcd12864_init();
init();
TACTL|=TACLR+TASSEL_2+ID_3;//定时器A初始化
ge=0;shi=0;bai=0;dian1=0;dian2=0;dian3=0;
tim_data=0;cnt=0;dista_data=0;
P6DIR|=BIT2;P6OUT|=BIT2;
P2IE|=BIT1;//打开P2端口中断
P2IES&=~BIT1;//设置为上升沿中断
_EINT();//打开总中断
while
(1)
{
trig_h;//超声波触发
delay
(2);
trig_l;
delay(50);
while(echo);
}
}
/*****************************P2口中断*******************/
#pragmavector=PORT2_VECTOR
__interruptvoidport_init(void)
{
if(echo)//上升沿中断
{
TACTL|=TACLR+TASSEL_2+ID_3;
TACTL|=MC_2;//接收到信号,打开计数器开始计数
P2IES|=BIT1;//改为P2口下降沿中断
}
else//下降沿中断
{
TACTL=0;//计数结束,停止计数
TACTL|=TASSEL_2+ID_3;
P2IES&=~BIT1;//改为P2口上升沿中断
tim_data=TAR;//取计数值
dista_data=(tim_data*1000/58);//计算为距离(厘米=us/58)
dista_f(dista_data);//取十次平均值
display_shujc(1,0,dista_data_sum);//在12864上显示距离
}
P2IFG&=~BIT1;//P2口中断标志清除
}
/*****************************lcd12864*********************************/
#defineucharunsignedchar
#defineuintunsignedint
#defineRS_0(P3OUT&=~BIT0)
#defineRS_1(P3OUT|=BIT0)
#defineRW_0(P3OUT&=~BIT1)
#defineRW_1(P3OUT|=BIT1)
#defineEN_0(P3OUT&=~BIT2)
#defineEN_1(P3OUT|=BIT2)
unsignedlongintdista_data_sum;
/****************延时1ms******************/
voiddelayNms(uchartime)
{
uinti,j;
for(i=0;i