MSP430F5529之超声波测距+OLED 显示

发布者:binggege最新更新时间:2022-10-18 来源: csdn关键字:MSP430F5529  超声波测距  OLED  显示 手机看文章 扫描二维码
随时随地手机看文章

一、超声波介绍

利用TI公司的MSP430F5529单片机+超声波模块+OLED 实现


这里主要是利用单片机定时器的捕获功能来捕获超声波高电平持续时间,再计算得到距离,最后再在OLED 屏幕上显示出来,上图:

这里是把数字用了32号的,比较清晰,大家也可以自己更改


具体怎么接OLED 屏幕上一讲里面代码也有详细介绍,这里的超声波模块的Trig我接的是1.3,Echo接的是1.2


P1.2 为echo       设置为捕获模式

介绍:P1.2 具有端口中断的通用数字I / O ,TA0 CCR1捕获:CCI1A输入,比较:Out1输出  BSL接收输入

P1.3 为Trig         设置为 数字i/o模式

介绍:P1.3 具有端口中断的通用数字I / O , TA0 CCR2捕获:CCI2A输入,比较:Out2输出

二、部分代码

超声波模块初始化


void US_015_Init(void)

{

 

    P1OUT &= ~( BIT2 + BIT3 );

    P1DIR |=  BIT3;

    P1SEL |=  BIT2;

 

    TA0CTL   = TASSEL__SMCLK + ID__8 + MC_2 + TACLR + TAIE;

    TA0CCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0;

}

void Hc_sr_Open(void)           //生成一个持续10us的高电平

{

    Trig1(1);//这里就是把P1.2置1,即P1OUT |= BIT2

    __delay_cycles(250);//这里我把系统时钟升为25MHZ,因此250/25000000=10us

    Trig1(0);置0

}

   我们选用的是P1.2, 根据端口定义,使用的是TA0CCR1,捕获输入引脚通过TA0CCTL1寄存器控制,捕获值存储在TA0CCR1中。

  TASSEL(时钟源选择):SMCLK; ID分频(下面介绍):(这里分频系数会影响后面计算)4MHz/8 = 500k;计数模式:0  ==> 0xFFFF;  定时器清零位 ;中断使能。

  TA0CCTL1:上升沿捕获 ;同步捕捉;捕获模式;中断使能;CCI1A输入。


(这里查了一下SCS和CAP都有两种模式,但是这里直接就是把寄存器代码搞上去,没有分出0和1两种模式,这里搞不太懂,哪位大佬解惑解惑?)


这里ID分频有两种写法,但是总共有四种分频:

MC的四种模式:停止、增加模式、连续上升、增减模式

CM的四种模式:不捕获、上升沿捕获、下降沿捕获、上升下降都捕获 

原理:这里其实就是复用P1.2口为捕获,通过P1.3发出一个10us的高电平给超声波TRIG口触发进行测距,模块内部就返回一个信号,P1.2就捕获一个返回的高电平持续时间,再计算得出距离


公式:s=高电平持续时间*声速340/2(因为上面分频采用了8分频,因此我下面计算就不用除以2)


定时中断函数:


#pragma vector=TIMER0_A1_VECTOR

__interrupt void TIMER0_A1_ISR(void)

{

 

    switch(__even_in_range(TA0IV,14))//采用这个range函数就是为了使switch函数效率高

    {

      case  0:break;                                 // No interrupt

      case  2:

          state =  TA0CCTL1 >> 14;

          TA0CCTL1 &= ~CCIFG;//标志位清零

          if( TA0CCTL1 & CM_1){//开始捕获高电平时间

              cap_new = TA0CCR1;

              TA0CCTL1 &= ~CM_1;

              TA0CCTL1 |=  CM_2;

          }else if ( TA0CCTL1 & CM_2){

              cap_old = TA0CCR1;

              cap_data = ( cap_old - cap_new ) * 0.34/10/6.25;//这里外面解释!

              Gui_DrawFont_Num32(10,50,BLUE,GRAY0,cap_data/100);//显示数字

              Gui_DrawFont_Num32(37,50,BLUE,GRAY0,cap_data/10%10);

              Gui_DrawFont_Num32(64,50,BLUE,GRAY0,cap_data%10);

        

 

              TA0CCTL1 &= ~CM_2;

              TA0CCTL1 |=  CM_1;

          }else

          break;                           // CCR1 not used

      case  4: break;                          // CCR2 not used

      case  6: break;                          // reserved

      case  8: break;                          // reserved

      case 10: break;                          // reserved

      case 12: break;                          // reserved

      case 14:

          TA0CTL &= ~TAIFG;

          if(cap_old   < cap_new ){

              cap_N += 1;

          }

          break;                          // overflow

      default: break;

    }

}


