zoukankan      html  css  js  c++  java
  • 51单片机 | 频率测量控制实现

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

    频率测量方法:

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

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

    测频法实验:

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

    设计要求:

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

     

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

    实现过程:

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

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

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

    元件清单:

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

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

    实现代码:

     1 #include <reg52.h>
     2 typedef unsigned int uint;
     3 typedef unsigned char uchar;
     4 uchar code number[] =
     5 {
     6     0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E
     7 };
     8 uchar code address[] =
     9 {
    10     0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F
    11 };
    12 uint count = 0, time = 0, temp; //一定要用int类型,char类型只有8位,计数只到255
    13 bit flag = 0;
    14 void Delay(uchar m)
    15 {
    16     while(--m);
    17 }
    18 int main()
    19 {
    20     uchar i;
    21     EA = 1;
    22     ET0 = 1;
    23     ET1 = 1;
    24     TMOD = 0x16; //定时器1为方式1,计数器0为方式2,T0选择C/T=1,计数器方式,脉冲由外部提供
    25     TH0 = 0xff;
    26     TL0 = 0xff;
    27     TR0 = 1;
    28     TH1 = (65536 - 50000) / 256;
    29     TL1 = (65536 - 50000) % 256;
    30     TR1 = 1;
    31     while(1)
    32     {
    33         if (flag == 1)
    34         {
    35             temp = count;
    36             for (i = 0; i < 8; ++i)
    37             {
    38                 P2 = address[i];
    39                 P1 = number[temp % 10];
    40                 temp = temp / 10;
    41                 Delay(500);
    42             }
    43         }
    44     }
    45 }
    46 void Count0()interrupt 1
    47 {
    48     ++count;
    49 }
    50 void Time1()interrupt 3
    51 {
    52     TH1 = (65536 - 50000) / 256;
    53     TL1 = (65536 - 50000) % 256;
    54     ++time;
    55     if (time == 20)
    56     {
    57         EA = 0;
    58         flag = 1;
    59     }
    60 }

  • 相关阅读:
    Node借住N进行升级和降级
    Token bucket
    plsql期末复习
    ssl证书参考 certbot
    浙大保研2019年上机题 7-4 Index of Popularity (30分)
    浙大保研2019年上机题 7-3 Is It An AVL Tree (25分)
    浙大保研2019年上机题 7-2 Zigzag Sequence (25分)
    浙大保研2019年上机题 7-1 Happy Numbers (20分)
    写了个shell脚本(刚装完linux可以执行一下)
    网络图指标的计算方法(软件项目管理)
  • 原文地址:https://www.cnblogs.com/hughdong/p/6900659.html
Copyright © 2011-2022 走看看