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

📄 main.c

📁 等精度频率计 利用51单片机实现 有源码以及执行文件
💻 C
字号:
#include <reg52.h>
#include <INTRINS.H>
#include <math.H>
#include <stdio.H>	
#include "LCD1602.h"

#define UART_ASK 0xA5

sbit GATE = P3^2;
sbit OPEN = P1^0;
sbit CLRP = P3^5;

//定义CPLD内部计数器地址
unsigned char xdata REG0 _at_ 0xfff0;
unsigned char xdata REG1 _at_ 0xfff1;
unsigned char xdata REG2 _at_ 0xfff2;
unsigned char xdata REG3 _at_ 0xfff3;

unsigned char str_buff[30];
unsigned char counter;

void timer0_init()
{
	TMOD|=0x09;
	ET0=1;
	EA=1;
	TR0=0;	
}

void delay_ms(unsigned int n)
{
     unsigned char j;
     while(n--)
     for(j=0;j<230;j++);//230是实验测试所得!
}

main()
{
	double fx,temp;
	uint temp1;
	lcd1602_init();
	timer0_init();
	OPEN=0;

	lcd_put_xys(1,1,"Welcometostuelab");	

	while(1)
	{			
		OPEN=0;
		temp1=0;
		while(GATE)
			if(temp1++>65000) break;//超时跳出
		CLRP=1; 	
		CLRP=0;
		TH0=0; 
		TL0=0;
		counter=0;
		TR0=1;
		OPEN=1;
		while(counter<1);
		OPEN=0;
		temp1=0;
		while(GATE)
				if(temp1++>65000) break;//超时跳出
		TR0=0;
		temp=counter*65536+TH0*256+TL0;		
		fx=1843200/temp;//(22118400/12=1843200)
		fx=fx*(REG2*65536+REG1*256+REG0);
		sprintf(str_buff,"%-8.3fHz",fx);
		lcd_put_xys(1,2,"               ");	//清屏
		lcd_put_xys(1,2,"f=");	
		lcd_put_xys(3,2,str_buff);	
		delay_ms(1000);
	}
}

void timer0_int(void) interrupt 1
{
	counter++;
}

⌨️ 快捷键说明

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