基于51单片机的频率计仿真方案原理图

本文介绍了基于51单片机的频率计硬件设计,主要包括时钟信号发生器、频率计控制电路和LCD1602显示电路。时钟信号发生器利用晶振和74LS04非门电路产生谐振频率,而LCD1602用于显示测量结果。
摘要由CSDN通过智能技术生成

链接:https://pan.baidu.com/s/1mrGH9CQ-Z5P2BadpBnWroQ
提取码:laje

系统的硬件设计

本频率计的硬件电路主要由时钟信号发生器、频率计控制电路和LCD显示电路组成。频率计的主要核心部件是采用AT89S52的内部定时/计数器来产生定时和记录脉冲变化次数。主要用到的元器件有晶振器件、电阻、74LS04、74LS74、74LS00、AT89S52单片机、LCD1602等。其硬件系统框图如3-2所示:
在这里插入图片描述
时钟信号发生器是频率计的频率信号产生电路,它是由一个晶振、两个电阻、一个电容及两个非门74LS04构成的工作于串联谐振状态的TTL门电路振荡器。当电路频率为串联谐振频率时,晶体的等效电抗接近零(发生串联谐振),串联谐振频率信号最容易通过闭环回路,这个频率信号通过两级反相后形成反馈振荡,晶体同时也担任着选频作用,在工作于串联谐振状态的振荡电路,它的频率取决于晶体本身具有的频率参数。也就是说,石英晶体多谐多谐振荡器的振荡频率取决于石英晶体的固有谐振频率,与外接电阻、电容无关。

4.3 LCD1602显示电路
在频率计设计中,显示部分对整个系统来说是非常重要的。整个系统的设计最终结果都要通过显示器来反应出来。本次频率计系统的设计采用的显示器为LCD1602。图4-2为LCD1602的显示电路:

在这里插入图片描述
4.3.3 频率计硬件电路整体设计
整个频率计的硬件电路设计主要由包括时钟信号发产生器、LCD1602显示电路、频率计的控制电路这三大部分电路组成。图4-3为频率计的电路原理图:
在这里插入图片描述
在这里插入图片描述

#include <Reg52.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include "1602.h"

sbit Key = P3^4;
sbit Beep = P3^7;
unsigned char Flag_1S=0,SelecMode=0;
unsigned int CounterFlag=0,CounterShow=0;

void delay500ms(void)   
{
    unsigned char a=0,b=0,c=0;
    for(c=205;c>0;c--)
        for(b=116;b>0;b--)
            for(a=9;a>0;a--);
}

void SystemInit(void)
{
	TMOD = 0x16; 			//设置定时器 1 计时模式	
	TH1=(65536-20000)/256; 	//加载 计数器高位数据  
	TL1=(65536-20000)%256; 	//加载 计数器低位数据
	ET1=1;					//允许定时器1 中断触发
	TR1=1;					//启动定时器1 
	IT0=1;       			//下降沿触发
	EX0=1;					//开启外部中断0 (INT0)
	EA =1;					//开总中断
}

void HandInit(void)
{
	LCD_init();
	SystemInit();
}

void main(void)
{
	unsigned char ShowBuf[6]={0};
	float CycleVal=0,PulseWitVal=0;
	HandInit();
	while(1)
	{
		if(!Key)
		{	
			Beep=0;
			delay500ms();
			Beep=1;
			while(!Key);
			SelecMode++;
			if(SelecMode>2)
				SelecMode=0;	
		}
		switch(SelecMode)
		{
		case 0x00:
			LCD_disp_str(0,1," Current frequ: ");	
			LCD_disp_char(4,2,CounterShow/1000+0x30);
			LCD_disp_char(5,2,CounterShow%1000/100+0x30);
			LCD_disp_char(6,2,CounterShow%100/10+0x30);
			LCD_disp_char(7,2,CounterShow%10+0x30);
			LCD_disp_char(8,2,' ');
			LCD_disp_char(9,2,'H');
			LCD_disp_char(10,2,'z');
			LCD_disp_char(11,2,' ');

			break;
		case 0x01:
			LCD_disp_str(0,1," Current Cycle: ");
			CycleVal=1000.0/CounterShow;
			sprintf (ShowBuf, "%0.2f", CycleVal);
			ShowBuf[5]='\0';	
			LCD_disp_str(4,2,ShowBuf);
			LCD_disp_char(9,2,' ');
			LCD_disp_char(10,2,'m');
			LCD_disp_char(11,2,'s');
			break;
		case 0x02:
			LCD_disp_str(0,1," Current Pusle: ");
			CycleVal=500.0/CounterShow;
			sprintf (ShowBuf, "%0.2f", CycleVal);
			ShowBuf[5]='\0';	
			LCD_disp_str(4,2,ShowBuf);
			LCD_disp_char(9,2,' ');
			LCD_disp_char(10,2,'m');
			LCD_disp_char(11,2,'s');
			break;
		default:break;
		}

	}
}

void  Trig_INT0(void) interrupt 0
{
	EX0=0;
	CounterFlag++;
	EX0=1;
}

void Time_T1(void) interrupt 3//20ms
{
	TH1=(65536-20000)/256;   
	TL1=(65536-20000)%256;
	Flag_1S++;
	if(Flag_1S>=50) //1s
	{
		Flag_1S=0;
		CounterShow=CounterFlag;
		CounterFlag=0;
	}	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值