单片机测频程序

发布者:Mingyue1314最新更新时间:2015-03-09 来源: laogu关键字:单片机  测频程序 手机看文章 扫描二维码
随时随地手机看文章

/* 单片机测频 程序 下到 20hz 上到 29k */
/*如果想要测更高频率可用模拟开关加分频器*/

/*说明: 头文件中调用的“lcd1602.h”只需要把我发的lcd1602的子程序做一个h文件即可*/


#i nclude "AT89X52.h"
#i nclude "stdio.h"
#i nclude " absacc.h "
#i nclude
#i nclude
#i nclude "lcd1602.h"

sbit F_in=P1^0;

bit int_flag;
unsigned int frequency;

void Display(void);
void Mcu_init(void);
void Measure_F(void);
void Measure_T(void);
void Frequency_Measure(void);

void main()

 Mcu_init(); 
 while(1)    
 {
  Frequency_Measure();
  Display();
 }
}

void time0(void)  interrupt 1 
{
 int_flag=1;
}

void Frequency_Measure(void)   
{
 if(frequency<2000)  
  Measure_T();
 else if(frequency>=2000)
  Measure_F();
}

void Measure_F(void)
{
 bit state_old=0,state_new=0;
 unsigned int f_count=0;  
 int_flag=0;
 TH0=-50000/256;
 TL0=-50000%256;
 TR0=1;
 while(1) 
 {
  state_new=F_in;
  if(state_old!=state_new) 
   f_count++;
  state_old=state_new;
  if(int_flag)
  {
   TR0=0; 
   frequency=f_count*10;
   return;
  }
 }
}

void Measure_T(void)
{
 bit state_old=0,state_new=0;
 unsigned char temp_flag=0;
 unsigned int t_count;
 
 TH0=0;
 TL0=0;
    while(1)
    {
     state_new=F_in; 
        if(state_old&&!state_new) 
        {
         temp_flag++;
         TR0=1;
        }
        if(temp_flag==2)
        {
         TR0=0;
         t_count=TH0*256+TL0; 
         frequency=1000000/t_count; 
         return;
        }
        state_old=state_new;
 }
}

void Display(void)
{
 unsigned char a,b,c,d,e;
 
 a=frequency/10000;
 b=frequency%10000/1000;
 c=frequency%1000/100;
 d=frequency%100/10;
 e=frequency%10;
 LCD_string(LINE1,0,"F-measure:"); 
 
 LCD_char(LINE1,0x0b,a 0x30);
 LCD_char(LINE1,0x0c,b 0x30);
 LCD_char(LINE1,0x0d,c 0x30);
 LCD_char(LINE1,0x0e,d 0x30);
 LCD_char(LINE1,0x0f,e 0x30);
 
 if(frequency<2000) 
  LCD_string(LINE2,0,"Now is measure T"); 
 else
  LCD_string(LINE2,0,"Now is measure F"); 
}

void Mcu_init(void)
{
 EA=1;
 ET0=1;
 TR0=1;
 TMOD=0x01;  
 TH0=-(50000/256); 
 TL0=-(50000%256);
 LCD_init();
 LCD_string(LINE1,0x00,"                        ");
 LCD_string(LINE1,0x00,"                        ");
}


关键字:单片机  测频程序 引用地址:单片机测频程序

上一篇:MSP430单片机硬件知识(2)-中断
下一篇:基于MSP430的车载防醉驾安全系统

推荐阅读最新更新时间:2024-03-16 13:54

