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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8779|回復(fù): 8
收起左側(cè)

超聲波 測(cè)距 1602顯示 親測(cè)可用 接線為普中科技

[復(fù)制鏈接]
ID:183197 發(fā)表于 2017-4-8 13:20 | 顯示全部樓層 |閱讀模式
#include<reg52.h>   
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^6;            //1602的數(shù)據(jù)/指令選擇控制線
sbit rw=P2^5;           //1602的讀寫(xiě)控制線
sbit en=P2^7;          //1602的使能控制線
sbit trig=P1^0;      //超聲波測(cè)距模塊Trig
sbit echo=P1^1;     //超聲波測(cè)距模塊Echo
bit flag1;         //觸發(fā)信號(hào)標(biāo)志位//
uchar count;           //中斷累加變量
long int distance;    //測(cè)量所得距離
unsigned char code table[ ]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字
/*------------------------------------------------
                  延時(shí)函數(shù)
------------------------------------------------*/
void delay(uint n)                           
{
    uint x,y;  
    for(x=n;x>0;x--)
    for(y=110;y>0;y--);
}

/*------------------------------------------------
                  延時(shí)函數(shù)
------------------------------------------------*/
void delayt(uint x)
{
    uchar j;
    while(x-- > 0)
    {
              for(j = 0;j < 125;j++)
        {
          ;
        }
    }
}

/*------------------------------------------------
                1602寫(xiě)命令函數(shù)
------------------------------------------------*/
void lcd_wcom(uchar com)            
{
    rs=0;                //選擇指令寄存器
    rw=0;               //選擇寫(xiě)
    P0=com;            //把命令字送入P0
    delay(5);         //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù)
    en=1;            //使能線電平變化,命令送入1602的8位數(shù)據(jù)口,這點(diǎn)非常重要
    en=0;
}

/*------------------------------------------------
               1602寫(xiě)數(shù)據(jù)函數(shù)   
------------------------------------------------*/
void lcd_wdat(uchar dat)        
{
    rs=1;             //選擇數(shù)據(jù)寄存器
    rw=0;            //選擇寫(xiě)
    P0=dat;         //把要顯示的數(shù)據(jù)送入P0
    delay(5);      //延時(shí)一小會(huì)兒,讓1602準(zhǔn)備接收數(shù)據(jù),也就是檢測(cè)忙信號(hào),這點(diǎn)非常重要。
    en=1;         //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
    en=0;
  }

/*------------------------------------------------
                1602初始化函數(shù)      
------------------------------------------------*/
void lcd_init()              
{
    lcd_wcom(0x38);       //8位數(shù)據(jù),雙列,5*7字形  ,用到功能設(shè)定指令     
    lcd_wcom(0x0c);      //開(kāi)啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍,用到顯示開(kāi)關(guān)控制指令
    lcd_wcom(0x06);     //顯示地址遞增,即寫(xiě)一個(gè)數(shù)據(jù)后,顯示位置右移一位,用到了寫(xiě)入模式設(shè)置指令
    lcd_wcom(0x01);    //清屏,用到了清屏指令
}

/*------------------------------------------------
              1602顯示固定字符函數(shù)      
------------------------------------------------*/
void lcd_xianshi()              
{
    lcd_wcom(0x80+0x40);
        lcd_wdat('D');
        lcd_wdat('i');
        lcd_wdat('s');
        lcd_wdat('t');
        lcd_wdat('a');
           lcd_wdat('n');
        lcd_wdat('c');
        lcd_wdat('e');
        lcd_wdat(':');
        lcd_wcom(0x80+0x4c);
        lcd_wdat('.');
        lcd_wcom(0x80+0x4e);//單位是厘米//
        lcd_wdat('c');
        lcd_wdat('m');
}

/*------------------------------------------------
定時(shí)器0初始化,用于計(jì)算響應(yīng)信號(hào)時(shí)間
------------------------------------------------*/
void init_t0()
{
        TMOD=0x01;         
         TL0=0x66;
        TH0=0xfc;              //1ms
    ET0=1;            
        EA=1;                     
}

/*------------------------------------------------
    超聲波模塊觸發(fā)信號(hào)
------------------------------------------------*/
void trigger()
{
    trig=1;
        delayt(1);
        trig=0;        
}

/*------------------------------------------------
   超聲波模塊相應(yīng)端口初始化函數(shù)
------------------------------------------------*/
void init_measuring()
{
        trig=0;
        echo=0;
        count=0;
}

/*------------------------------------------------
     超聲波模塊距離測(cè)試函數(shù)
------------------------------------------------*/
void measuring()
{
        uchar l;
        uint h,y;
        TR0 = 1;
        while(echo)
    {
        ;
    }        
        TR0 = 0;
        l = TL0;
        h = TH0;
        y = (h << 8) + l;
        y = y - 0xfc66;//us部分
        distance = y + 1000 * count;//計(jì)算總時(shí)間,單位是微秒
        TL0 = 0x66;
        TH0 = 0xfc;
        delayt(30);
        distance = 3453* distance / 20000;//原始為:(0.34毫米/us)*時(shí)間/2//        
}