这里其实都挺好理解的,就是大家可能对那个cap_data计算不太理解,首先为什么不除以2,是因为上面分频系数为8,(如果改为4,那么就应该除以2了),具体我也是测试出来的,至于为啥我觉得可能是分频系数为4时分频后频率为1MHZ,这样分频速率是最为正确的,但是8分频后为500KHZ就影响了原有的,相当于除以2了,哪位大佬可以帮忙解答哈哈,MSP430F5529我研究不是很长哈哈。然后后面除以10是因为计算的结果是MM为单位,我这里是以CM为单位,因此除以10;除以6.25是因为我升的时钟频率为25MHZ,跟原先的定时器4MHZ不对应,因此要换算即25/4=6.25,因此除以6.25。


最后面主函数:


int main(void) {

 

 

    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer

    upVcc();//升压

    timerup();//时钟频率升为25MHZ

    Lcd_Init();

    LCD_LED_SET;//通过IO控制背光亮

    Lcd_Clear(WHITE); //清屏

    Hc_sr_Init();

    __bis_SR_register(GIE);//开启中断

    Gui_DrawFont_GBK16(10,0,BLUE,GRAY0,"电子2班");

    Gui_DrawFont_GBK16(10,20,BLUE,GRAY0,"Dis:");

    Gui_DrawFont_GBK24(100,60,BLUE,GRAY0,"CM");

    while(1){

 

        Hc_sr_Open();

 

        __delay_cycles(1000000);

    }

}


对了,漏了一些声明


#define Trig1(a)  if(a==1) P1OUT |= BIT3; else P1OUT &= ~BIT3

 

unsigned int cap_new = 0;           // 首次捕捉的ta0r值

unsigned int cap_old = 0;           // 第二次捕捉的ta0r值

 

char cap_N = 0;                     // 溢出次数

char state = 0x00;                  // 状态

u16 cap_data ;                  // 距离值,u16


三、总结

到这里你可能对超声波测距有一个概念了,但是不够,一定要亲自上手实验,多琢磨,不要贪图省事,这样对你没有好处。


其实这里无非就是对定时器的应用,然后一些测量结果可能会出现误差,这是无法避免的,但是大体上影响不大,如果你不追求高精度测距和长距离测距的话,那么超声波测距是很好的选择!

关键字:MSP430F5529  超声波测距  OLED  显示 引用地址:MSP430F5529之超声波测距+OLED 显示

上一篇:基于MSP430F5529的三种点灯方式(基本、定时、外部中断)
下一篇:MSP430F5529之1.44寸OLED显示

推荐阅读最新更新时间:2024-11-17 10:42

led显示屏应用呈现六大特点
   一、产业总体发展达到了规模化水平   我国 LED显示屏 行业的主要产品不仅在国内占有绝对的市场,同时在全球市场也占据了一定的份额,形成了稳定的出口。产品质量和可靠性总体上有了显著的提升,国内LED显示屏应用企业在重大项目和重点工程建设中表现出色,在国际市场竞争、大型 显示 系统工程承接实施等方面的能力显著提高。    二、行业技术进步明显,科技创新对行业发展起到了积极的引领和推动作用   LED显示屏应用行业总体技术水平基本与国际同步发展,近两年创新产品不断问世,行业内技术创新活跃,产品技术开发能力不断加强。满足特殊应用需求的技术开发、技术支持和技术保证能力得到增强,重点技术和主流产品发展比较成熟。    三、
