欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
超聲波測(cè)試距離程序,判斷設(shè)置的范圍值做一個(gè)抽水檢測(cè)部分
[打印本頁(yè)]
作者:
精致男孩
時(shí)間:
2019-7-29 15:19
標(biāo)題:
超聲波測(cè)試距離程序,判斷設(shè)置的范圍值做一個(gè)抽水檢測(cè)部分
基于AT89C52,和超聲波模塊編輯的抽水檢測(cè)系統(tǒng)。LCD1602做顯示部分,通過(guò)超聲波數(shù)據(jù)判斷是否符合條件要求 可以判斷水面距離檢測(cè),通過(guò)判斷識(shí)別1水位是否有水,有水就檢測(cè)2水位,無(wú)就繼續(xù)循環(huán)。判斷識(shí)別2水位是否有水,如果有水則進(jìn)行循環(huán),無(wú)水則再執(zhí)行上水命令。有效避免只能測(cè)試一個(gè)位而反復(fù)上水,本文有效的拉開(kāi)了上水距離。避免反復(fù)不停抽水燒機(jī)器問(wèn)題。
單片機(jī)源程序如下:
/******************************************************************************/
/* 項(xiàng)目名稱(chēng) : 超聲波測(cè)距并且判斷條件距離 */
/* 主控芯片 : STC89C52 */
/* 文件名稱(chēng) : 超聲波判斷距離并報(bào)警 */
/* 文件功能1 : 通過(guò)超聲波數(shù)據(jù)判斷是否符合條件要求 可以判斷水面距離檢測(cè) */
/* 文件功能2 : 通過(guò)判斷識(shí)別1水位是否有水,有水就檢測(cè)2水位,無(wú)就繼續(xù)循環(huán) */
/* 文件功能 : 判斷識(shí)別2水位是否有水,檢測(cè)2水位是否有水。再執(zhí)行上水命令 */
/* 文件功能 : 有效避免只能測(cè)試一個(gè)位而反復(fù)上水,拉開(kāi)上水距離避免燒機(jī)器 */
/******************************************************************************/
/**********************************包含頭文件**********************************/
#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 = P1^6; //回聲接收端口
sbit OUTPUT = P1^7; //超聲觸發(fā)端口
sbit Beep = P2^3; // 蜂鳴器
sbit D1 = P1^0; //LED燈
/********************************定義變量和數(shù)組********************************/
long int distance=0; //距離變量
uchar table[]=" Welcome to use "; //開(kāi)機(jī)顯示1 "歡迎使用"
uchar table0[]=" ZHANGHAO "; //開(kāi)機(jī)顯示2
uchar table1[]="There's no echo.";
uchar table2[]=" QQ:2638831886 "; //固定在液晶顯示屏上,一段字體
uchar table3[]="Distance:"; //固定在液晶顯示屏上,"測(cè)試距離"
uchar count;
unsigned int dz,k,s,j,bgz,k,bian,bianb;
/***********************************函數(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
bianb=b; //可以復(fù)制米的數(shù)據(jù)
}
/******************************************************************************/
/* 函數(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;
// distance =3000; //這樣寫(xiě)顯示為300.0cm不變
}
/******************************************************************************/
/* 函數(shù)名稱(chēng) : Distance_panduan */
/* 函數(shù)描述 : 計(jì)算距離判斷函數(shù) */
/* 輸入?yún)?shù) : 無(wú) */
/* 參數(shù)描述 : 無(wú) */
/* 返回值 : 無(wú) */
/******************************************************************************/
void Distance_panduan(void)
{
if(distance>=70) //2000為m以此類(lèi)推
{
D1=0;
}
else
D1=1;
}
/******************************************************************************/
/* 函數(shù)名稱(chēng) : main */
/* 函數(shù)描述 : 主函數(shù) */
/* 輸入?yún)?shù) : 無(wú) */
/* 參數(shù)描述 : 無(wú) */
/* 返回值 : 無(wú) */
/******************************************************************************/
void main(void)
{
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); //顯示距離
Distance_panduan(); //測(cè)試距離判斷是否滿(mǎn)足設(shè)置條件
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;
}
}
/******************************************************************************/
復(fù)制代碼
所有資料51hei提供下載:
超聲波判斷距離并報(bào)警.zip
(8.81 KB, 下載次數(shù): 21)
2019-7-29 15:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1