找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12017|回复: 19
打印 上一主题 下一主题
收起左侧

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)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:146834 发表于 2018-1-2 23:44 | 只看该作者
好。是显示每秒的输入信号。
回复

使用道具 举报

板凳
ID:146834 发表于 2018-1-6 21:00 | 只看该作者
能转换显示1分钟的速度和每秒的速度会更好
回复

使用道具 举报

地板
ID:146834 发表于 2018-1-12 12:39 | 只看该作者
实物来了,

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

IMG_20180112_123257.jpg

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

IMG_20180112_123315.jpg

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

IMG_20180112_123327.jpg
回复

使用道具 举报

5#
ID:308395 发表于 2018-4-27 11:07 | 只看该作者
怎么在仿真中,调节频率,显示速度的变化?
回复

使用道具 举报

6#
ID:444283 发表于 2018-12-11 21:17 | 只看该作者
问一下这个要把转速转换为速度怎么弄啊?
把n的数值改了不对C:\Users\Administrator\Desktop\QQ图片20181211211100   
然后将speed*一定的数值还是不行C:\Users\Administrator\Desktop\QQ图片20181211211109  
想问一下怎么改吗
回复

使用道具 举报

7#
ID:444283 发表于 2018-12-11 21:18 | 只看该作者
宫商角徵羽smile 发表于 2018-4-27 11:07
怎么在仿真中,调节频率,显示速度的变化?

把下面的时钟发生器换成函数发生器就好了
回复

使用道具 举报

8#
ID:485625 发表于 2019-3-6 15:54 | 只看该作者
请问一下这是51系统和显示电路的仿真电路图吗 是不是加上一个转速测速电路输入到51里就是一个完整的系统了呢
回复

使用道具 举报

9#
ID:404514 发表于 2019-3-11 21:38 | 只看该作者
很好的资源,谢谢楼主分享
回复

使用道具 举报

10#
ID:451559 发表于 2019-3-25 22:23 | 只看该作者
怎么才能学好这个
回复

使用道具 举报

11#
ID:451559 发表于 2019-3-26 10:33 | 只看该作者
下来好好学习一下
回复

使用道具 举报

12#
ID:529864 发表于 2019-5-20 14:14 | 只看该作者
文件损坏下载后显示文件破损打不开了
回复

使用道具 举报

13#
ID:328014 发表于 2019-5-20 16:56 | 只看该作者
liu147 发表于 2019-5-20 14:14
文件损坏下载后显示文件破损打不开了

我刚特意下载了看了一下 可以打开啊,我的的winrar  没有提示错误
回复

使用道具 举报

14#
ID:539196 发表于 2019-5-20 22:24 | 只看该作者
数码管的刷新如何配合频率检测
回复

使用道具 举报

15#
ID:609574 发表于 2019-9-17 14:08 | 只看该作者
这个只能测量一次,如何进行第二次测量,就是假如说转速变了,怎么操作才能实时显示转速
回复

使用道具 举报

16#
ID:658344 发表于 2019-12-8 17:16 | 只看该作者
很有用
回复

使用道具 举报

17#
ID:658344 发表于 2019-12-9 16:13 | 只看该作者
模拟信号要怎么测啊
回复

使用道具 举报

18#
ID:675256 发表于 2019-12-27 11:13 来自手机 | 只看该作者
急不可待 发表于 2018-1-12 12:39
实物来了,

必须要关闭定时器才进行速度的显示吗
回复

使用道具 举报

19#
ID:783208 发表于 2020-6-19 09:26 来自手机 | 只看该作者
真不错
回复

使用道具 举报

20#
ID:928385 发表于 2021-6-19 21:04 来自手机 | 只看该作者
请问,我把显示的改成共阴管了为什么显示的数据不对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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