//csb.c
//超声波测距
#include <msp430.h>
#include <oled.h>
// 定义超声波模块的引脚
#define TRIG_PIN BIT2 // 触发引脚
#define ECHO_PIN BIT3 // 回响引脚
volatile unsigned int distance = 0; // 存储测量到的距离
void setup(void) {
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1DIR |= TRIG_PIN; // 将触发引脚设为输出
P1DIR &= ~ECHO_PIN; // 将回响引脚设为输入
P1OUT &= ~TRIG_PIN; // 将触发引脚置为低电平
// 初始化定时器A
TA0CCTL0 = CCIE; // 启用定时器A的中断功能
TA0CCR0 = 60000; // 定时器A计数到60000时触发中断
TA0CTL = TASSEL_2 + MC_2; // 设置时钟源为SMCLK,以连续模式计数
}
unsigned int measureDistance() {
P1OUT |= TRIG_PIN; // 生成10us的高电平脉冲来触发超声波模块
__delay_cycles(10);
P1OUT &= ~TRIG_PIN;
while (!(P1IN & ECHO_PIN)); // 等待超声波模块的回响电平输出
TA0R = 0; // 清零定时器A的计数值
while (P1IN & ECHO_PIN); // 等待超声波模块回响结束
OLED_ShowNum(40,5,distance,4,8);
distance = TA0R / 58; // 根据超声波的回响时间计算测得的距离(单位:厘米)
OLED_ShowNum(40,2,distance,4,8);
return distance;
}
//csb.h
#ifndef CSB_H_
#define CSB_H_
void setup(void);
unsigned int measureDistance(void);
#endif /* CSB_H_ */