新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > avr atmega16做的頻率計(jì) 利用輸入捕獲功能

avr atmega16做的頻率計(jì) 利用輸入捕獲功能

作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/201611/316377.htm


/*****************************************
* 基于頻率計(jì)程序設(shè)計(jì) *
* 功 能:頻率計(jì) *
* 時(shí)鐘頻率:內(nèi)部8M *
頻率計(jì)最大頻率范圍。proteus測(cè)的65K 左右
MADE BY LYQ
*****************************************/
#include
#include
#include "1602.c"
#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler timer1_capture:6
#pragma interrupt_handler timer1_over:9
uint Freq=0;
uint i;
uchar a=0;
uchar data[6]={0,0,0,0,0,0};//顯示初值,最后一個(gè)0是結(jié)束符,方便液晶顯示


void timer1_init()
{
TIMSK=(1<TCCR1B=(1<TCNT1=0X85ed;// ###定時(shí)1s#########
TIFR=(1<//SREG=SREG&0x7f;
}
void hz(uint i,uchar *p) //顯示處理,+48(0x30) 0的ASCII碼。。是因?yàn)橐壕э@示的是ASCII碼
{


p[4]=i%10+48;//個(gè)
p[3]=i/10%10+48;//十
p[2]=i/100%10+48;//百
p[1]=i/1000%10+48;//千
p[0]=i/10000%10+48;//萬
}


void main()
{
timer1_init();
init_1602();//液晶初始化

DDRD=0x00;
PORTD=0xff;//設(shè)置D口為帶上拉電阻輸入
SREG|=0x80;
LCD_write_string(3,0,"MADE BY LYQ");
LCD_write_string(11,1,"Hz");
while(1)
{
if(a)
{
a=0;
hz(i,data);
LCD_write_string(6,1,data); //顯示

}
}
}

void timer1_capture()//產(chǎn)生捕獲中斷
{
Freq++;
}

void timer1_over()//每秒產(chǎn)生中斷一次
{
TCNT1=0X85ed;//
i=Freq;
a=1;
Freq=0;
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