• 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 }

  • 相关阅读:
    六:Vue之父子组件间的三种通信方式
    五:Vue之ElementUI 表格Table与分页Pagination组件化
    四:Vue之VUEX状态管理
    三:Vue之混入(mixin)与全局混入
    二:Vue之ElementUI Form表单校验
    一:Vue之开发环境搭建
    变了,说不出来的感觉。
    20180320作业2:进行代码复审训练
    20180320作业1:源代码管理工具调查
    15软工课后作业02-15100120
  • 原文地址:https://www.cnblogs.com/hughdong/p/6900659.html
Copyright © 2020-2023  润新知