<p id="5vvtt"><ruby id="5vvtt"><mark id="5vvtt"></mark></ruby></p><p id="5vvtt"></p>

    <p id="5vvtt"></p>
    <ruby id="5vvtt"><b id="5vvtt"></b></ruby>

          <ruby id="5vvtt"></ruby>

          <ruby id="5vvtt"><mark id="5vvtt"></mark></ruby>
            2
            收藏
            微博
            微信
            復制鏈接

            這是一個超聲波測距程序,沒錯誤和警告,但是單片機沒反應,求解??

            提問于
            2022-07-30 03:44

            /****************************************************************************************/
            //超聲波測距模塊程序
            //晶振:11。0592
            //接線:模塊TRIG接 P10??ECH0 接P11
            //數碼管共陽數碼管
            /**********************************************************************************************/
            #include ? ???
            #include
            sbit??TX=P0^0;
            sbit??RX=P0^1;
            sbit SER=P4^4;? ?//595串行數據輸入
            sbit SCK=P4^2;? ?//595移位時鐘
            sbit RCK=P4^1;? ?//595數據輸出脈沖
            #define uint??unsigned int
            #define uchar unsigned char
            unsigned long S=0;
            unsigned long time=0;
            bit? ?? ?flag =0;
            uchar dula[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};??//距離編碼
            uchar wela[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
            uchar which[]={10,10,10,10,10,0,0,0,};
            //延時函數
            void delay(uchar x)
            {
            uint i,j;
            for(i=x;i>0;i--)
            ??for(j=110;j>0;j--);
            ??
            }
            void in_595(uchar dat)? ???
            {
            uchar i;
            for(i=0;i<8;i++)? ?? ? //八位數據的讀取
            {
            ??SCK=0;
            ??SER=dat&0x80;
            ??dat<<=1;
            ??SCK=1;? ?? ?? ?//移位輸入時鐘,上升沿輸入
            }
            }
            void out_595( )? ?? ???//鎖存器的使用
            {
            RCK=0;? ?? ?? ? //并行輸出時鐘
            delay(2);
            RCK=1;
            ? ? delay(2);? ?? ?? ? //如果閃爍太快
            ? ? RCK=0;
            }
            /********************************************************/
            void Count(void)
            {
            ??time=TH0*256+TL0;
            ??TH0=0;
            ??TL0=0;
            ??S=time*1.7/100;? ???//算出來是CM
            ??if((S>=700)||flag==1) //超出測量范圍顯示“-",理論上最多可以測12.07m
            ??{??
            ? ? flag=0;
            ? ? which[5]=11;? ? //“-”
            ? ? which[6]=11;? ? //“-”
            ? ? which[7]=11;? ? //“-”
            ??}
            ??else
            ??{
            ? ?which[5]=S/100;
            ? ?which[6]=S%100/10;
            ? ?which[7]=S%10;
            ??}
            }
            /********************************************************/
            void Display(void)? ???//掃描數碼管
            {
            uchar i;
            {
            ??for(i=0;i<8;i++)
            ??{
            ? ?in_595(wela[i]);
            ? ?in_595(dula[which[i]]);
            ? ?out_595( );
            ? ?delay(2);??//只要修改這里的延時即可實現靜態和動態
            ??}
            }
            }
            /*********************************************************/
            void main(void)
            {??
            ? ? TMOD=0x01;? ???//設T0、T1為方式1,T0的GATE=1;
            TH0=0;
            TL0=0;? ?? ?? ?
            ET0=1;? ?? ?? ?? ? //允許T0中斷
            EA=1;? ?? ?//開啟總中斷
            TX=0;
            while(1)
            {// delay(60);
            ? ???Display();
            ? ?
            ??TX=1;? ?? ?? ?? ?? ?? ? //80MS??啟動一次模塊
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? _nop_();
            ? ? TX=0;
            ? ???while(!RX);
            ? ? TR0=1;? ?? ? //開啟計數
            ? ? while(RX);? ?//當RX為1計數并等待
            ? ? TR0=0;? ? //關閉計數
            ? ???Count();
            }
            }
            /********************************************************/
            void T0_C() interrupt 1? ? //T0中斷用來計數器溢出,超過測距范圍
            {??
            flag=1;? ?? ???//中斷溢出標志
            }

            收藏 543 0 2
            粉絲
            0
            關注
            0
            主題
            3
            超聲波模塊上說的觸發信號為10us的高電平,但39us的最佳。
            0

            回答于 · 2022-07-30 09:10

            粉絲
            0
            關注
            0
            主題
            5
            程序貼出來基本上沒人看,還是說出問題吧!
            0

            回答于 · 2022-07-30 19:57

            亚洲精品免费看>>在线免费观看视频>>亚洲精品免费看