基于单片机的频率测量控制系统设计

最新更新时间:2022-05-26来源: eefocus关键字:单片机  频率测量  控制系统 手机看文章 扫描二维码
随时随地手机看文章

频率测量方法:

  • 测频法:测试限定时间内检测脉冲的个数(1s)

  • 测周法:采样N个脉冲所使用的时间

测频法实验:

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

设计要求:

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

 

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

实现过程:

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

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

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

元件清单:

  • AT89C51

  • 7SEG-MPX8-CC-BLUE

  • DCLOCK(在电压探针列表中)

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

实现代码:


#include

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;

    }

}


关键字:单片机  频率测量  控制系统 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic567113.html

上一篇:基于单片机的D/A三角波发生器设计
下一篇:基于单片机的直流电机转速控制设计

推荐阅读

STC8单片机OLED通过SPI硬件中断方式驱动(上)
说明一点直接就是怎么用没有重点讲SPI原理,很多博主已经把原理讲的很好了这里就不提了,后面会补上。第一点为啥要用中断方式进行,而不用轮询?目前很多博主都是用轮询的方式进行SPI通信,但是这样的效率比较低,浪费单片机的算力,再加上STC8A8K64S4A12没有硬件DMA,所以选择中断方式。第一我们先看说明书上咋说的驱动一块OLED那肯定是单主单从方式,然后再看看应该配置的寄存器根据说明书SPSTAT寄存器那就很好配置了,再void SPI_Init()初始化函数中就直接全部写0,那就是SPSTAT = 0X00;再看看第二个应该配置的看到这里有些刚刚学SPI肯定一脸懵逼,我们接着看说明书这不就一目了然了,单片机肯定是主机模式了这样就
发表于 2022-08-05
STC8<font color='red'>单片机</font>OLED通过SPI硬件中断方式驱动(上)
STC8单片机OLED通过SPI硬件中断方式驱动(中)
前面的已经说了如何去初始化SPI了,接下来说说发送函数,先上代码void OLED_Writ_Bus(uint8_t _data){ Delay20us(); if (SPI_Busy == 0) { SPI_Busy = 1; OLED_CS_Clr(); SPDAT = _data; }}SPI_Busy是一个状态机,判断SPI是否在忙碌,在OLED的例程中已经是软件模拟SPI,模拟的时钟跟不上硬件的速度,所以我们只需要稍加就该,把软件的模拟更换成硬件驱动就完事了,看看两者的速度差,软件模拟在400k左右,硬件驱动(中断)能达到3M左右,轮询在1M左右,拉低CS(SS)管脚可选中从机,这里加了一个小小的延时,不然OLED显示乱码
发表于 2022-08-05
STC8<font color='red'>单片机</font>OLED通过SPI硬件中断方式驱动(中)
STC8单片机OLED通过SPI硬件中断方式驱动(下)
到这里基本就写完了,我们来看看修改例程中的代码,先看看中景园给的void OLED_WR_Byte(uint8_t dat, uint8_t cmd){ register uint8_t i = 0; OLED_DC = cmd; for(;i<8;i++) { OLED_SCL_Clr(); if(dat&0x80) { OLED_SDA_Set(); } else { OLED_SDA_Clr(); } OLED_SCL_Set(); dat<<=1; } OLED_CS_Set(); OLED_DC_Set();}改为硬件驱动#ifdef hardwarevoid OLED_WR
发表于 2022-08-05
1.STC15W408AS单片机硬件资源
一、简介STC15W401AS系列单片机是STC生产机器周期(1T)的单片机,是宽电压/高可靠/低功耗/超强抗干扰的新一代8051单片机,采用STC第九代加密技术,无法解密, 代码完全兼容传统8051,但速度快8-12倍。 内部集成 R/C时钟(±0.3%),±1%温飘(-40℃~+85℃),常温下温飘±0.6%(-20℃~+65℃),ISP编程时5MHz~35MHz宽范围可设置,可彻底省掉外部昂贵的晶振和外部复位电路(内部已集成高可靠复位电路,ISP编程时16级复位门槛电压可选)。3路CCP/PWM/PCA,8路高速10位A/D转换(30万次/秒),1组超高速异步串行通信口( ,可在3组管脚之间进行切换,分时复用可作3组串口使用)
发表于 2022-08-05
1.STC15W408AS<font color='red'>单片机</font>硬件资源
2.STC15W408AS单片机时钟
STC15W408AS单片机有两个时钟源:内部高精度R/C时钟和外部时钟(外部输入时钟或外部晶体振荡器产生的时钟)。内部高精度R/C时钟(±0.3%),±1%温漂,常温下温漂±0.6%(-20℃~+65℃)。一、内部时钟配置内部时钟配置是通过STC提供的下载软件stc-isp实现的。用户可根据自己的需要选择。 二、主时钟分频和分频寄存器如果希望降低系统功耗,可对时钟进行分频。利用时钟分频控制寄存器CLK_DIV(PCON2)可进行时钟分频,从而使单片机在较低频率下工作。时钟分频寄存器CLK_DIV (PCON2)各位的定义如下:相关控制位说明: 三、时钟结构 主时钟既可以是内部R/C时钟,也可以是外部输入的时钟或外部晶
发表于 2022-08-05
2.STC15W408AS<font color='red'>单片机</font>时钟
不止自研 CPU,龙芯中科进军汽车芯片:首款 MCU 已流片
8 月 4 日消息,龙芯中科作为国内为数不多自研 CPU 的公司,此前已推出龙芯1 号系列、龙芯2 号系列和龙芯 3 号系列产品。如今,龙芯中科将进军汽车芯片。据《科创板日报》今日报道,龙芯中科近期在接受机构调研时表示,在汽车芯片方面,龙芯中科主要是做了控制用的高可靠 MCU芯片,第一款已经流片。其中 MCU 芯片是指微控制器芯片,又称单片机。该芯片是把 CPU 的频率与规格做适当缩减,并将内存、USB 等周边接口和驱动电路整合在单一芯片上的芯片级计算机。值得一提的是,有业内人士表示,汽车的电气化正在推动电子产品在汽车中的使用,对关键汽车 MCU 的需求持续火爆,预计车用 MCU 到 2023 年都将供应紧张。此外,IHS 数据表明
发表于 2022-08-04
不止自研 CPU,龙芯中科进军汽车芯片:首款 <font color='red'>MCU</font> 已流片

