ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于单片机的频率测量控制系统设计 (频率计)(电路+程序)

2019-06-25 09:51:43  阅读:308  来源: 互联网

标签:count 50000 temp uchar 单片机 电路 65536 256 频率计


 

关注【电子开发圈】微信公众号,一起学习吧!

电子DIY、Arduino、51单片机、STM32单片机、FPGA……
电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机……

点击链接,免费下载100G+电子设计学习资料!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect

 

 

频率测量方法:

  • 测频法:测试限定时间内检测脉冲的个数(1s)
  • 测周法:采样N个脉冲所使用的时间

————————————————————————————————————————————

测频法实验:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计要求:

通过测频法测出时钟发生器的频率并显示在显示屏上

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现过程:

通过DCLOCK时钟发生器产生时钟频率,如下图所示,一秒钟产生233个频率

T0接收时钟发生器产生的脉冲,使用count变量计数,定时器T1完成1s后关闭中断,并将此时的count显示出来

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

元件清单:

  • AT89C51
  • 7SEG-MPX8-CC-BLUE
  • DCLOCK(在电压探针列表中)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现代码:

#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code number[] =
{
    0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E
};
uchar code address[] =
{
    0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F
};
uint count = 0, time = 0, temp; //一定要用int类型,char类型只有8位,计数只到255
bit flag = 0;
void Delay(uchar m)
{
    while(--m);
}
int main()
{
    uchar i;
    EA = 1;
    ET0 = 1;
    ET1 = 1;
    TMOD = 0x16; //定时器1为方式1,计数器0为方式2,T0选择C/T=1,计数器方式,脉冲由外部提供
    TH0 = 0xff;
    TL0 = 0xff;
    TR0 = 1;
    TH1 = (65536 - 50000) / 256;
    TL1 = (65536 - 50000) % 256;
    TR1 = 1;
    while(1)
    {
        if (flag == 1)
        {
            temp = count;
            for (i = 0; i < 8; ++i)
            {
                P2 = address[i];
                P1 = number[temp % 10];
                temp = temp / 10;
                Delay(500);
            }
        }
    }
}
void Count0()interrupt 1
{
    ++count;
}
void Time1()interrupt 3
{
    TH1 = (65536 - 50000) / 256;
    TL1 = (65536 - 50000) % 256;
    ++time;
    if (time == 20)
    {
        EA = 0;
        flag = 1;
    }
}

 

标签:count,50000,temp,uchar,单片机,电路,65536,256,频率计
来源: https://blog.csdn.net/weixin_42625444/article/details/93473203

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有