找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机频率精确测量C程序及Proteus仿真

  [复制链接]
跳转到指定楼层
楼主
ID:53417 发表于 2013-8-22 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测定脉冲频率,附带部分Proteus仿真结果和完整C语言程序,对于初学者或着急使用的电子爱好者来说,软件硬件结合,十分方便移植。仿真结果十分精确,实际应用中可能会存在少许误差,通过相应的电路处理,可以满足使用要求。
很多场合需要用到对频率的精确测量,譬如你用霍尔传感器做测转速系统,就需要用到此模块,测量霍尔传感器输出的脉冲的频率,然后稍作运算,就可以实现转速的测量功能。本设计利用51单片机的外部中断(INT0)的捕捉功能,实现对脉冲的计数,同时配以T08位自动装入方式,实现准确计时1S,这1SINTO捕捉到的脉冲数即为频率。通过Proteus仿真,证明这种方式误差极小实例1、频率设定为5K,显示在49995000两数之间跳动
file:///C:/Users/LA/AppData/Local/Temp/ksohtml/wps_clip_image-3042.pngfile:///C:/Users/LA/AppData/Local/Temp/ksohtml/wps_clip_image-23223.png
实例2、频率设定为4321HZ,显示结果
file:///C:/Users/LA/AppData/Local/Temp/ksohtml/wps_clip_image-19640.pngfile:///C:/Users/LA/AppData/Local/Temp/ksohtml/wps_clip_image-8615.png
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint time_count,count,sum;
sbit duan=P2^6;     //74HC573LE端  U5  LED的段选端
sbit wei=P2^7;      //74HC573LE端  U4  LED的位选端
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码表
unsigned int dis[6];               
uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阴型数码管控制端  
void initial(void);
void delay(uint z);
void display();
main()
{
initial();
while(1)
{
        display();
}
}
void initial()
{
count=0;
time_count=0;
    sum=0;
TMOD=0x02; //定时器0工作方式2,8位自动装入计数
TH0=0x06;
TL0=0x06; //定时器赋初值 计时0.25ms1000次为0.25s,4000次为一秒
IT0=1;//  外部中断0工作方式(下降沿有效)
EA=1;
ET0=1;
EX0=1;
TR0=1; //开中断
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
void exter0() interrupt 0
{
count++;
}
void timer0() interrupt 1
{
time_count++;
if(time_count==4000)
{
sum=count;
time_count=0;
count=0;
}
}
void display()
{
  uchar i;
    dis[0]=sum/10000; //获取计数值的万位
  dis[5]=sum%10000;
  dis[1]=dis[5]/1000;     // 获取计数值的千位
  dis[5]=dis[5]%1000;
  dis[2]=dis[5]/100;    // 获取计数值的百位
  dis[5]=dis[5]%100;
  dis[3]=dis[5]/10;    // 获取计数值的十位
  dis[4]=dis[5]%10;    // 获取计数值的个位
  for(i=0;i<5;i++)  //依次显示万、千、百、十、个位,动态显示
   {
     // P0=0xff;
   P0=con[ i];
   wei=1;
   wei=0;
   P0=table[dis];
   duan=1;
   duan=0;
   delay(1);
   P0=0;
   duan=1;
   duan=0;
    }  
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-8-23 08:12 | 只看该作者
如果每秒钟是9.8个脉冲,这样测量会得出什么结果?
回复

使用道具 举报

板凳
ID:57620 发表于 2013-12-6 19:51 | 只看该作者
P0=table[dis];这条出错了
回复

使用道具 举报

地板
ID:58415 发表于 2013-12-31 20:14 | 只看该作者
额~~~~~~
回复

使用道具 举报

5#
ID:61326 发表于 2014-5-4 08:53 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:61343 发表于 2014-5-14 17:52 | 只看该作者
好,谢谢分享
回复

使用道具 举报

7#
ID:48413 发表于 2014-7-15 21:08 | 只看该作者
回复

使用道具 举报

8#
ID:66181 发表于 2014-9-15 11:31 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
ID:66338 发表于 2014-9-18 16:27 | 只看该作者
好,谢谢分享
回复

使用道具 举报

10#
ID:66464 发表于 2014-9-21 21:11 | 只看该作者
学习了
回复

使用道具 举报

11#
ID:51348 发表于 2014-9-22 01:57 | 只看该作者
感谢楼主 .... 学习了
回复

使用道具 举报

12#
ID:74826 发表于 2015-4-29 15:40 | 只看该作者
什么意思?、、??
回复

使用道具 举报

13#
ID:47652 发表于 2015-5-4 16:16 | 只看该作者
频率测量学习资料
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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