参数:测量范围1HZ-50KHZ 测量波形:半波,正弦波,方波,三角波,锯齿波

数码管显示频率

一、频率计原理

我们采用的方案是,用信号触发外部中断,外部中断触发定时器定时一秒,一秒时间到了之后计算一秒内触发了多少次外部中断,外部中断采用的是下降沿触发。

二、使用步骤

1.引入库

如果只需要玩玩那么直接复制就可以了,开发版是用的普中A2开发版,如果无法使用发私信联系。
只需要看定时器中断和外部中断。

#include <STC89C5xRC.H>
#define uint unsigned int
#define uchar unsigned char
sbit DIN = P1^0;//信号输入
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint HATA=0,lpoi=0;//计数位
uchar ii=0;
//**************************************************************************************************************************************
//***************数码管
uchar code sz1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//***************三八译码器
uchar code sp2[]={0xff,0x18,0x14,0x10,0xc,0x8,0x4,0x00};
//**************************************************************************************************************************************
uchar sp3[5];
/****************************************************************************
*函数名;dalay
*输  入:时间
*输  出:无
*功  能:延时
****************************************************************************/
void delay(time)
{uchar ti=0;while(time--){for(ti=10;ti>0;ti--);}
}
/****************************************************************************
*函数名;Timer0Init
*输  入:无
*输  出:无
*功  能:定时器0初始化
****************************************************************************/
void Timer0Init(void)        //0微秒@11.0592MHz
{AUXR &= 0x7F;        //定时器时钟12T模式TMOD &= 0xF0;        //设置定时器模式TMOD |= 0x01;        //设置定时器模式TL0 = 0x00;        //设置定时初始值TH0 = 0x4C;        //设置定时初始值EA=1;EX0=1;IT0 = 1;//下降沿ET0=1;
}
/****************************************************************************
*函数名;show
*输  入:iny
*输  出:无
*功  能:数码管显示
****************************************************************************/
void show()
{uchar i,b=0;for(i=0;i<6;i++){switch(i)     //位选,选择点亮的数码管,{case(0):LSA=1;LSB=0;LSC=1; break;//显示第2位case(1):LSA=0;LSB=0;LSC=1; break;//显示第3位case(2):LSA=1;LSB=1;LSC=0; break;//显示第4位case(3):LSA=0;LSB=1;LSC=0; break;//显示第5位case(4):LSA=1;LSB=0;LSC=0; break;//显示第6位case(5):LSA=0;LSB=0;LSC=0; break;//显示第7位}P0 = sz1[sp3[i]];delay(10);P0 = 0x00;}
}
/****************************************************************************
*函数名;Calculation_data()
*输  入:无
*输  出:无
*功  能:把计数值按位放到数组方便调用
****************************************************************************/
void Calculation_data()//计算数据
{HATA=lpoi;lpoi=0;sp3[0]=(HATA/100000);sp3[1]=(HATA%100000/10000);sp3[2]=(HATA%100000%10000/1000);sp3[3]=(HATA%100000%10000%1000/100);sp3[4]=(HATA%100000%10000%1000%100/10);sp3[5]=(HATA%100000%10000%1000%100%10);
}
void main()
{Timer0Init();while(1){show();//数码管显示}
}
/****************************************************************************
*函数名;外部中断
*输  入:无
*输  出:无
*功  能:计触发次数
****************************************************************************/
void EX00() interrupt 0
{lpoi++;//记触发次数if(TR0==0)//***************此判断用来减小误差{lpoi-=1;}          //***************TR0=1;
}
/****************************************************************************
*函数名;定时器中断
*输  入:无
*输  出:无
*功  能:定时一秒后计算数据
***********************************************************************/
void ET00() interrupt 1
{TL0 = 0x00;        //设置定时初始值TH0 = 0x4C;        //设置定时初始值ii++;if(ii>=20)                //判断达到一秒后{ii=0;                //时间计数清零TR0=0;                //关闭定时器Calculation_data();//计算数据}
}

2.知识点讲解

这一段代码是外部中断里的,加这个判断是为了测低频的时候减小误差用的
原理:判断定时器有没有触发,如果没有触发表示此脉冲是第一个脉冲,这一个脉冲我们不能要因为定时器还没有打开,所以此脉冲不能要

if(TR0==0)//***************此判断用来减小误差{lpoi-=1;}          //***************

# 总结

主要理解以上两个中断的程序,如果您有不同的方式请留言我们共同学习

简易单片机制作频率计相关推荐

  1. 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示

    [Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...

  2. 浅析简易网页制作的准备工作

    还记得最初开始网页制作的时候还是新手,面对自己第一个网页制作无论是网页设计还是制作流程都十分上心.对于一个新手来说,网页制作需要充分了解它的制作流程和准备工作,那么网页制作究竟都要涉及哪些方面准备呢? ...

  3. c语言之判断电压最大值最小值,基于单片机的频率计的C语言源代码

    描述 本文是基于AT89C51单片机的频率计的C源程序.该频率计主要实现的功能有如下几个: 1. 测试功能 它表明数字频率计所具备的全部测试功能,一般包括测频,周期,累计脉冲数,频率比,时间间隔及自较 ...

  4. at89c2051 定时器用法 c语言编程资料,用AT89C2051单片机制作的数字电容表.doc

    用AT89C2051单片机制作的数字电容表 用AT89C2051单片机制作的数字电容表 吴汉清 AT89C2051作为AT89C51的简化版虽然去掉了P0.P2等端口,使I/O口减少了,但是却增加了一 ...

  5. micropython大小_Micropython进阶 | 如何用单片机制作鞋码匹配仪

    原标题:Micropython进阶 | 如何用单片机制作鞋码匹配仪 非常简单的小制作,适合新手以及初学者 入门学习,也请各位大神多多指点.自己测了下稍微有些偏差,显示鞋码比我实际鞋码大了一号,各位大大 ...

  6. 课设系列:51单片机制作智能时钟闹钟

    操作演示视频 51单片机制作智能时钟闹钟 文章目录 操作演示视频 课设的基本要求 一.硬件框图 二.功能描述 2.1.基本功能 2.2.设计要求 2.3(1)时钟显示功能 (2)闹钟显示界面 2.4按 ...

  7. AT89C51单片机制作密码锁,真的很详细了

    AT89C51单片机制作一个密码锁) 前言 所需基础 工具准备 代码截图 模块使用介绍 必学几部分 键值判断 头文件意义 typedef 和 sbit方法 键值判断case 0xeb modifyke ...

  8. 单片机秒表c语言,单片机制作秒表计时器(c语言)

    利用计数器中断,外部中断(按钮)编写的机遇c语言的秒表计时器 利用单片机制作秒表计时器 (c语言) #include//包含单片机对应的头文件 int MM=0,SS=0,MS=0; int time ...

  9. 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)

    单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器) 个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器 ...