学51单片机-按键的中断检测
接着昨天,继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成
[单片机]
学51<font color='red'>单片机</font>-按键的中断检测
以AT89S52单片机为控制器的多功能数控电流源系统设计
在现代科学研究和工业生产中,精度高、稳定性好的数控直流电流源得到了十分广泛的应用。以往所采用的电流源多数是利用电位器进行调节,输出电流值无法实现精准步进。有些电流源虽能够实现数控但是往往输出的电流值过小,且所设定的输出电流值是否准确不经测试无法确定,不够直观。为此,结合单片机技术及V/I变换电路,利用闭环反馈调整控制原理设计制作了一种新型的基于单片机控制的高精度数控直流电流源。 本系统以AT89S52单片机为控制器,通过人机接口(按键和LCD显示屏)来设置输出电流,设置步进等级1 mA,并可同时显示预设电流值和实际输出电流值。本系统由按键设置输出电流值,经单片机计算后通过D/A转换器(TLV5618)输出模拟信号,再经过V/I
[单片机]
以AT89S52<font color='red'>单片机</font>为控制器的多功能数控电流源系统设计
MCU/电源管理芯片/IGBT等需求强劲
11月11日,华虹半导体发布第三季度业绩报告称,公司销售收入再创历史新高,达4.515亿美元,同比上升 78.5%,环比上升30.4%;母公司拥有人应占溢利5,080万美元,同比上升187.1%,环比上升15.3%。 按产品来看,本季度嵌入式非易失性存储器销售收入1.265亿美元,同比增长44.8%,主要得益于MCU和智能卡芯片的需求增加;独立非易失性存储器销售收入1,990万美元,同比增长611.3%,主要得益于NOR flash产品的需求增加;分立器件销售收入1.531亿美元,同比增长 59.1%,主要得益于通用MOSFET、超级结及IGBT产品的需求增加;逻辑及射频销售收入8,010万美元,同比增长145.2%,大部分得
[手机便携]
<font color='red'>MCU</font>/电源管理芯片/IGBT等需求强劲
51单片机延时函数
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i 0;i--) for(j=202;j 0;j--) for(k=81;k 0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二
[单片机]
STM32单片机ILI9325系列TFT的驱动原理解析
为了更好,更深入学习了解ILI9325系列TFT的驱动原理,自己做了一块TFT板子。为了方便测试,在上面集成了STM32芯片,到时候做实验的时候就焊接STM32测试,如果只是使用,就直接焊接TFT就行了。板子还在做,先上原理图与PCB。 -------------------------等板子回来,再测试,总结继续------------- --------板子回来了,焊接好了,简单测试了一下!----------- ---------第二部分---------------ili9320.h------------------代码简单分析------ #ifndef _ILI9320_H_ #defi
[单片机]
STM32<font color='red'>单片机</font>ILI9325系列TFT的驱动原理解析
单片机实现声音导引系统方案
1 系统的具体设计与实现   1.1 系统组成   系统组成如图1所示,在系统设计中采用两块单片机(AT89S52)分别作为可移动的声源的 检测 和控制核心。通过单片机(MCUl)对接收器接收到声源信号的时间做处理,检测出当前小车的位置,然后通过无线发送给MCU2。MCU2根据当前的位置控制电机的转速及转向,当停止下来时给出相应的声光提示。      1.2 具体算法实现   1.2.1 设计与计算   该设计主要是根据接收器接收到声源信号的时间间隔来确定当前小车的位置S,如图2所示。设S点到C点的距离为a。S点到A点的距离为b;S点到B点的距离为c。设S点的坐标设为l,h),假设由单片机测得接收器A
[单片机]
<font color='red'>单片机</font>实现声音导引系统方案
基于单片机PIC18F66J10的主动放线机设计
0 引言 速度是工业生产中的主要被控参数之一,与之相关的各种速度控制系统已被广泛应用于冶金、化工、机械、食品等领域。本文介绍的主动放线机速度自动控制系统适用于微细金属线的恒张力主动放线,可广泛用于拉丝机、绕线机的前端放线,并可在放线过程中保持金属线的张力恒定。适用的线材有金、银、铜、铝等,放线速度为0~700 rpm,线径可达φ0.05 mm,张力控制可通过摆臂一边悬挂的砝码来手动调整。 整个系统选用六线式单极性步进电机为执行部件,具有低成本和控制方法简单的优点,核心控制芯片选用美国Microchip公司的PIC单片机PIC18F66J10,该芯片具有实用可靠、代码保密性好、片内集成有模拟、数字功能部件等优点。而系统选用美国A
[应用]
晶振在单片机中的作用
简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。   单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周期包括12个时钟周期。如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us。   MCS—51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器周期,还有两条指令要4个机器周期才行。为了衡量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。例如
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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