标题: 51单片机计数测速(外部脉冲频率)proteus仿真加源码 [打印本页]

作者: duanyu    时间: 2017-12-19 15:10
标题: 51单片机计数测速(外部脉冲频率)proteus仿真加源码
转速测量,在仿真中等价于测量外部脉冲频率
修改输入脉冲的频率,在数码管上可实时显示当前频率!


单片机计数测速仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:
  1. /*********************************************************************
  2. 功能:霍尔传感器测速,霍尔传感器的信号输出脚接T1(P3.5)引脚
  3. 测量范围;假设转盘只有一个磁钢,转速低于10r/S则显示0,高于655360r/s则计数溢出(一般应用不会超出此限)

  4. *******************************************************************/
  5. #include <reg51.h>
  6. #define N 1//转盘上所安装的磁钢个数
  7. sbit DLed1=P2^0;//定义第一位数码管"位选"控制线的别名
  8. sbit DLed2=P2^1;//定义第二位数码管"位选"控制线的别名
  9. sbit DLed3=P2^2;
  10. sbit DLed4=P2^3;

  11. unsigned int speed=0;//最后的转速值
  12. unsigned int count=0;//在指定时间内记到的外部脉冲数
  13. unsigned char k=0;
  14. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  15. void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4);//子函数前向声明

  16. /*********************************
  17. 函数名称:void delay1ms(unsigned int k)
  18. 功能:延时子函数
  19. 入口参数:延时时长
  20. 返回值:无
  21. **********************************/
  22. void delay1ms(unsigned int k)
  23. {
  24.   unsigned char n,m;
  25.   for(m=0;m<k;m++)
  26.   {for(n=0;n<115;n++);}
  27. }
  28. //===================主函数
  29. void main()
  30. {
  31. unsigned char n;
  32. //EA=0;
  33. TMOD=0x51;//0101 0001,T1纯软件启动,计数模式,工作方式1;T0纯软件启动,定时模式,工作方式1
  34. TH0=0x3c;//12M晶振,定时50ms
  35. TL0=0xb0;

  36. ET0=1;//开启定时0中断
  37. EA=1;//开启总中断
  38. TR0=1;//同时启动定时与计数
  39. TR1=1;
  40.    while(1)
  41.         {          
  42.         speed=count/N;//结果为:x转/s,注意防止其越界       
  43.                 for(n=20;n>0;n--)//稳定显示一阵
  44.                 {
  45.                    disp(speed/1000,speed%1000/100,speed%100/10,speed%10);
  46.                                   
  47.                        
  48.                 }
  49.                 TR0=1;//再次启动定时和计数功能,为下一次的测量作准备
  50.                 TR1=1;
  51.         }




  52. }
  53. /*********************************
  54. 函数名称:
  55. 功能:T0中断处理函数
  56. 说明:定时时间到,则关闭定时器,取出计数值
  57. 入口参数:
  58. 返回值:
  59. **********************************/
  60. void int0_fun() interrupt 1
  61. {
  62. k++;
  63. TH0=0x3c;//重载定时器T0初值
  64. TL0=0xb0;
  65. if(k>=20)//100ms的定时时间到
  66. {
  67.         TR0=0;
  68.         TR1=0;
  69.         count=TH1*256+TL1;
  70.         TH1=0x00;//清除计数值
  71.         TL1=0x00;
  72.         k=0;  //清除标志变量
  73. }
  74. }

  75. /********************************
  76. 功能:显示函数
  77. 四位数码管的显示函数
  78. 段选:P1
  79. 位选:P20-P23
  80. 注意:采用的共阳数码管
  81. ***************************/
  82. void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)
  83. {
  84.     DLed1=1;DLed2=0;DLed3=0;DLed4=0;//送位码,只让第一位数码管显示
  85.         P1=tab[x1];//送段码
  86.         delay1ms(10);//延时
  87.         P1=0xff;//关闭
  88.        
  89.         //----扫描显示第二位数码管------
  90.         DLed1=0;DLed2=1;DLed3=0;DLed4=0;
  91.         P1=tab[x2];
  92.         delay1ms(10);
  93.     P1=0xff;

  94.         //----扫描显示第三位数码管------
  95. ……………………

  96. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
计数测速.rar (57.92 KB, 下载次数: 397)



作者: 急不可待    时间: 2018-1-2 23:44
好。是显示每秒的输入信号。
作者: 急不可待    时间: 2018-1-6 21:00
能转换显示1分钟的速度和每秒的速度会更好
作者: 急不可待    时间: 2018-1-12 12:39
实物来了,

IMG_20180112_123257.jpg (695.07 KB, 下载次数: 74)

IMG_20180112_123257.jpg

IMG_20180112_123315.jpg (682.2 KB, 下载次数: 63)

IMG_20180112_123315.jpg

IMG_20180112_123327.jpg (835.95 KB, 下载次数: 77)

IMG_20180112_123327.jpg

作者: 宫商角徵羽smile    时间: 2018-4-27 11:07
怎么在仿真中,调节频率,显示速度的变化?

作者: 丁荣全001    时间: 2018-12-11 21:17
问一下这个要把转速转换为速度怎么弄啊?
把n的数值改了不对C:\Users\Administrator\Desktop\QQ图片20181211211100   
然后将speed*一定的数值还是不行C:\Users\Administrator\Desktop\QQ图片20181211211109  
想问一下怎么改吗
作者: 丁荣全001    时间: 2018-12-11 21:18
宫商角徵羽smile 发表于 2018-4-27 11:07
怎么在仿真中,调节频率,显示速度的变化?

把下面的时钟发生器换成函数发生器就好了
作者: 甲烷君    时间: 2019-3-6 15:54
请问一下这是51系统和显示电路的仿真电路图吗 是不是加上一个转速测速电路输入到51里就是一个完整的系统了呢
作者: pmhker    时间: 2019-3-11 21:38
很好的资源,谢谢楼主分享
作者: xixdpj-2    时间: 2019-3-25 22:23
怎么才能学好这个
作者: xixdpj-2    时间: 2019-3-26 10:33
下来好好学习一下
作者: liu147    时间: 2019-5-20 14:14
文件损坏下载后显示文件破损打不开了
作者: 51hei团团    时间: 2019-5-20 16:56
liu147 发表于 2019-5-20 14:14
文件损坏下载后显示文件破损打不开了

我刚特意下载了看了一下 可以打开啊,我的的winrar  没有提示错误
作者: ADASDASDASDG    时间: 2019-5-20 22:24
数码管的刷新如何配合频率检测
作者: lj520    时间: 2019-9-17 14:08
这个只能测量一次,如何进行第二次测量,就是假如说转速变了,怎么操作才能实时显示转速
作者: 傅里叶qqq    时间: 2019-12-8 17:16
很有用
作者: 傅里叶qqq    时间: 2019-12-9 16:13
模拟信号要怎么测啊

作者: jhyjhy123    时间: 2019-12-27 11:13
急不可待 发表于 2018-1-12 12:39
实物来了,

必须要关闭定时器才进行速度的显示吗
作者: 2531572670    时间: 2020-6-19 09:26
真不错
作者: HLYL    时间: 2021-6-19 21:04
请问,我把显示的改成共阴管了为什么显示的数据不对




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1