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 }

  • 相关阅读:
    TextView 高亮
    Android 学习 第一章(环境搭建)
    从assets res 中读文件
    动态设置imageview 宽高
    android 算定义view 打包 jar(一次开发多次使用)
    Activity 跳转
    Android手机在开发调试时logcat不显示输出信息的解决办法
    弹出对话 AlertDialog 有按钮
    让划动 listview时 没有黑色背景
    Activity Service 数据相互操作
  • 原文地址:https://www.cnblogs.com/hughdong/p/6900659.html
Copyright © 2011-2022 走看看