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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3162|回復: 4
收起左側

AT89C51超聲波測距

[復制鏈接]
ID:259189 發表于 2017-12-8 19:08 | 顯示全部樓層 |閱讀模式

A   /****************************************************************
Title: 超聲波測距系統
Mcu: AT89S51                                                Oscillator: 12M
Designer: linqiuxiong                                        Date: 2010.2.12
Email:taking@vip.qq.com
Directions: 經實踐表明該系統的測距范圍在0.21m-2m時,誤差不超0.5cm;
大于2m時,最大誤差不超過1.5cm;因發射功率不足,本系統的穩定測量范
圍是0.21m-4m。
*****************************************************************/
#include<reg51.h>                                                /*頭文件*/
#include<intrins.h>
#define uchar unsigned char                                /*縮定義*/
#define uint unsigned int
#define nop() _nop_()                                        /*定義空操作指令*/
#define sled_dm_port P0                                /*定義數碼管段碼控制端口*/
#define sled_wm_port P1                                /*定義數碼管位碼控制端口*/
sbit vout=P1^6;                                                /*聲明40KHz脈沖信號輸出口*/
sbit fm=P1^7;                                                        /*聲明蜂鳴器使能引腳*/
void delay_1ms(uchar x);                                /*1MS為單位的延時程序 */
void display();                                                        /*顯示子程序*/
uchar code num_table[13]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f};
/*  0    1    2    3    4    5    6    7    8    9   -   消隱   .*/       
/*定義數碼管顯示字符跟數字的對應數組關系*/
uchar data sled_lighten_table[]={0xf7,0xfb,0xfd,0xfe};
                                                                        /*定義每次掃描時需點亮的數碼管*/
uchar dis_buff[4]={0xff,0xff,0xff,0xff};        /*定義段碼緩沖數組*/
uint time,distance;                                                /*定義接收時間與距離變量*/
bit rec_flag;                                                          /*定義接收成功標志位*/
uchar k,j,wm;                                                        /*定義脈沖個數與位選控制變量*/

/*主程序*/
void main()
{
        uint i;
        TMOD=0x21;                                                /*T1為8位自動重裝模式*/
        TH0=0x00;                                                /*65ms計數初值*/
        TL0=0x00;
        TH1=0xf2;                                                /*12us計數初值*/
        TL1=0xf2;
        PX0=1;                          /*外部中斷0定義為高優先級中斷源*/
        PT1=1;                          /*定時器1定義為高優先級中斷 */
        ET0=1;                          /*T0溢出中斷允許*/
        EA=1;                           /*開中斷*/
        TR0=1;                         /*啟動T0定時器*/
        while(1)
        {
                dis_buff[2]=num_table[distance/100];
                dis_buff[1]=num_table[distance%100/10];
                dis_buff[0]=num_table[distance%10];
                display();
                if(rec_flag)
                {
                        rec_flag=0;
                        for(i=400;i>0;i--)                                        /*測量間隔控制(約4*100=400MS)*/
                        display();
                        EA=1;
                        TR0=1;                             
                }               
        }               
}
/*顯示子程序*/
void display()
{
        sled_wm_port=0xff;                                                /*顯示消影*/
        if(wm==3)
                sled_dm_port=0xff;
        if(wm==2)
        {
                if(dis_buff[2]==0xc0)                                        /*若第2位數碼管為0則不顯示*/
                        sled_dm_port=0xff;
                else
                        sled_dm_port=dis_buff[2];
        }
        else
                sled_dm_port=dis_buff[wm];       
        sled_wm_port=sled_lighten_table[wm];
        wm++;
        if(wm==4)
                wm=0;
        delay_1ms(1);       
}
/*定時器T0中斷程序*/
void TIMER0() interrupt 1
{
        EA=0;
        TH0=0x00;
        TL0=0x00;
        ET1=1;
        EA=1;
        TR1=1;
        TR0=1;
}
/*定時器T1中斷程序*/
void TIMER1() interrupt 3
{
        vout=!vout;
        k++;
        if(k>=4)                                                                /*超聲波脈沖個數控制(為賦值的一半)*/
        {
                k=0;
                TR1=0;
                ET1=0;
                for(j=200;j>0;j--);                                        /*1ms延時避開盲區*/
                for(j=200;j>0;j--);
                for(j=200;j>0;j--);
                EX0=1;                                                        /*開啟外部中斷0*/
        }               
}
/*外部中斷0程序*/
void PINT0() interrupt 0
{
        TR0=0;                              
        TR1=0;
        ET1=0;
        EA=0;
        EX0=0;                              /*禁止外部中斷0中斷 */
        rec_flag=1;                                                        /*接收成功標志位置1*/
        time=TH0;
        time=time*256+TL0;
        time=time-120;                                                /*補償軟件或硬件帶來的誤差*/
        distance=time*0.017;               
}
/*1MS為單位的延時程序*/
void delay_1ms(uchar x)
{
        uchar i;
        while(x--)
                for(i=0;i<100;i++);
}

AT89S51單片機超聲波測距源程序.doc

38 KB, 下載次數: 43, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:429384 發表于 2018-11-19 18:28 | 顯示全部樓層
謝謝大佬
回復

使用道具 舉報

ID:429713 發表于 2018-11-20 10:59 | 顯示全部樓層
程序有錯誤啊
回復

使用道具 舉報

ID:407566 發表于 2018-11-26 11:36 | 顯示全部樓層
怎么接線
回復

使用道具 舉報

ID:458913 發表于 2019-1-1 02:56 | 顯示全部樓層
請問有沒有仿真圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一级成人 | 在线观看黄免费 | 成人羞羞国产免费视频 | 欧美专区在线观看 | 欧洲成人午夜免费大片 | 人人干人人超 | 四季久久免费一区二区三区四区 | 中文字幕av一区二区三区 | 涩涩导航 | 在线a视频网站 | 久久精品毛片 | www.夜夜骑.com | 特级丰满少妇一级aaaa爱毛片 | 亚洲成人福利在线观看 | 精品在线观看一区二区 | 久久久久久久久久久高潮一区二区 | 日韩黄色小视频 | av网站在线播放 | 91精品久久久 | 亚洲精品中文字幕 | 99久久婷婷国产综合精品首页 | 国产精品久久久久久吹潮日韩动画 | 成人在线小视频 | 欧美日韩视频在线 | 国产精品久久久久久久久婷婷 | 久久精品一区二区三区四区 | av网站免费| 亚洲 中文 欧美 日韩 在线观看 | 国产蜜臀97一区二区三区 | 亚洲成人精 | 国产91久久久久蜜臀青青天草二 | 久色网| 欧美精品一区在线 | 成年免费大片黄在线观看一级 | 日韩精品一区二区三区免费观看 | 亚洲成人综合网站 | 精品国产一区二区三区免费 | 中文字幕一区二区三区四区五区 | 狠狠狠色丁香婷婷综合久久五月 | 午夜影院| 亚洲一区在线日韩在线深爱 |