msp430f5529做超声波测距,在oled显示屏显示距离的的代码
时间: 2024-02-21 13:01:59 浏览: 75
以下是msp430f5529的超声波测距代码,同时在OLED显示屏上显示距离:
```c
#include <msp430.h>
#include "oled.h"
#define TRIG BIT0 // P1.0
#define ECHO BIT1 // P1.1
volatile int distance = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1OUT &= ~TRIG; // 将P1.0输出低电平
P1DIR |= TRIG; // P1.0设为输出
P1DIR &= ~ECHO; // P1.1设为输入
P1SEL |= ECHO; // P1.1设为TA0.1输入
TA0CTL = TASSEL_2 + MC_2; // SMCLK, 连续计数模式
TA0CCTL1 = CAP + CM_3 + CCIS_0 + SCS + CCIE; // 捕获模式, 上升/下降沿捕获, TA0.1输入选择, 同步捕获, 捕获中断使能
OLED_Init(); // 初始化OLED显示屏
OLED_Clear(); // 清屏
__enable_interrupt(); // 使能中断
while(1)
{
P1OUT |= TRIG; // 将P1.0输出高电平
__delay_cycles(10); // 延时10us
P1OUT &= ~TRIG; // 将P1.0输出低电平
__delay_cycles(30000); // 延时30ms
if(distance > 0 && distance < 50) // 超声波测距范围为2cm-4m
{
OLED_ShowString(0, 0, "Distance:"); // 在OLED显示屏上显示"Distance:"
OLED_ShowNum(60, 0, distance, 3, 16); // 在OLED显示屏上显示距离
}
}
}
#pragma vector = TIMER0_A1_VECTOR // TA0.1中断向量
__interrupt void Timer_A(void)
{
static unsigned int last_capture = 0;
unsigned int current_capture = TA0CCR1;
if(TA0CCTL1 & CCI)
{
distance = (current_capture - last_capture) / 58; // 计算距离
}
last_capture = current_capture;
TA0CCTL1 &= ~CCIFG; // 清除中断标志位
}
```
这段代码使用了msp430f5529的TIMER0_A1模块进行超声波测距,超声波模块的TRIG引脚连接到P1.0,ECHO引脚连接到P1.1,测距范围为2cm-4m。在距离小于50cm时,在OLED显示屏上显示距离。
阅读全文