搜索
bottom↓
回复: 41

51单片机做的速度计,超简单

[复制链接]

出0入0汤圆

发表于 2011-1-2 10:34:00 | 显示全部楼层 |阅读模式
小弟不才,第一次发表主题,欢迎大家拍砖指正,这是用51单片机做的速度计,不要用于商业用途哦;
程序如下;

//速度计,外中断1;定时器0,
//8位计数模式,11.0592,每一秒钟计算一次

#include <reg52.h>     //包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#define ulong unsigned long
void delay(uint z);

uchar stor[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管显示
void xuanshi( );
int temp,n,tt;

sbit P10=P1^0;
sbit P11=P1^1;

void main(void)        // 主程序
{
        TMOD=0x02;//定时器0方式2
        TH0=0x47;//赋T0的预置值,溢出1次是0.2毫秒钟
        TL0=0x47;
        ET0=1; //允许定时器0中断  
        TR0=1; //启动定时器0

        IT1=1; //外中断1 ,负跳变产生中断
        EX1=1;        //允许外中断

        EA=1;     //打开总中断

        while(1)  //主程序循环
        {               


   xuanshi();


                   }        }


void xuanshi()
{  
          
         P0=stor[temp/1000];
         P3=0xef;
         delay(1);
         P0=stor[temp%1000/100];
         P3=0xdf;
         delay(1);
     P0=stor[temp%100/10];
         P3=0xbf;
         delay(1);
     P0=stor[temp%10];
          P3=0x7f;
     delay(1);  


}

void int2() interrupt 2  //外中断1计数
{

  n++;       

}



void timer0() interrupt 1  //定时器0中断处理,中断5000次是一秒钟
{


        tt++;
        if(tt==5000)
        {tt=0;temp=n;n=0;}

           }


void delay(unsigned int i)      //延时程序,i是形式参数,i为1时 延时约1MS
{
unsigned int j;
for(;i>0;i--)             //变量i由实际参数传入一个值,因此i不能赋初值
for(j=0;j<125;j++)        
{;}
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-1-2 10:36:02 | 显示全部楼层
没人顶,自己顶一下吧~~

出0入0汤圆

发表于 2011-1-2 11:07:16 | 显示全部楼层
偶也帮你顶一下

出0入0汤圆

发表于 2011-1-2 11:16:25 | 显示全部楼层
帮你顶顶

出0入0汤圆

发表于 2011-1-2 11:40:06 | 显示全部楼层
帮你顶顶

出0入0汤圆

发表于 2011-1-2 11:50:57 | 显示全部楼层
速度计?作什么用的.什么方案.不说明白别人怎么看

出0入0汤圆

发表于 2011-1-2 12:09:12 | 显示全部楼层
写得还可以,但是你最好把程序的说明搞得详细一点,比如函数的用途。不过还是要顶一下你的,敢把自己写的东西拿出来分享,其实就很不错了。

出0入0汤圆

发表于 2011-1-2 12:17:08 | 显示全部楼层
商业的不是这样用的
中断服务中没有任何的消除抖动的方法,干扰是会有的,跳变的抖动也会有的,如此出来的结果不是乱了套了?

出0入0汤圆

 楼主| 发表于 2011-1-2 13:33:10 | 显示全部楼层
回复【5楼】deiwgah
-----------------------------------------------------------------------

其实这还不算是速度计,只能算是计数率,要做成速度计的还得将得到的计数率的值乘以圆周径,现在我把程序再修改一下,见8楼

出0入0汤圆

 楼主| 发表于 2011-1-2 13:38:48 | 显示全部楼层
//速度计,外中断1;定时器0,
//8位计数模式,11.0592,每一秒钟计算一次

#include <reg52.h>     //包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#define ulong unsigned long
#define pi 3.1415926  //增加部分π的值
void delay(uint z);

uchar stor[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管显示
void xuanshi( );
int temp,n,tt;
int R ;//增加部分,半径值

sbit P10=P1^0;
sbit P11=P1^1;

void main(void) // 主程序
{
TMOD=0x02;//定时器0方式2
TH0=0x47;//赋T0的预置值,溢出1次是0.2毫秒钟
TL0=0x47;
ET0=1; //允许定时器0中断   
TR0=1; //启动定时器0

IT1=1; //外中断1 ,负跳变产生中断
EX1=1; //允许外中断

EA=1;     //打开总中断

while(1)  //主程序循环
{


   xuanshi();


            } }


void xuanshi()
{   
   
P0=stor[temp/1000];
P3=0xef;
delay(1);
P0=stor[temp%1000/100];
P3=0xdf;
delay(1);
     P0=stor[temp%100/10];
P3=0xbf;
delay(1);
     P0=stor[temp%10];
  P3=0x7f;
     delay(1);   


}

void int2() interrupt 2  //外中断1计数
{

  n++;

}



void timer0() interrupt 1  //定时器0中断处理,中断5000次是一秒钟
{


tt++;
if(tt==5000)
{tt=0;temp=(n-1)*2*pi*R;n=0;} //已修改n-1的原因是由于霍尔传感器测量两次相当于转了一圈2*pi*R是轮周径

    }


void delay(unsigned int i)      //延时程序,i是形式参数,i为1时 延时约1MS
{
unsigned int j;
for(;i>0;i--)             //变量i由实际参数传入一个值,因此i不能赋初值
for(j=0;j<125;j++)         
{;}
}

出0入0汤圆

 楼主| 发表于 2011-1-2 13:42:12 | 显示全部楼层
回复【7楼】xiaobendan 仲跻东
-----------------------------------------------------------------------

这是DIY用于自行车等测速,负跳变中断,用霍尔传感器,我做过实验,基本没有抖动,用的霍尔传感器是从散热风扇(直流无刷电机,上面要有位置传感器)上面拆下来的

出0入0汤圆

发表于 2011-1-2 15:39:06 | 显示全部楼层
楼主,我想把你的程序用于商业用途,要收多少版权费啊?呵呵

出0入0汤圆

发表于 2011-1-2 15:47:06 | 显示全部楼层
这个坛子里已经有比较成熟的方案了。我发那个电动车板的,只要轮胎转动超过一个磁极就能知道速度了。

出0入0汤圆

发表于 2011-1-2 16:14:26 | 显示全部楼层
你这程序只需要看一眼就知道根本没有实用的价值……

出0入0汤圆

 楼主| 发表于 2011-1-2 16:58:06 | 显示全部楼层
回复【11楼】pxlpxlpxl
-----------------------------------------------------------------------

悲剧了,只是想开个玩笑而已

出0入0汤圆

 楼主| 发表于 2011-1-2 16:59:38 | 显示全部楼层
回复【13楼】XA144F
-----------------------------------------------------------------------

眼高,佩服,小弟是学机械的,还有很多需要学习的地方,估计和大家交流还太有问题,那就请各位多多指教吧。

出0入0汤圆

 楼主| 发表于 2011-1-2 17:00:14 | 显示全部楼层
回复【12楼】oufuqiang 欧福强
-----------------------------------------------------------------------

在哪里呢,发个网址 和大家分享一下呢

出0入0汤圆

发表于 2011-1-2 17:25:10 | 显示全部楼层
另一个网友做了个LCD1602版自行车的也不错。标题你可以试试搜索“自行车”。
我的贴在这
http://www.ourdev.cn/bbs/bbs_list.jsp?search_text=oufuqiang&search_mode=3&bbs_id=9999

出0入0汤圆

发表于 2011-1-4 00:49:41 | 显示全部楼层
这个有意思

出0入0汤圆

发表于 2011-1-4 08:09:54 | 显示全部楼层
发现6楼不见了??

出0入0汤圆

发表于 2011-1-4 09:57:51 | 显示全部楼层
看不懂啥!

出0入0汤圆

 楼主| 发表于 2011-1-4 16:22:30 | 显示全部楼层
回复【19楼】xiaobendan 仲跻东
-----------------------------------------------------------------------

真不见了,不是我删的。

出0入25汤圆

发表于 2011-1-4 17:15:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-5 09:24:37 | 显示全部楼层
这速度计和频率计有什么差别呢?哈哈。

每年到做毕业设计或课程设计的时候,我的QQ都会收到不少求助,都是做频率计的,我被弄烦了,就用半小时写个程序放在那里,来一个送一个,然后打进黑名单。

出0入0汤圆

 楼主| 发表于 2011-1-5 10:09:55 | 显示全部楼层
回复【24楼】XA144F
-----------------------------------------------------------------------

频率乘以周长就是速度(运动的滚动体,圆周速度如果不计微量的滑动摩擦的话就是运动速度了)了,这样理解,v=r*ω,ω=θ/t,T=1/f,所以v=r*θ*f,应该是这样的,呵呵,系统时间是一秒,还有楼上的qq号码是多少,方便说下,希望能指导下。。。。俺的邮箱375870540qq@.com

出0入0汤圆

发表于 2011-1-5 13:25:21 | 显示全部楼层
回复【24楼】XA144F
-----------------------------------------------------------------------

哈哈

出0入0汤圆

发表于 2011-1-5 14:33:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-6 20:27:24 | 显示全部楼层
怎么感觉是一个计时器呢

出0入0汤圆

发表于 2011-1-8 13:10:52 | 显示全部楼层
粗略看了下程序,大致是对的。你这是通过计数的方式来计算转速。

出0入0汤圆

发表于 2014-4-17 14:58:48 | 显示全部楼层
LZ这个只是一秒内的脉冲个数吧

出0入0汤圆

发表于 2014-4-19 15:41:42 | 显示全部楼层
先支持一下 再慢慢看

出0入0汤圆

发表于 2014-4-20 04:00:50 来自手机 | 显示全部楼层
虽然程序还有待改善,还是要支持一下!

出0入0汤圆

发表于 2014-4-20 10:58:23 | 显示全部楼层
这样的程序,学了1,2个月之后单片机应该都会写了吧,不过还是支持下!!

出0入0汤圆

发表于 2014-4-20 20:11:06 | 显示全部楼层
lsx007 发表于 2014-4-20 10:58
这样的程序,学了1,2个月之后单片机应该都会写了吧,不过还是支持下!! ...

我把楼主的程序用于学习用途了!!!

出0入0汤圆

发表于 2014-4-20 22:37:43 | 显示全部楼层
顶啊,,,,,,,,

出0入0汤圆

发表于 2014-4-23 13:19:06 | 显示全部楼层
顶顶更健康

出0入0汤圆

发表于 2014-4-25 08:14:43 | 显示全部楼层
小顶一下

出0入0汤圆

发表于 2014-4-25 21:11:06 | 显示全部楼层
看得不是很明白~

出0入0汤圆

发表于 2014-4-25 22:08:10 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2014-4-27 20:57:00 | 显示全部楼层
路过路过了  顺便看看

出0入0汤圆

发表于 2014-5-6 12:43:25 | 显示全部楼层
呵呵呵呵呵呵
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表