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

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

QQ登錄

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

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

超聲波測(cè)距的單片機(jī)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:386391 發(fā)表于 2018-8-30 13:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg52.h>
#include "1602.h"
/************************************宏定義************************************/
#define VELOCITY_30C        3495       //30攝氏度時(shí)的聲速,聲速V= 331.5 + 0.6*溫度;
#define VELOCITY_23C        3453       //23攝氏度時(shí)的聲速,聲速V= 331.5 + 0.6*溫度;
/************************************位定義************************************/
sbit INPUT  = P2^0;                //回聲接收端口
sbit OUTPUT = P2^1;                //超聲觸發(fā)端口
sbit Beep   = P2^3 ;                           // 蜂鳴器 
/********************************定義變量和數(shù)組********************************/
long int distance=0;               //距離變量
uchar table[]="    Welcome to   ";
uchar table0[]="     Yahboom    ";
uchar table1[]="There's no echo.";
uchar table2[]="     BST-V51      ";
uchar table3[]="Distance:";
uchar count;
/***********************************函數(shù)聲明***********************************/
extern void initLCD();
extern void write_date(uchar date);
extern void write_com(uchar com);
extern void delay(uint x);
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Delay_xMs                                                      */
/* 函數(shù)描述  : 延時(shí)函數(shù)                                                       */
/* 輸入?yún)?shù)  : x                                                              */
/* 參數(shù)描述  : 延時(shí)時(shí)間                                                       */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Delay_xMs(unsigned int x)
{
    unsigned int i,j;
    for(i = 0;i < x;i++ )
    {
        for(j = 0;j < 3;j++ )
        {
            ;
        }
    }
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Alarm                                                          */
/* 函數(shù)描述  : 蜂鳴器發(fā)聲函數(shù)                                                 */
/* 輸入?yún)?shù)  : t                                                              */
/* 參數(shù)描述  : 發(fā)聲的次數(shù)                                                     */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Alarm(uchar t)
{
        uchar i;
        for(i = 0;i < t;i++)
        {
                Beep = 0;
                Delay_xMs(1000);
                Beep = 1;
                Delay_xMs(1000);
        }
}        
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : delayt                                                         */
/* 函數(shù)描述  : 延時(shí)函數(shù)                                                       */
/* 輸入?yún)?shù)  : x                                                              */
/* 參數(shù)描述  : 延時(shí)時(shí)間數(shù)據(jù)                                                   */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/        
void delayt(uint x)
{
    uchar j;
    while(x-- > 0)
    {
              for(j = 0;j < 125;j++)
        {
            ;
        }
    }
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Init_MCU                                                       */
/* 函數(shù)描述  : 初始化單片機(jī)函數(shù)                                               */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Init_MCU(void)
{
        TMOD = 0x01;          //定時(shí)器2初始化,設(shè)置為16位自動(dòng)重裝模式
         TL0 = 0x66;
        TH0 = 0xfc;              //1ms
    ET0 = 1;              //開(kāi)定時(shí)器2
        EA = 1;                      //總中斷使能
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Init_Parameter                                                 */
/* 函數(shù)描述  : 初始化參數(shù)和IO口函數(shù)                                           */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Init_Parameter(void)
{
         OUTPUT =1;
         INPUT = 1;
         count = 0;
         distance = 0;
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : display_char                                                   */
/* 函數(shù)描述  : 顯示字符串函數(shù)                                                 */
/* 輸入?yún)?shù)  : point,address                                                  */
/* 參數(shù)描述  : 寫(xiě)入的字符串的地址指針 1602顯示對(duì)應(yīng)的地址                      */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void display_char(uchar *point,uchar address)
{
        uchar i;
        write_com(0x80 + address);
        for(i = 0;i < 16; i++)
        {
                write_date(*point);
                point++;
        }
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : display                                                        */
/* 函數(shù)描述  : 顯示數(shù)字                                                       */
/* 輸入?yún)?shù)  : number,address                                                */
/* 參數(shù)描述  : number寫(xiě)入的數(shù)據(jù),address地址                                  */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/        
void display(int number,uchar address)
{
        uchar b,c,d,e;
        b= (number / 1000);
        c= (number / 100) % 10;
        d = (number / 10) % 10;
        e = number % 10;

        write_com(0x80 + address);
    write_date(b + 48);
        write_date(c + 48);
        write_date(d + 48);
        write_date(46);           //小數(shù)點(diǎn)的ASCII
        write_date(e + 48);
    write_date(99);           //"c"的ASCII
        write_date(109);          //"m"的ASCII
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Trig_SuperSonic                                                */
/* 函數(shù)描述  : 發(fā)出聲波函數(shù)                                                   */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Trig_SuperSonic(void)//出發(fā)聲波
{
         OUTPUT = 1;
         delayt(1);
         OUTPUT = 0;
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : Measure_Distance                                               */
/* 函數(shù)描述  : 計(jì)算距離函數(shù)                                                   */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void Measure_Distance(void)
{
        uchar l;
        uint h,y;
        TR0 = 1;
        while(INPUT)
    {
        ;
    }        
        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 = VELOCITY_30C * distance / 20000;
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : main                                                           */
/* 函數(shù)描述  : 主函數(shù)                                                         */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/                                       
void main(void)
{        
    rw = 0;
        initLCD();
        Init_MCU();
        Init_Parameter();
        Alarm(2);
        display_char(table,0x00);
        display_char(table0,0x40);
        Delay_xMs(30000);
        display_char(table2,0x00);
        display_char(table1,0x40);

        while(1)
        {
                 Trig_SuperSonic();         //觸發(fā)超聲波發(fā)射
                 while(INPUT == 0)          //等待回聲
         {
             ;
         }
                 Measure_Distance();        //計(jì)算脈寬并轉(zhuǎn)換為距離
                 display_char(table3,0x40);
                 display(distance,0x49);    //顯示距離
                 Init_Parameter();          // 參數(shù)重新初始化
                 delayt(100);               //延時(shí),兩次發(fā)射之間要至少有10ms間隔
         }        
}
/******************************************************************************/
/* 函數(shù)名稱(chēng)  : timer0                                                         */
/* 函數(shù)描述  : T0中斷處理函數(shù)                                                 */
/* 輸入?yún)?shù)  : 無(wú)                                                             */
/* 參數(shù)描述  : 無(wú)                                                             */
/* 返回值    : 無(wú)                                                             */
/******************************************************************************/
void timer0 (void) interrupt 1
{
        TF0 = 0;
        TL0 = 0x66;
        TH0 = 0xfc;
        count++;
        if(count == 18)//超聲波回聲脈寬最多18ms
        {
                TR0 =0;
                TL0 = 0x66;
                TH0 = 0xfc;
                count = 0;
        }
}
/******************************************************************************/


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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-8-30 16:37 | 只看該作者
補(bǔ)全原理圖或者詳細(xì)說(shuō)明一下電路連接即可獲得100+黑幣 還有頭文件
回復(fù)

使用道具 舉報(bào)

板凳
ID:433256 發(fā)表于 2019-6-18 12:51 | 只看該作者
if(count == 18)//超聲波回聲脈寬最多18ms
是啥意思
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美高清视频一区 | 日本欧美在线视频 | 国产精品久久久久久久久久久久 | 精品乱码一区二区 | 成人国产精品视频 | 日本亚洲一区 | 美女福利网站 | 亚洲国产一区在线 | 国产精品国产三级国产aⅴ原创 | 在线一区二区国产 | 北条麻妃一区二区三区在线视频 | 婷婷久久一区 | 国产福利在线免费观看 | 久久久免费| 亚洲欧美视频在线观看 | 欧美精品在欧美一区二区少妇 | 午夜私人影院 | 亚洲欧美日本在线 | 精精国产xxxx视频在线播放 | 婷婷免费在线 | 新超碰97 | 成人免费网站视频 | 九九热在线免费视频 | 亚洲一区二区三区高清 | 一级片免费在线观看 | 精品视频久久久 | 国产成人免费视频网站高清观看视频 | 成年网站在线观看 | 国产一区二区三区免费 | av在线一区二区 | 国产精品a级 | 黄在线免费观看 | 97人人澡人人爽91综合色 | 操人网站 | 天天操天天玩 | 欧美日韩高清一区二区三区 | 日日夜精品视频 | 精品欧美乱码久久久久久 | 中文字幕在线电影观看 | 欧美aaaa视频| 情侣酒店偷拍一区二区在线播放 |