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

📄 main.c

📁 基于等精度测频原理
💻 C
字号:
#include <reg52.h>
#include <INTRINS.H>
#include <math.H>
#include <stdio.H>	
#include "LCD1602.h"

#define UART_ASK 0xA5

sbit OPEN = P1^0;//连接CPLD的IO27
sbit GATE = P3^2;//连接CPLD的IO28
sbit CLRP = P3^5;//连接CPLD的IO29

//定义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,"Cymometer");	

while(1)
	{			
		OPEN=0;
		temp1=0;
		
		while(GATE)
		if(temp1++>65000) break; //超时跳出
		
		CLRP=1;  //清零CPLD内部计数器	
		CLRP=0;
		TH0=0;  //清除单片机内部计数器
		TL0=0;
		counter=0;
		
		TR0=1; //开启定时器0
		OPEN=1;//开启CPLD内部计数器
		while(counter<1);
		
		OPEN=0;
		temp1=0;

		while(GATE)
		if(temp1++>65000) break;//超时跳出
	
	    TR0=0; //关闭定时器0
		

		temp=counter*65536+TH0*256+TL0;		
		fx=1843200/temp;//(22118400/12=1843200)
		fx=fx*(REG2*65536+REG1*256+REG0);//和数据总线P0相关
		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 + -