1602_main.c

来自「10K到5MHz的频率测量」· C语言 代码 · 共 119 行

C
119
字号
#include<iom16v.h>
#include<macros.h>
#include"1602.h"
#define uint unsigned int
#define uchar unsigned char  
#define ulint unsigned long int
uchar F[]={"F="},Hz[]={"Hz"},T[]={"T="};
uchar S[]={"S"},uS[]={"uS"},dot[]={"."};
float TT,FF;           
ulint f,ff,T_int;
uchar i,t,f_hign,f_low,hignf;

void port_init(void)
{
 DDRA  = 0xff;
 PORTA = 0xff;
 PORTB = 0x00;
 DDRB  = 0xF0;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 DDRD  = 0xff;
 PORTD = 0xff;
}

//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 8mSec
// actual value:  8.000mSec (0.0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x83; //set count  
 TCCR0 = 0x35; //start timer 
}

#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
 TCNT0 = 0x83; //reload counter value
 t++;
}

//TIMER1 initialize - prescale:Falling edge
// WGM: 0) Normal, TOP=0xFFFF
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCCR1A = 0x00;
 TCNT1H=0;
 TCNT1L=0;
 TCCR1B = 0x07; //start Timer
}

#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
 TCNT1H=0;
 TCNT1L=0;
 hignf++;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 port_init();
 timer0_init();
 timer1_init();
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x05; //timer interrupt sources
}

//主函数
void main()
{
 CLI();
 t=0;
 hignf=0;
 init_devices();
 s_ms(5000);      //延时
 LcdInit();     //1602初始化
 WriteChar(1,0,2,T);
 WriteChar(1,15,1,S);
 WriteNum(1,4,0);
 WriteChar(1,5,1,dot);    
 WriteChar(2,0,2,F);    
 WriteChar(2,14,2,Hz);   
 SEI();
 while(1)
 { 
  if(t==125)                     //100KHz~5MHz
  {  
	f_low=TCNT1L;
	f_hign=TCNT1H;
	f=(ulint)f_hign*256+f_low; //转换为unsigned long类型,否则所测频率最多32670HZ
	if(hignf)
	{
		f+=hignf*65536;
		hignf=0;
	}
	FF=(float)f;
	for(i=13;i>6;i--)
	{
		WriteNum(2,i,f%10);
		f/=10;
	}
	 TT=1/FF;
	 T_int=(ulint)(TT*1000000000);
	 for(i=14;i>5;i--)
	 {
		WriteNum(1,i,T_int%10);
		T_int/=10;
	 }
	 t=0;
	 init_devices();
    }
  }
}

⌨️ 快捷键说明

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