❶ 基于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单片机的电机转速测量的原理图的设计
只要原理图吗
我做单片机设计的