推荐帖子

请问如何用STM8S-Discovery开发板 做到通过USB和电脑实时通信?
请问如何用STM8S-Discovery开发板做到通过USB和电脑实时通信。 目前需要在电脑上用c++编个图形界面,通过usb实时控制单片机,再让单片机控制一个马达的开和关。 不知道有没有什么开发样例或者什么库函数之类的能参考的?请问如何用STM8S-Discovery开发板做到通过USB和电脑实时通信?
snewboy stm32/stm8
WEB2.0时代,BLOG的价值在哪里?
WEB2.0时代,BLOG的价值在哪里?[img]htV2006年初火爆一时的BLOG风潮到了这个炎炎夏日似乎清凉了一些,BLOG人们沉静下来开始思考,怎样求新求变,怎样跟得上WEB2.0的时代,怎么样在BLOG里寻找商机?寻找价值?做为了一个BLOGGER,我已经经营两年的BLOG,访客到是不少,可是除了能找到机会收一些广告费,还真找不出WEB2.0时代,BLOG的价值在哪里?[img]htV2006年初火爆一时的BLOG风潮到了这个炎炎夏日似乎清凉了一些,BLOG人们沉静
mdsfnsa RF/无线
移植minigui遇到的问题
我用的是S3C44B0的板子已经移植好的uclinux和framebuffer,按照网上一篇点击率较高的帖子进行对minigu1.3.3版本的i移植 在进入mde-1.3.0目录编译时遇到了问题,解决到最后出现如下信息: /usr/bin/ld:cannotfind-lmgextcollect2:ldreturned1exitstatus 在网上搜索相关的资料,大概问题是库的路径没对导致没有找到对应的库。但是试了许多方法还是不行。 谁遇到过这种情况?大家讨论讨论。
范小川 嵌入式系统
新人报道
新人报道。。。。 新人报道
qq1269148997 DIY/开源硬件专区
上海嵌入式社区<招兵买马>
招聘对象:嵌入式领域研发人员 招聘要求:热爱嵌入式行业,乐于助人,喜爱交流,坦诚待人。 招聘地址:上海及其周边更佳,其余也欢迎。 加入方式:39527548(QQ群号码) 上海嵌入式社区,为众多嵌入式同行提供一个交流平台,这里你可以讨论技术,谈论职业发展,自由交流,上海嵌入式社区欢迎您的加入!上海嵌入式社区
uyang4050 嵌入式系统
弱弱的请教各位大神,电动汽车电源系统为何选用72V、96V?
本人为纯电动汽车领域刚入门菜鸟,请教各位大神,为何电动汽车电源系统要选用72V、96V,甚至也有选用80V的?我知道这跟选用的电池有很大关系,但是否还有别的考虑? 弱弱的请教各位大神,电动汽车电源系统为何选用72V、96V?
my8future 汽车电子
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved