⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freqtest.c

📁 使用单片机AT89C51和1602字符液晶实现对信号频率的测试和显示(内含1602液晶显示、频率测试、和测频率的时序原理图
💻 C
字号:
#include <REG51.h>
#include <1602_Drive.h>


/******************************************************************
*	定义接口:													  *
*	液晶显示器的接口“1602_Drive.h”库函数中已经定义			  *
*	定义待测方波频率的接口:									  *
*	P3^5(T0口)做时钟输入接口;									  *
******************************************************************/	

//==================================================================
//用测量脉冲次数的方法时定义的定时1s的参数
#define THCLK 0x3c
#define TLCLK 0xd4
#define CntNum 20 
//==================================================================
//定义中间变量
unsigned int Cnt;
unsigned int tmp;
unsigned char outcnt[8];
//==================================================================
//将测量的整数装换为标准有效的字符串
void NumToChar(void) 			
{	unsigned char i;
	outcnt[0]=tmp/10000+48;tmp%=10000;
	outcnt[1]=tmp/1000+48;tmp%=1000;
	outcnt[2]=tmp/100+48;tmp%=100;
	outcnt[3]=tmp/10+48;tmp%=10;
	outcnt[4]=tmp+48;
	outcnt[5]='H';
	outcnt[6]='z';
	outcnt[7]='\0';	
	for(i=0;i<4;i++)				//将字符中数字的最高有效位之前的'0'清空为‘ ’。
	{	if(outcnt[i]=='0')outcnt[i]=' ';			
		else break;
	}
}
//==================================================================
//静态显示文本
void Static_LCD_Print()			
{	GotoXY(0,0);
	Print("Freq is:");
	GotoXY(1,1);
	Print("Made by YeHao");
}
//==================================================================
//动态显示数据
void Dynamic_LCD_Print()		 
{	NumToChar();
	GotoXY(9,0);
	Print(outcnt);
}
//==================================================================

/******************************************************************
*用定时计数器T0做脉冲计数器(下跳沿有效),开始与暂停由T1控制	  *
*定时计数器T1做定时中断,定时1s,定时开启置T0开始计数,定时完毕置 *
*T0为暂停,关闭T1,读取计数数据并清空计数器,将计数数据装换为有效 *
*规范的字符串显示后再开启T0和T1,进入下一轮测量					  *
******************************************************************/
void Initial_C51()
{	TH0=TL0=0; 
	TH1=THCLK;
	TL1=TLCLK;
	TR0=0;
	TMOD=0x15;
	IE=0x88;
	TR1=0;
	Cnt=CntNum;
}

void timer1() interrupt 3	   //定时50ms
{	
	TH1=THCLK;
	TL1=TLCLK;
	if(--Cnt==0)
	{
	TR0=0;
	TR1=0;
	Cnt=CntNum;
	tmp=TH0*256+TL0;
	TH0=TL0=0;
	Dynamic_LCD_Print();
	//TR0=1;
	//TR1=1;
	}
}

void main(void)
{
	Initial_C51();
	LCD_Initial();
	Static_LCD_Print();
	TR0=1;
	TR1=1;
	do{				//空循环用于执行其他任务		
	}while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -