📄 measure.c
字号:
#include "MSP430X44X.h"
#include "lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
#define Trig_1 (P2DIR|=BIT2,P2OUT|=BIT2)
#define Trig_0 (P2DIR|=BIT2,P2OUT&=~BIT2)
#define Echo P2DIR&=~BIT3
#define EchoIN P2IN
float dis=0.0;
float k=0.0;
uint n1,n2,n3,n4,n5;
uchar tem[]="0123456789.cm ";
void delay1(void)
{
/*TACTL=TASSEL_2+ID_3+TACLR;
CCR0=n;
TACTL=MC_1;
while(!(TACTL&BIT0));
TACTL|=~(MC1+MC0);
TACTL&=~TAIFG;*/
uchar i;
for(i=11;i>0;i--);
}
void Get_distance(void)
{ uint i=20300; //3.5m测距所需的时间
Trig_1; //触发
delay1();
Trig_0; //停止触发
Echo; //检测输入信号
while(!(EchoIN&BIT3)&&i>0)
{
i--;
}
if (i>0)
{
TACTL=TASSEL_2+ID_0+MC_2+TACLR;
/*TACCTL2=CM_3+CCIS_1+CAP; //捕获模式,捕获上升沿和下降沿,捕获内部ACLK
TACTL=TASSEL_2+MC_2+TACLR; //定时器时钟源为SMCLK,启动连续计数,清TAR
TACCTL2 &=~CCIFG; //清CCR2的标志位
while(!(CCIFG&TACCTL2)); //查CCR2标志位
first_value=TACCR2; //第一个捕获值存入first_value
TACCTL2 &=~CCIFG; //清CCR2的标志位
while(!(CCIFG&TACCTL2)); //查CCR2标志位
second_value=TACCR2; //第二个捕获值存入second_value
TACCTL2 &=~CCIFG; //清CCR2的标志位
TACCTL2 &=~MC1; //关定时器A
dis=(second_value-first_value)/58.00; */
//注意:超声波的电平信号应该从P2.0口输入(第二功能为TA2)
while(EchoIN&BIT3);
TACTL&=~(MC0+MC1);
//dis=(TAR)/58; //得到距离(cm)
//TACTL|=TACLR;
//return dis;
}
//return (0); //大于3.5m则返回0
}
void Show_distence(uchar S_line)
{ Get_distance();
k=TAR/58.00;
n1=(uint) k/100;
n2=(uint)((k-100*n1)/10);
n3=(uint)(k)%10;
n4=(uint)(k*10)%10;
n5=(uint)(k*100)%10;
WR_data2_com(S_line*16,0x00,0x24);
WR_com(0xb0);
WR_data(tem[n1]-0x20);
WR_data(tem[n2]-0x20);
WR_data(tem[n3]-0x20);
WR_data(tem[10]-0x20);
WR_data(tem[n4]-0x20);
WR_data(tem[n5]-0x20);
WR_data(tem[11]-0x20);
WR_data(tem[12]-0x20);
WR_com(0xb2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -