欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機控制超聲波測距控制程序
[打印本頁]
作者:
張蒙方11111
時間:
2017-8-8 16:24
標題:
51單片機控制超聲波測距控制程序
全部資料下載地址(內容經典):
18.超聲波測距實驗.zip
(37.46 KB, 下載次數: 43)
2017-8-8 16:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
/*******************************************************************************
* 文件名稱:超聲波測距實驗
* 實驗目的:1.掌握超聲波測距原理
* 2.掌握51單片機定時器工作模式和配置方法
* 程序說明:無
* 日期版本:2012-9-6/V1.0a
*******************************************************************************/
#include "reg52.h" //定義51單片機特殊功能寄存器
#include "intrins.h"
#include "absacc.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_(); _nop_();}
sbit TX = P1^0; //發射引腳
sbit RX = P1^1; //接收引腳
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
0xff};
unsigned char dspbuf[8] = {10,10,10,10,10,10,10,10}; //顯示緩沖區
unsigned char dspcom = 0;
unsigned int intr = 0;
bit s_flag;
unsigned int t = 0;
void send_wave(void);
void display(void);
void main(void)
{
unsigned int distance;
TMOD |= 0x11; //配置定時器工作模式
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
TH1 = 0;
TL1 = 0;
EA = 1;
ET0 = 1; //打開定時器0中斷
TR0 = 1; //啟動定時器
while(1)
{
/** 200毫秒更新一次數據 */
if(s_flag)
{
s_flag = 0;
/** 關閉定時器0中斷:計算超聲波發送到返回的時間 */
// ET0 = 0;
send_wave(); //發送方波信號
TR1 = 1; //啟動計時
while((RX == 1) && (TF1 == 0)); //等待收到脈沖
TR1 = 0; //關閉計時
//發生溢出
if(TF1 == 1)
{
TF1 = 0;
distance = 9999; //無返回
}
else
{
/** 計算時間 */
t = TH1;
t <<= 8;
t |= TL1;
distance = (unsigned int)(t*0.017); //計算距離
}
TH1 = 0;
TL1 = 0;
}
/** 數據處理 */
dspbuf[5] = distance/100;
dspbuf[6] = distance%100/10;
dspbuf[7] = distance%10;
}
}
//定時器0中斷服務函數
void isr_timer_0(void) interrupt 1 //默認中斷優先級 1
{
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256; //定時器重載
display(); //2ms執行一次
if(++intr == 200)
{
s_flag = 1;
intr = 0;
}
}
//顯示函數
void display(void)
{
XBYTE[0xE000] = 0xff; //去除鬼影
XBYTE[0xC000] = (1<<dspcom);
XBYTE[0xE000] = tab[dspbuf[dspcom]];
if(++dspcom == 8){
dspcom = 0;
}
}
//TX引腳發送40KHz方波信號驅動超聲波發送探頭
void send_wave(void)
{
unsigned char i = 8; //發送8個脈沖
do
{
TX = 1;
somenop;
TX = 0;
somenop;
}
while(i--);
}
復制代碼
作者:
小小白拉拉
時間:
2018-7-10 23:04
學習學習。!
作者:
pigss
時間:
2018-7-12 09:28
謝謝分享
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1