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 }

时间: 2024-10-23 20:09:06

51单片机实现频率测量控制实验的相关文章

51单片机模拟PWM调制控制实验

-------------------------------------------- PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 由于AT89系列单片机没有PWM控制器,所以

51单片机实现四相步进电机控制实例

-------------------------------------------- 工作原理见书<51单片机应用及原理--基于KeilC和Proteus,陈海宴>P178-180 -------------------------------------------- 步进电机控制应用实例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

51单片机ALE引脚的控制(摘录)

ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节. 在FLASH编程期间,此引脚用于输入编程脉冲. 在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的.然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲.如想禁止ALE的输出可在SFR8EH地址上置0.此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用.另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无

单片机与控制实验(4)——步进电机原理及应用

一.实验目的和要求 了解步进电机的工作原理,学习用单片机的步进电机控制系统的硬件设计方法,掌握定时器和中断系统的应用,熟悉单片机应用系统的设计与调试方法. 二.实验设备 单片机测控实验系统 步进电机控制实验模块 Keil开发环境 STC-ISP程序下载工具 三.实验内容 编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上. 步进电机的转速分为两档,当按下S1开关时,加速旋转,速度从10转/分加速到60转/分.当松开开关时,减速旋转,速度恢复为10转/分.当

51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)

本方案采用89S52做为主控芯片,LC72131+LA1845N做为收音模块,支持按键控制,红外线遥控控制,也可通过串口上位机控制,可以通过计算机并口更新单片机软件程序. 音量用两块DS1804控制,频率信息用一块1602液晶显示. 单面板,飞线很多,呵呵. 硬件方案.rar(Protel99) PC端控制软件.rar(VC++7.1,即Visual Stdio .Net 2003) 本方案的单片机软件使用C语言编写(Keil uVision3),LC72131芯片的驱动稍微麻烦,他使用SPI总

单片机与控制实验(2)——LED点阵显示屏

一.实验目的和要求 了解LED点阵显示的基本原理和实现方法.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法. 二.实验设备 单片机测控实验系统 LED点阵显示器实验模块 Keil开发环境 STC-ISP程序下载工具 三.实验内容 了解16*16点阵电路的原理.编写汇编语言程序,编写一行汉字字符(至少三个字)的显示程序,并且能够从左到右(或从右到左)循环显示. 四.实验步骤 1. 掌握点阵式LED显示屏的控制方法:2. 使用MCS-51汇编语言,使用LED点阵显示器显示出正确的汉字字符及动态

[51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯

>_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013.html),这里俺把按键发命令给去掉,然后加入一个串口通信的功能,PC通过串口给发送端发送命令,然后发送端通过无线将命令发给接收端来实现控制,这里接收端和上一个例程中的一样,只是在发送端的代码里去除了按键控制,变成了串口控制. >_<!发送端电路: >_<!接收电路图: >_&l

51单片机led灯控制

关于内容理解: 先读懂51单片机的实验原理图,然后再着手编程. 由图可知 1,led灯接的是单片机的P0口,意味着我们只能用P0口来编程. 2,led灯是共阳极,当给低电平时led灯才会亮,(单片机灌电流能力较强,输出电流较弱,所以一般用共阳极) 3,led所在的P0口是读io口,故使用时用一个变量来做中介 实验效果 实现跑马灯效果,P0^0->P0^7口依次亮且每次只亮一个灯,然后P0^7->P0^0. 实验代码 #include <reg52.h> //此文件中定义了51的一些

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现. I/O 端口具备如下重要特性:    ?? 21 个数字I/O 引脚 ?? 可以配置为通用I/O 或外部设备I/O ?? 输入口具备上拉或下拉能力 ?? 具有外部中断能力. 21 个I/O 引脚都可以用作于外部中断源输入口.因此如果需要外部设备可以产生中断.外部中断