国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

51單片機(jī)超聲波測距程序代碼

/超聲波模塊ME007顯示程序


//晶振=8M


//MCU=STC10F04XE


//P0.0-P0.6共陽數(shù)碼管引腳


//Trig = P1^0


//Echo = P3^2


#include //包括一個52標(biāo)準(zhǔn)內(nèi)核的頭文件


#define uchar unsigned char //定義一下方便使用


#define uint unsigned int


#define ulong unsigned long


//***********************************************


sfr CLK_DIV = 0x97; //為STC單片機(jī)定義,系統(tǒng)時鐘分頻


//為STC單片機(jī)的IO口設(shè)置地址定義


sfr P0M1 = 0X93;


sfr P0M0 = 0X94;


sfr P1M1 = 0X91;


sfr P1M0 = 0X92;


sfrP2M1 = 0X95;


sfrP2M0 = 0X96;


//***********************************************


sbit Trig = P1^0; //產(chǎn)生脈沖引腳


sbit Echo = P3^2; //回波引腳


sbit test = P1^1; //測試用引腳


uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//數(shù)碼管0-9


uint distance[4]; //測距接收緩沖區(qū)


uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定義寄存器


bit succeed_flag; //測量成功標(biāo)志


//********函數(shù)聲明


void conversion(uint temp_data);


void delay_20us();


//void pai_xu();


void main(void) // 主程序


{ uint distance_data,a,b;


uchar CONT_1;


CLK_DIV=0X03; //系統(tǒng)時鐘為1/8晶振(pdf-45頁)


P0M1 = 0; //將io口設(shè)置為推挽輸出


P1M1 = 0;


P2M1 = 0;


P0M0 = 0XFF;


P1M0 = 0XFF;


P2M0 = 0XFF;


i=0;


flag=0;


test =0;


Trig=0; //首先拉低脈沖輸入引腳


TMOD=0x11; //定時器0,定時器1,16位工作方式


TR0=1; //啟動定時器0


IT0=0; //由高電平變低電平,觸發(fā)外部中斷


ET0=1; //打開定時器0中斷


//ET1=1; //打開定時器1中斷


EX0=0; //關(guān)閉外部中斷


EA=1; //打開總中斷0


while(1) //程序循環(huán)


{


EA=0;


Trig=1;


delay_20us();


Trig=0; //產(chǎn)生一個20us的脈沖,在Trig引腳


while(Echo==0); //等待Echo回波引腳變高電平


succeed_flag=0; //清測量成功標(biāo)志


EX0=1; //打開外部中斷


TH1=0; //定時器1清零


TL1=0; //定時器1清零


TF1=0; //


TR1=1; //啟動定時器1


EA=1;


while(TH1 < 30);//等待測量的結(jié)果,周期65.535毫秒(可用中斷實(shí)現(xiàn))


TR1=0; //關(guān)閉定時器1


EX0=0; //關(guān)閉外部中斷


if(succeed_flag==1)


{


distance_data=outcomeH; //測量結(jié)果的高8位


distance_data<<=8; //放入16位的高8位


distance_data=distance_data|outcomeL;//與低8位合并成為16位結(jié)果數(shù)據(jù)


distance_data*=12; //因?yàn)槎〞r器默認(rèn)為12分頻www.dgzj.com


distance_data/=58; //微秒的單位除以58等于厘米


} //為什么除以58等于厘米, Y米=(X秒*344)/2


// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58


if(succeed_flag==0)


{


distance_data=0; //沒有回波則清零


test = !test; //測試燈變化


}


/// distance[i]=distance_data; //將測量結(jié)果的數(shù)據(jù)放入緩沖區(qū)


/// i++;


/// if(i==3)


/// {


/// distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;


/// pai_xu();


/// distance_data=distance[1];


a=distance_data;


if(b==a) CONT_1=0;


if(b!=a) CONT_1++;


if(CONT_1>=3)


{ CONT_1=0;


b=a;


conversion(b);


}


/// i=0;


///}


}


}


//***************************************************************


//外部中斷0,用做判斷回波電平


INTO_() interrupt 0 // 外部中斷是0號


{


outcomeH =TH1; //取出定時器的值


outcomeL =TL1; //取出定時器的值


succeed_flag=1; //至成功測量的標(biāo)志


EX0=0; //關(guān)閉外部中斷


}


//****************************************************************


//定時器0中斷,用做顯示