/*------------------------------------------------
   超聲波模塊測(cè)量結(jié)果顯示函數(shù)
------------------------------------------------*/
void display(uint x)
{
        uchar qian,bai,shi,ge;
        qian=x/1000;
        bai=(x/100)%10;
        shi=(x/10)%10;
        ge=x%10;
        lcd_wcom(0x80+0x49);//單位是厘米//
        lcd_wdat(table[qian]);
        lcd_wdat(table[bai]);
        lcd_wdat(table[shi]);
        lcd_wcom(0x80+0x4d);
        lcd_wdat(table[ge]);
}
/*------------------------------------------------
              主函數(shù)
------------------------------------------------*/
void main()            
{   lcd_init();          //液晶初始化        
    init_t0();          //定時(shí)器0初始化   
        init_measuring();  //超聲波相應(yīng)端口初始化

        while(1)
        {
        lcd_xianshi();   //液晶顯示特定字符
        trigger();      //觸發(fā)超聲波啟動(dòng)
                 while(echo==0)          //等待回聲
         {
           ;
         }
                 measuring();           //進(jìn)行距離測(cè)量
                 display(distance);    //對(duì)測(cè)量結(jié)果進(jìn)行顯示
                 init_measuring();    //超聲波相應(yīng)端口初始化
                 delayt(600);        //每次測(cè)量間隔60ms
        }
}

//……………………………………………中斷服務(wù)函數(shù)…………………………………………………//
void T_0()interrupt 1
{
        TF0 = 0;
        TL0 = 0x66;
        TH0 = 0xfc;
        count++;
        if(count==18)
        {
          TR0 =0;
          TL0 = 0x66;
          TH0 = 0xfc;
          count = 0;
        }
}

回復(fù)

使用道具 舉報(bào)

ID:82765 發(fā)表于 2017-4-8 14:35 | 顯示全部樓層
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

ID:87420 發(fā)表于 2017-4-9 23:14 | 顯示全部樓層
cjjcjj1 發(fā)表于 2017-4-8 14:35
謝謝分享,測(cè)量距離最大是多少呢?

這個(gè)要看你的超聲波模塊了,實(shí)際所能測(cè)得距離你可以看程序T0中斷那里,中斷最多執(zhí)行18次(count計(jì)數(shù)18次),然后換算出最長(zhǎng)的有效收發(fā)時(shí)間,就能算出實(shí)際最遠(yuǎn)距離了,我用這個(gè)程序最多309....cm,310cm沒(méi)出現(xiàn)過(guò),如果超聲波模塊好一些,可以把中斷執(zhí)行次數(shù)增加一些
回復(fù)

使用道具 舉報(bào)

ID:87420 發(fā)表于 2017-4-9 23:16 | 顯示全部樓層
為了顯示更快一些,可以把main函數(shù)里面最后的60ms改小一些,可以確保數(shù)據(jù)更即時(shí),更靈敏測(cè)距。如果是小車(chē)測(cè)距的話(huà),可以硬件添加一個(gè)蜂鳴器,當(dāng)distance<100(10cm)時(shí),beep=0;蜂鳴器響
回復(fù)

使用道具 舉報(bào)

ID:183197 發(fā)表于 2017-4-11 22:10 | 顯示全部樓層
小猴子卡勒 發(fā)表于 2017-4-9 23:16
為了顯示更快一些,可以把main函數(shù)里面最后的60ms改小一些,可以確保數(shù)據(jù)更即時(shí),更靈敏測(cè)距。如果是小車(chē)測(cè) ...

謝謝,我是剛剛學(xué)的小白。
回復(fù)

使用道具 舉報(bào)

ID:318045 發(fā)表于 2018-4-28 15:59 | 顯示全部樓層
請(qǐng)問(wèn)這個(gè)是多少的晶振?
回復(fù)

使用道具 舉報(bào)

ID:280132 發(fā)表于 2018-4-28 18:57 | 顯示全部樓層
謝謝大神,可以用。
回復(fù)

使用道具 舉報(bào)

ID:547254 發(fā)表于 2019-5-25 23:14 | 顯示全部樓層
小猴子卡勒 發(fā)表于 2017-4-9 23:16
為了顯示更快一些,可以把main函數(shù)里面最后的60ms改小一些,可以確保數(shù)據(jù)更即時(shí),更靈敏測(cè)距。如果是小車(chē)測(cè) ...

怎么加?
回復(fù)

使用道具 舉報(bào)

ID:730886 發(fā)表于 2020-6-27 09:42 | 顯示全部樓層
LCD1602中,字符可以顯示出來(lái),但是距離的數(shù)值顯示不出來(lái)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费观看男女羞羞视频 | 91精品综合久久久久久五月天 | 夜夜夜久久久 | 亚洲一区在线日韩在线深爱 | 日韩精品无码一区二区三区 | 亚洲精品无人区 | 亚洲国产一区二区视频 | 中文在线а√在线8 | 欧美在线一区二区三区四区 | 成人精品视频 | 中文字幕久久精品 | 成人免费av在线 | 国产日韩欧美在线 | 日韩视频中文字幕 | 免费a网| 精品在线一区二区 | 看a网站 | 亚洲精品乱码久久久久久久久 | 国产免费xxx | 天天干亚洲| 久艹网站 | 日本超碰 | 久久国产视频网 | 伊人免费在线观看 | 美女天堂 | 国产国拍亚洲精品av | 欧美99| 成人日b视频 | 欧美成人久久 | 亚洲91av| 福利社午夜影院 | 国产日韩欧美精品 | 午夜在线免费观看视频 | 在线看91 | 日韩免费毛片视频 | 色婷婷久久久久swag精品 | 欧美日日| 国产盗摄视频 | 欧美天堂 | 久久精品一区二区 | 狠狠的日 |