声明:本程序仅供学习参考使用。献给有需要的同学?`o`?(1)源程序:/**HC_SR04.c**Createdon:2015年4月4日*Author:LGY*/#includemsp430f5529.h#includeconfig.h#includeHC_SR04.hvoidHC_config(){P4DIR|=BIT0;//P4.0口用作输出P2SEL|=BIT0;//P2.0用作TA1.1捕获信号输入}voidHC_start()///开始发送10usTTL促发信号{P4OUT&=~BIT0;//P4.0口输出低电平P4OUT|=BIT0;//P4.0口输出高电平TA1cap_next=0;Inversion_hc=0;_NOP();//接下来延时10us以上的TTL_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();P4OUT&=~BIT0;//P4.0口输出低电平while(TA1cap_next2);//等待捕获完成,若发送1次无效则跳出TA1CCTL1&=~CCIE;//CCR中断关闭distance=(float)TA1cap_time/58;//求出距离,单位厘米}voidTA1_config(){UCSCTL4|=SELS__XT2CLK;/*SMCLK时钟源选择XT2CLK4Mhz*///UCSCTL5|=0x0010;////SMCLK2分频,2MhzTA1CTL|=TASSEL_2;///*TimerA时钟源选择:SMCLK*/TA1CTL|=0x0080;//TimerA4分频TA1CTL|=0x0020;//TimerA反复计数模式//TA1CCR0=400;//约10ms//计数终值TA1CCTL1|=CM_3;//bothTA1CCTL1|=(CCIS_0+CAP);//CCIxA//TA1CCTL1|=SCS;//异步捕获TA1CCTL1|=CCIE;//CCR中断使能}voiddelay_HC(ushortz){ushorty;for(;z0;z--)for(y=220;y0;y--);}//TimerA1中断服务程序#pragmavector=TIMER1_A1_VECTOR__interruptvoidTimerA1(void){TA1cap_value[TA1cap_next]=TA1CCR1;//取出捕获值TA1cap_next++;if(TA1CCTL1&COV==0x0002)//溢出{TA1CCTL1&=~COV;//清除COVTA1cap_time=655356-TA1cap_value[0]+TA1cap_value[1];}else{TA1cap_time=TA1cap_value[1]-TA1cap_value[0];}TA1CCTL1&=~CCIFG;}(2)头文件/**HC_SR04.h**Createdon:2015年4月4日*Author:LGY*/#ifndefHC_SR04_H_#defineHC_SR04_H_//#defineDIVS20x0010//SNCLK2分频//变量externucharHC_count;//发10usTTL电平次数externuintInversion_hc;//翻转,控制灯亮灭externushortTA1cap_value[2];//记录前后捕获值externucharTA1cap_next;//标记捕获前后externushortTA1cap_time;//捕获时间externfloatdistance;//超声波距离//函数声明voiddelay_HC(ushortz);//延时函数voidHC_config();//HC_SR04引脚配置voidHC_start();///开始发送10usTTL促发信号voidTA1_config();//定时器A1配置externvoiddelay_sys(ushortz);#endif/*HC_SR04_HC_SR04_H_*/(3)配置文件/**config.h**Createdon:2015年4月3日*Author:LGY*/#ifndefCONFIG_H_#defineCONFIG_H_#defineushortunsignedshort#defineuintunsignedint#defineucharunsignedchar