timer0() interrupt 1 // 定時器0中斷是1號


{


TH0=0xfd; //寫入定時器0初始值


TL0=0x77;


switch(flag)


{case 0x00:P0=ge; P2=0xfd;flag++;break;


case 0x01:P0=shi;P2=0xfe;flag++;break;


case 0x02:P0=bai;P2=0xfb;flag=0;break;


}


}


//*****************************************************************


/*


//定時器1中斷,用做超聲波測距計(jì)時


timer1() interrupt 3 // 定時器0中斷是1號


{


TH1=0;


TL1=0;


}


*/


//******************************************************************


//顯示數(shù)據(jù)轉(zhuǎn)換程序


void conversion(uint temp_data)


{


uchar ge_data,shi_data,bai_data ;


bai_data=temp_data/100 ;


temp_data=temp_data%100; //取余運(yùn)算


shi_data=temp_data/10 ;


temp_data=temp_data%10; //取余運(yùn)算


ge_data=temp_data;


bai_data=SEG7[bai_data];


shi_data=SEG7[shi_data];


ge_data =SEG7[ge_data];


EA=0;


bai = bai_data;


shi = shi_data;


ge = ge_data ;


EA=1;


}


//******************************************************************


void delay_20us()


{ uchar bt ;


for(bt=0;bt<100;bt++);


}


/*


void pai_xu()


{ uint t;


if (distance[0]>distance[1])


{t=distance[0];distance[0]=distance[1];distance[1]=t;} /*交換值


if(distance[0]>distance[2])


{t=distance[2];distance[2]=distance[0];distance[0]=t;} /*交換值


if(distance[1]>distance[2])


{t=distance[1];distance[1]=distance[2];distance[2]=t;} /*交換值


}


*/


關(guān)鍵字:51單片機(jī)  超聲波測距  報警系統(tǒng) 引用地址:51單片機(jī)超聲波測距程序代碼

上一篇:51單片機(jī)門鈴電路原理圖及C語言源程序
下一篇:51單片機(jī)C語言運(yùn)算符表

推薦閱讀

最火手游“王者榮耀”將玩家分成“青銅、白銀、黃金...”等段位。筆者從青銅開始打到最強(qiáng)王者。是不是電子測量產(chǎn)品也可分成段位,隨著工程師努力,一步步從青銅提升到王者呢?做王者,必備要有一套銘文。對于電子測量產(chǎn)品,推薦銘文是“防爆防火防電擊”。一、爆炸和起火三星Note7爆炸消息頻發(fā),最終完成270萬部召回工作,占全部投放量的88%。究其原因,手...
英國借助第一次工業(yè)革命崛起,成為了世界工業(yè)強(qiáng)國。而美國利用第二次工業(yè)革命,成為全球經(jīng)濟(jì)的霸主。每一次變革都會重新定義世界競爭格局,科技的進(jìn)步在推動社會向前,如今,我們正在迎接智能化時代,機(jī)器人產(chǎn)業(yè)快速擴(kuò)張,人工智能成為了熱門的投資方向。由于傳統(tǒng)制造業(yè)依賴于人力勞動,而今天人力結(jié)構(gòu)已經(jīng)發(fā)生了變化,像日本等一些國家已經(jīng)出現(xiàn)老齡化問題...
STM32F103系列的單片機(jī)一共有11個定時器,其中:2個高級定時器4個普通定時器2個基本定時器2個看門狗定時器1個系統(tǒng)嘀嗒定時器出去看門狗定時器和系統(tǒng)滴答定時器的八個定時器列表;8個定時器分成3個組;TIM1和TIM8是高級定時器TIM2-TIM5是通用定時器TIM6和TIM7是基本的定時器這8個定時器都是16位的,它們的計(jì)數(shù)器的類型除了基本定時器TIM6和TIM7都支持向上,...
首先準(zhǔn)備材料吧:SEG數(shù)碼管4個共陰極(小編用的共陽極的)、10k排阻(小編沒有直接做了個)、51單片機(jī)、按鈕、30p電容、12MHz晶振、10k電阻、10uf電容、插針、74ls245(小編用三極管代替了)。成品圖原理圖主程序:#include "Key.h"#include "led.h"uchar timeSetBuff[8]={&#39;0&#39;,&#39;0&#39;,LED_MODE_COUNT,&#39;0&#39;,&#39;0&#39;,LED_MODE_CO...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved