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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5802|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

51單片機&HC-SRO4 超聲波測距模塊實現(xiàn)超聲波測距程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:63146 發(fā)表于 2020-1-11 10:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;            //1602的數(shù)據(jù)/指令選擇控制線
sbit rw=P2^1;           //1602的讀寫控制線
sbit en=P2^2;          //1602的使能控制線
sbit trig=P2^5;      //超聲波測距模塊Trig
sbit echo=P3^2;     //超聲波測距模塊Echo
bit flag1;         //觸發(fā)信號標(biāo)志位//
uchar count;           //中斷累加變量
long int distance;    //測量所得距離
unsigned char code table[ ]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字

void delay(uint n)                          
{
    uint x,y;
    for(x=n;x>0;x--)
    for(y=110;y>0;y--);
}


void delayt(uint x)
{
    uchar j;
    while(x-- > 0)
    {
              for(j = 0;j < 125;j++)
        {
          ;
        }
    }
}


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


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


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


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');
}


void init_t0()
{
        TMOD=0x01;        
         TL0=0x66;
        TH0=0xfc;              //1ms
    ET0=1;            
        EA=1;                     
}


void trigger()
{
    trig=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
        trig=1;      
}


void init_measuring()
{
        trig=1;
        echo=1;
        count=0;
}


void measuring()
{
        uchar l;
        uint h,y;
        TR0 = 1;
        while(echo==1)
    {
        ;
    }      
        TR0 = 0;
        l = TL0;
        h = TH0;
        y = (h << 8) + l;
        y = y - 0xfc66;//us部分
        distance = y + 1000 * count;//計算總時間,單位是微秒
        TL0 = 0x66;
        TH0 = 0xfc;
        delayt(30);
        distance = 3453* distance / 20000;//原始為:(0.34毫米/us)*時間/2//      
}


void display(uint x)
{
        uchar qian,bai,shi,ge;
        qian=x/1000;
        bai=(x/100);
        shi=(x/10);
        ge=x;
        lcd_wcom(0x80+0x49);//單位是厘米//
        lcd_wdat(table[qian]);
        lcd_wdat(table[bai]);
        lcd_wdat(table[shi]);
        lcd_wcom(0x80+0x4d);
        lcd_wdat(table[ge]);
}

void main()           
{   lcd_init();          //液晶初始化      
    init_t0();          //定時器0初始化  
        init_measuring();  //超聲波相應(yīng)端口初始化

        while(1)
        {
         lcd_xianshi();   //液晶顯示特定字符
         trigger();      //觸發(fā)超聲波啟動
          while(echo==0)          //等待回聲
          {
             ;
          }
            measuring();           //進(jìn)行距離測量
            display(distance);    //對測量結(jié)果進(jìn)行顯示
            init_measuring();    //超聲波相應(yīng)端口初始化
            delayt(600);        //每次測量間隔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;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:318672 發(fā)表于 2020-1-23 17:27 來自手機 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

板凳
ID:356923 發(fā)表于 2020-2-11 14:01 | 只看該作者
樓主,HC-SR04怎么找不到?求助!
回復(fù)

使用道具 舉報

地板
ID:738617 發(fā)表于 2020-4-26 17:35 | 只看該作者
地方都是 發(fā)表于 2020-2-11 14:01
樓主,HC-SR04怎么找不到?求助!

Proteus8.6中有
回復(fù)

使用道具 舉報

5#
ID:710713 發(fā)表于 2020-4-28 16:47 | 只看該作者
C樓主在么,需要幫助我lcd液晶顯示是找到了的,但是HCsr04這個我8.6里面好像沒有找到
回復(fù)

使用道具 舉報

6#
ID:710713 發(fā)表于 2020-4-28 16:49 | 只看該作者
SRF04倒是有的
回復(fù)

使用道具 舉報

7#
ID:742560 發(fā)表于 2020-5-1 22:29 | 只看該作者
樓主有沒有原理圖
回復(fù)

使用道具 舉報

8#
ID:743099 發(fā)表于 2020-5-6 22:56 | 只看該作者
程序在哪
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av一区 | 中文字幕一区二区三区精彩视频 | 一区二区三区不卡视频 | 精品免费视频 | 国产精品1 | 精品国产一区二区三区性色av | 精品一区二区三区免费视频 | 国产精品一区久久久 | 中文字幕国产精品 | 免费视频一区二区 | 免费h在线 | 另类 综合 日韩 欧美 亚洲 | 二区三区视频 | 日韩综合在线视频 | 欧美激情一区 | 日韩欧美中文 | 精国产品一区二区三区 | 狠狠色综合久久婷婷 | 亚洲精品一区二区网址 | 久久综合av | 久久久久久久久久久福利观看 | 欧美精品中文 | 成人免费视频网站在线观看 | 国产午夜一级 | 日韩av免费在线电影 | 中国三级黄色录像 | 亚洲欧美视频一区 | 国产9久| 亚洲精品2区 | 天天躁日日躁xxxxaaaa | 久久三级av | 天天干天天操天天看 | 成人av一区二区三区 | 91精品国产91久久久久久不卞 | 欧美aaa| 欧美亚洲国产日韩 | 久久久91精品国产一区二区三区 | 久热免费在线 | 日本一区二区不卡 | 国产不卡在线播放 | 欧美一级欧美一级在线播放 |