久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2351|回復: 1
打印 上一主題 下一主題
收起左側

msp430f5529的超聲波測距,一直在lcd上顯示0m?求大神指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:935740 發表于 2021-6-9 22:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <lcd.h>
#include <msp430f5529.h>
#include <string.h>


unsigned char Range[]= " maxD: 50 M ";
unsigned char distance[] = "distance:";
unsigned char ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
uint lastCCR1;


unsigned int  t=0;
unsigned long S=0;
unsigned char disbuff[4] = {0,0,0,0};


void delayms(unsigned int m)
         {
           unsigned int i, j;
           for(i=0; i<m; i++)
             for(j=0; j<1000; j++);
         }


void Conut(void)
        {
                   S=(t*1.7)/100;     //算出來是CM
                   if((S>=700))       //超出測量范圍顯示“-”
                   {
                    DisplayOneChar(10, 1, ASCII[11]);
                    DisplayOneChar(11, 1, ASCII[10]);  //顯示點
                    DisplayOneChar(12, 1, ASCII[11]);
                    DisplayOneChar(13, 1, ASCII[11]);
                    DisplayOneChar(14, 1, ASCII[12]);  //顯示M
                   }
                   else
                   {
                    disbuff[0]=S%1000/100;
                    disbuff[1]=S%1000%100/10;
                    disbuff[2]=S%1000%100%10;
                    DisplayOneChar(10, 1, ASCII[disbuff[0]]);
                    DisplayOneChar(11, 1, ASCII[10]);  //顯示點
                    DisplayOneChar(12, 1, ASCII[disbuff[1]]);
                    DisplayOneChar(13, 1, ASCII[disbuff[2]]);
                    DisplayOneChar(14, 1, ASCII[12]);  //顯示M
                   }
       }


void  StartModule()                 //啟動模塊
        {
           uint i;
           P6OUT|=BIT0  ;                            //啟動一次模塊
           __delay_cycles(20);      //20個機器周期,20μs
           P6OUT&=~BIT0 ;
        }


void  Initclock()
       {
          UCSCTL3 = SELREF_2;//FLL參考時鐘源REFO
          UCSCTL4 |= SELA_2; //先設置ACLK為REFO
          //測試晶振是否失效,并清除故障失效標志位
          do
          {
            UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                          //清除XT2、XT1、DCO故障失效標志位
            SFRIFG1 &= ~OFIFG;            //清除晶振故障失效中斷標志位
          }while (SFRIFG1&OFIFG);         //測試晶振故障失效中斷標志位


          __bis_SR_register(SCG0);        //關閉FLL
          UCSCTL1 = DCORSEL_5;            //選擇DCO的工作頻率范圍
          UCSCTL2 |= 249;                 //(259+1)*32768 = 8Mhz
          __bic_SR_register(SCG0);        //啟用FLL
          __delay_cycles(2500000);        //延時,等待DCO工作穩定
          UCSCTL4 |=SELM_3 + SELS_3;      //主時鐘、子時鐘均配置為dcoclk
          UCSCTL5 |=DIVM_3 + DIVS_3;      //主時鐘、子時鐘8分頻
       }


void  SetTIMEA()
       {
           t=0;
           lastCCR1=0;
           TA0CTL = CM_3+TACLR+TASSEL_2+ID_2+MC_2+TAIE;  //計數清0,選子系統時鐘做時鐘源,連續計數模式,定時器允許中斷


       }


int main(void)
{
        WDTCTL = WDTPW | WDTHOLD;        // stop watchdog timer
        P6DIR|=BIT0;
        P1DIR&=~BIT2;
        P1SEL|=BIT2;
        Initclock();
        P6OUT&=~BIT0 ;
        InitLcd1602();
        SetTIMEA();
        TA0CCTL1 |= CAP+CM_1+CCIS_0+SCS+CCIE;//改為上升沿捕獲
        LcdShowStr(2,0,Range);
        LcdShowStr(0,1,distance);
        _EINT();
        while(1)
        {


            StartModule();
            Conut();
            delayms(10);


        }
}


#pragma vector = TIMER0_A1_VECTOR       //CCR1捕獲產生中斷
__interrupt void TIMER0_A1__ISR(void)
{
    TA0CCTL1&=~CCIFG;//中斷標志清零
    switch(__even_in_range(TA0IV,14))
    {
    case 0:
        break;
    case 2:                //CCR1捕獲中斷
      if(P1IN&BIT2==1)
           {
             lastCCR1 = TA0CCR1;
             TA0CCTL1 = CAP+CM_2+CCIS_0+SCS+CCIE;//改為下降沿捕獲
           }
      else
      {
            _DINT();                               //關閉全局中斷
            t=TA0CCR1-lastCCR1;
            TA0CCR1 = 0;
            TA0CCTL1= CAP+CM_1+CCIS_0+SCS+CCIE;//改為上升沿捕獲
            _EINT();
      }
      break;
    case 4:
      break;
    case 6:
      break;
    case 8:
      break;
    case 0x0A:
      break;
    case 0x0C:
      break;
    case 0x0E:                                       //定時器溢出中斷
       if(TA0CCTL1&COV)
          TA0CCTL1&=~COV;
      break;
    default:
      break;
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:949640 發表于 2021-7-6 01:00 | 只看該作者
兄弟你定義的接口是哪里?我怎么看不懂
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天堂精品久久 | 欧美日韩国产中文 | 精品国产区 | 中文一级片 | 伊人在线 | 一区二区三区四区电影视频在线观看 | 欧美 日韩精品 | av片在线观看网站 | 欧美日本在线观看 | 国产精品九九九 | 精品免费国产一区二区三区四区 | 国产精品毛片久久久久久 | 瑞克和莫蒂第五季在线观看 | 亚洲啪啪 | 亚洲精品一区中文字幕 | 久久不卡 | 成人在线视频观看 | 毛色毛片免费看 | 天堂av中文在线 | 一区二区三区视频在线观看 | 久久婷婷香蕉热狠狠综合 | 久久人体 | 先锋资源站 | 久久人人爽人人爽人人片av免费 | 黄色播放| 国产一区二区观看 | 三级欧美 | 美女黄视频网站 | h在线免费观看 | 国产日韩一区二区三区 | 日韩久久久久久久久久久 | 久久一区二区三区四区 | 日韩免费一区二区 | 91麻豆精品国产91久久久更新资源速度超快 | www.狠狠干| 亚洲一区二区三区在线观看免费 | 不卡一区 | 久久久久久久久久久久一区二区 | 国产精品久久久久久吹潮 | 日本综合在线观看 | 国产a区 |