最新文章

  1. [LeetCode] Excel Sheet Column Number
  2. Unity Physics.Raycast踩坑
  3. idea 新建的java项目没发run_IntelliJ IDEA 如何创建一个普通的java项目,及创建java文件并运行...
  4. numpy弧度制和角度制转换deg2rad, rad2deg
  5. 期货反向跟单—日内交易是否合适
  6. windowsxp下载python下载视频_Python 实现视频下载
  7. seajs学习(1)----什么是系统
  8. org.springframework.data.mapping.PropertyReferenceException: No property item found for type BItem!
  9. ahk写入excel单元格_输出excel数据到GUI 获取excel所有Sheet及字段 Autohotkey
  10. 深受启发的21个故事
  11. 京东优惠券获取、分析
  12. 由KKT互补松弛条件,支持向量的系数不一定为0,非支持向量的系数一定为0
  13. 戴尔linux改win7教程视频,戴尔笔记本win10改win7系统BIOS设置详细教程
  14. iOS 应用内购买基础教程 swift篇
  15. linux awk命令详解(一) awk语法 awk运算 awk数组
  16. 最适合企业的手机操作系统
  17. 工作岗位必备技能总结
  18. Kafka入门教程及安装
  19. 软件开发技术联盟 - 图书系列资源
  20. Java课程实验报告 实验四 Java网络编程及安全

热门文章

  1. matlab张志涌版课后习题答案,matlab教程(张志涌)课后习题答案.doc
  2. c语言程序设计教程刘三满答案,清华大学出版社-图书详情-《C语言程序设计教程》...
  3. 基于高德地图实现可编辑的电子围栏功能【多边形围栏】
  4. 1-17 Set集合和Map集合
  5. 手把手教你将chatGpt接到微信
  6. 推荐张艺谋年轻时的两部片子 :红高粱、千里走单骑
  7. Audio Unit(三):Audio Unit Development Fundamentals
  8. linux xunsou_mysql中文分词全文搜索索引讯搜的安装
  9. OAuth 2.0 的四种认证模式
  10. 期刊论文和会议论文的区分与识别