❶ 基於51單片機的測速儀,小弟想diy一個測速儀,測高速移動的物體的速度。工作原理是當物體通過第一個
這個距離只有0.1米
如果按中高速100m/s來算的話
通過的時間只有1個毫秒
最高速500m/s的話只有200個us
51單片機回測低速的話應該問題不答大,測高速可能有誤差
P3.0和P3.1是串口使用的引腳
其實你這里用P3.2和P3.3兩個中斷引腳更合理
我給你提供下思路吧
首先,while中等待P3.0進入低電平時啟動定時器計數
然後再while等待P3.1進入低電平停止計數
while(P3.0==0)
{
cnt--;//用於防止沒有感測器時死機
if(cnt==0)
{
break;
}
}//等待回聲被拉低
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//啟動定時器
cnt=50000;//重新設定初值,防止沒有檢測到感測器死機
while(P3.1==0)
{
cnt--;
if(cnt==0)
{
break;
}
}//等待響應完畢
TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE);//關閉定時器
❷ 求一個基於51單片機的自行車測速系統..
http://v.youku.com/v_show/id_XMzY4Njc2NzA0.html可以借鑒這個視頻,protues模擬,keil編程
❸ 怎麼做個基於51單片機的GPS測速器 求程序
你好!GPS接收頭用的什麼型號?除了顯示速度,還要顯示什麼呢?
顯示是液晶還是數碼管呢?把原理圖發一下吧
❹ 基於51單片機和LCD1602的自行車測速系統的設計
你這程序有錯誤,編譯不通過。
所以,懷疑你是怎麼模擬運行的呢?
在玩呢。
❺ 基於MCS-51系列單片機AT89C51,設計一個以單片機為核心的頻率測量裝置。
直接列出需求,等現成的,這不是學習之法啊
我只能告訴你,用兩個定時/計數器,一個做定時器,一個做計數器,一定時間內測到的上升沿或者下降沿的個數,就可以算出頻率了
❻ 基於51單片機的轉速測量設計,程序編寫!電路模擬圖
測量轉速,使用光電感測器,被測電機帶動紙片旋轉,我們在紙片上開了10小孔,電機每旋轉一周就會產生10個脈沖,產生12個脈沖,要求將轉速值(轉/分)顯示在數碼管上。
實驗程序如下:
#include<REG52.H>
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#defineLED_DATP1
sbitLED_SEG0=P0^3;
sbitLED_SEG1=P0^2;
sbitLED_SEG2=P0^1;
sbitLED_SEG3=P0^0;
//sbitpin_SpeedSenser=P3^5;//光電感測器信號接在T1上
#defineTIME_CYLC100//12M晶振,定時器10ms中斷一次我們1秒計算一次轉速//1000ms/10ms=100
#definePLUS_PER10//碼盤的齒數,這里假定碼盤上有10個齒,即感測器檢測到10個脈沖,認為1圈
#defineK100.0//校準系數
unsignedcharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchardataDisbuf[4];//顯示緩沖區
uintTcounter=0;//時間計數器
bitFlag_Fresh=0;//刷新標志
bitFlag_clac=0;//計算轉速標志
bitFlag_Err=0;//超量程標志
//在數碼管上顯示一個四位數
voidDisplayFresh();
//計算轉速,並把結果放入數碼管緩沖區
voidClacSpeed();
//初始化定時器T0
voidinit_timer0();
//初始化定時器T1
voidinit_timer1();
//延時函數
voidDelay(uintms);
voidit_timer0()interrupt1/*interruptaddressis0x000b*/
{
TF0=0;//d定時器T0用於數碼管的動態刷新
//
TH0=0xC0;/*initvalues*/
TL0=0x00;
Flag_Fresh=1;
Tcounter++;
if(Tcounter>TIME_CYLC)
{Flag_clac=1;//周期到,該重新計算轉速了
}
}
voidit_timer1()interrupt3/*interruptaddressis0x001b*/
{
TF1=0;//定時器T1用於單位時間內收到的脈沖數
//要速度不是很快,T1永遠不會益處
Flag_Err=1;//如果速度很高,我們應考慮另外一種測速方法,:脈沖寬度算轉速
}
voidmain(void)
{
Disbuf[0]=0;//開機時,初始化為0000
Disbuf[1]=0;
Disbuf[2]=0;
Disbuf[3]=0;
init_timer0();
init_timer1();
while(1)
{
if(Flag_Fresh)
{Flag_Fresh=0;
DisplayFresh();//定時刷新數碼管顯示
}
if(Flag_clac)
{Flag_clac=0;
ClacSpeed();//計算轉速,並把結果放入數碼管緩沖區
Tcounter=0;//周期定時清零
TH1=TL1=0x00;//脈沖計數清零
}
if(Flag_Err)//超量程處理
{
//數碼管顯示字母'EEEE'
Disbuf[0]=0x9e;//開機時,初始化為0000
Disbuf[1]=0x9e;
Disbuf[2]=0x9e;
Disbuf[3]=0x9e;
while(1)
{DisplayFresh();//不再測速等待復位i
}
}
}
}
//在數碼管上顯示一個四位數
voidDisplayFresh()
{
P2|=0xF0;
LED_SEG0=0;
LED_DAT=table[Disbuf[0]];
Delay(1);
P2|=0xF0;
LED_SEG1=0;
LED_DAT=table[Disbuf[1]];
Delay(1);
P2|=0xF0;
LED_SEG2=0;
LED_DAT=table[Disbuf[2]];
Delay(1);
P2|=0xF0;
LED_SEG3=0;
LED_DAT=table[Disbuf[3]];
Delay(1);
P2|=0xF0;
}
//計算轉速,並把結果放入數碼管緩沖區
voidClacSpeed()
{
uintspeed;
uintPlusCounter;
PlusCounter=TH1*256+TL1;
speed=K*(PlusCounter/PLUS_PER)/60;//K是校準系數,如速度不準,調節K的大小
Disbuf[0]=(speed/1000)%10;
Disbuf[1]=(speed/100)%10;
Disbuf[2]=(speed/10)%10;
Disbuf[3]=speed%10;
}
//初始化定時器T0
voidinit_timer0()
{
TMOD&=0xf0;//定時10毫秒/*Timer0mode1withsoftwaregate*/
TMOD|=0x01;/*GATE0=0;C/T0#=0;M10=0;M00=1;*/
TH0=0xC0;/*initvalues*/
TL0=0x00;
ET0=1;/*enabletimer0interrupt*/
EA=1;/*enableinterrupts*/
TR0=1;/*timer0run*/
}
//延時函數
voidDelay(uintms)
{
uchari;
while(ms--)
for(i=0;i<100;i++);
}
//初始化定時器T1
voidinit_timer1()
{
TMOD&=0x0F;/*Counter1mode1withsoftwaregate*/
TMOD|=0x50;/*GATE0=0;C/T0#=1;M10=0;M00=1;*/
TH1=0x00;/*initvalues*/
TL1=0x00;
ET1=1;/*enabletimer1interrupt*/
EA=1;/*enableinterrupts*/
TR1=1;/*timer1run*/
}
❼ 求基於51單片機的自行車測速裝置,要求測出速度,加速度,里程,速度精度不低於0.2m/s,要裝在自
你是把簡單的事情復雜化了。幾十塊錢買個轉速表適當改造一下就可以了,干什麼用到單片機?
❽ 求基於51單片機的轉速測量的設計(代碼),最好C語言實現的,給些指導也行!
測速得需要外部電路啊,單個單片機不行啊,如上圖測電機轉的速度就加了編碼盤,和光電感測器測速啊。
❾ 誰能幫我寫一份基於單片機的測速和檢測障礙物程序嗎
匯編?現在幾個工程師用匯編哦
❿ 求基於51單片機的電機轉速測量的原理圖的設計
只要原理圖嗎
我做單片機設計的