[电源管理]
LGD:显示屏的未来只能是OLED
“OLED才是未来显示的解决方案。”在美国硅谷会展中心举办的2015国际信息显示协会显示周 (SID,Society for Information Display)上,LG Display首席技术官姜芢秉在主题演讲中表示:“显示行业面临着机遇和挑战。”    姜芢秉称,显示技术的第一次大飞跃要数从CRT(显像管)到LCD(液晶)的变化,这让显示设备“从箱子变成了平面(Box to Flat)”。LCD诞生之初并非完美,但在解决了视角、大尺寸化、高性能三大难题后,其应用从笔记本电脑开始扩大到显示器、电视、智能手机、平板电脑等领域。“1998年至2014年,LCD的面积增长了200倍。”    姜芢秉认为,LCD之后的未来
[嵌入式]
车载显示争夺战升级
新能源汽车产业发展势头强劲,2024年中国新能源乘用车销量将超千万辆。作为智能座舱“人车交互”的重要接口,车载显示正成为各大整车厂逐鹿的焦点,也是面板厂争夺的下一个战场。 车载显示需求量大幅提升 随着新能源与 智能驾驶 汽车的渗透,车载显示大屏化与多屏化的趋势越来越明显。舱内除了传统中控、仪表需要 显示屏 外,还新增了HUD、副驾显示屏、后排娱乐显示屏、电子后视镜以及透明A柱等新产品,车载显示屏装配量迎来高速增长。 在新能源汽车领域,车载显示面板正逐步向更大尺寸发展,为信息显示提供了宽敞的空间。仪表盘与悬浮式中控屏相结合的标准配置,已成为主流元素。 例如,小米SU7的7.1英寸仪表盘搭配16.1英寸3K分辨率Min
[汽车电子]
单片机数码管显示数字为流水灯亮的个数
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52; /** *Function:数码管显示数字为流水灯亮的个数 *Author: 徐冉 *Time: 2013-07-28 **/ /*************基于AT89C52-RC MCU************/ /************基于HL-1开发板****************/ #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; /*数码管锁存器位声明*/ sbit wela = P2^7; sbit dula = P2^6; /*数码管编码
[单片机]
基于LPC2103微控制器实现LED数码管的显示设计
SPI( Serial Peripheral Interface) 总线是Motorola公司提出的一个同步串行外设接口, 允许MCU与各种外围器件以串行方式进行通信、数据交换。SPI可以同时发出和接收串行数据, 它只需4条线就可以完成MCU与各种外围器件的通信。一般使用的4条线为:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。这些外围器件可以是简单的TTL移位寄存器、复杂的LCD显示驱动器、Flash、RAM、A/D转换器、网络控制器及其他MCU等。 本文给出了一种基于SPI总线的LPC2103控制外围LED显示的设计方法。利用74HC595驱动静态共阳
[单片机]
基于LPC2103微控制器实现LED数码管的<font color='red'>显示</font>设计
2018年新款科鑫品牌--透明显示效果的LED显示屏面市
透明显示效果的LED显示屏,我们平常都称为LED透明屏或者是LED玻璃屏,这款工艺的产品在经过2016,2017两年的技术工艺沉淀,及应用磨合,产品本身和应用解决方案也已日趋成熟、稳定。2018年将成为此款产品爆发式应用增长的一年。 今天就给大家简单介绍下这款产品,顺便分享一些比较前端的制造工艺,也是能给产品带来更好显示效果和更佳稳定性的制造工艺。便于大家日后在选购该款产品的时候,产品档次怎么样心里也有个数。 LED透明屏类似LED玻璃屏。顾名思义,它是LED显示屏为追求更好的通透率、减少或更改材料而成的产物。这种屏大多应用于安装有玻璃的地方,故又名透明屏。 LED透明屏在保留了传统LED显示屏具有的容易控制、低压直流
[电源管理]
工学设计新追求 优派推出VG2448显示
近日,美国优派(ViewSonic)推出VG色彩系列显示器VG2448,沉稳外观搭配可调节显示屏,符合人体工学设计,使用户能在不同观看状态下使用。23.8英寸面板搭配1920×1080 FHD分辨率,呈现高清色彩画面。人体工学设计,加强用户体验。 忠于原色 精于设计 外观上,VG2448配备了符合人体工程学的多功能升降旋转底座,90度垂直旋转,60度水平旋转及0-130mm高低升降调节实现横向与纵向的转换,减少浏览时的滚动操作。-5~40度倾斜角度调节有别于优派普通-5~20度倾斜角度机型,方便用户可根据自身需求调整显示屏显示方式和画面比例,可达40度可视角度,即使在办公室站立讨论时用户也可观看显示器内容,增强观赏体验
[家用电子]
工学设计新追求 优派推出VG2448<font color='red'>显示</font>器
美国理想双显示系列钳表灵活易用
?          ——狭小空间现场测量的最佳选择 美国理想工业公司(IDEAL INDUSTRIES,INC.,以下简称美国理想)不久前推出的770系列钳表采用双显示设计,不受使用空间的限制,受到了广大现场工程师的青睐,成为了空间受限现场测量使用的理想选择。 770系列钳表采用专利的双显示设计,交/直流电流测量最高至1000A。770系列钳表的功能还包括:真有效值测量、最大/最小/峰值测量(1ms)、电容测量,它同时具备了3 3/4位万用表的所有常用功能。770系列钳表在电压达到30V以上进行自动声光告警,同时具有声音提示导通、数据保持、背光、自动关机、电池不足提示等功能。该产品采用专利底部显示设计,读数更加方便;钩状锥形钳
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved