久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基于ATMEGA16單片機(jī)的頻率計(jì)設(shè)計(jì)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年03月03日   【字體:




 

完整程序下載地址:http://m.zg4o1577.cn/f/avrplj.rar 

 主函數(shù)(main()):/*

程序功能:頻率計(jì)

作者:朱波

時(shí)間:2012年1月28日

說(shuō)明:PB1為輸入端口

定義:頻率計(jì)——頻率為1秒時(shí)間內(nèi)信號(hào)變化的次數(shù),數(shù)字頻率計(jì)就是在

      1秒標(biāo)準(zhǔn)時(shí)間內(nèi)測(cè)出信號(hào)變化的次數(shù),然后以數(shù)字的形式顯示出來(lái)

原理:用定時(shí)器0得到1秒,定時(shí)器1進(jìn)入技術(shù)模式,在定時(shí)器0的中斷中

 得到計(jì)數(shù)值,即為頻率值  


 

*/

#include<iom16v.h>

#include<macros.h>

#include"delay.h"

#include"show.h"

#include"HD_init.h"

#define uchar unsigned char

#define uint unsigned int

unsigned int FREQ=0; //定義全局變量,用于計(jì)算


 

void main()

{

  PORT_Init();//端口初始化

  timer1_init();//定時(shí)器1初始化

  timer0_init();//定時(shí)器0初始化

  SEI();//開啟總中斷

  

  while(1)

 {  

display();

 }

 

}

硬件初始化函數(shù)HD_init.c:
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#include"HD_init.h"
extern unsigned int FREQ; //定義全局變量,用于計(jì)算
 uint time_num=250;//250*4ms=1s

 
//端口初始化函數(shù)
void PORT_Init()
{
  DDRB  = 0xFD;//PB1作為輸入口
}
//T0溢出中斷服務(wù)程序
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
 TCNT0 = 0x83; //重賦值
 if(!--time_num) 
 { 
   FREQ=TCNT1L; 
   FREQ|=TCNT1H<<8; //這就是讀取低八位和高八位的值的方法
   TCNT1H=0; //計(jì)數(shù)值歸零
   TCNT1L=0; 
   time_num=250;//定時(shí)器0定時(shí)4ms,乘以250為1s   
 } 
}
//定時(shí)T1初始化進(jìn)入計(jì)數(shù)模式
void timer1_init(void)
{
 TCCR1B = 0x00; //stop 
 TCNT1H = 0x00 /*INVALID SETTING*/; //setup 
 TCNT1L = 0x00 /*INVALID SETTING*/; 
 TCCR1A = 0x00; 
 TCCR1B = 0x06; //start Timer 
}
//定時(shí)器T0初始化定時(shí)4ms
void timer0_init(void)
{
 TCCR0  = 0x00;//停止定時(shí)器
 TCNT0  = 0x83;//初始值
 OCR0   = 0x82;//匹配值
 TIMSK |= 0x01;//中斷允許
 TCCR0  = 0x04;//啟動(dòng)定時(shí)器
}
延時(shí)函數(shù)(delay.c):
#define uchar unsigned char
#define uint unsigned int
#include"delay.h"
void delay(uint ms)
{
        uint i,j;
for(i=0;i<ms;i++)
  {
  for(j=0;j<1141;j++);
       }
}
顯示函數(shù)(show.c)
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#include"show.h"
extern unsigned int FREQ; //定義全局變量,用于計(jì)算
const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void show(uchar j,uchar k)
{
 
DDRA|=BIT(3);  
DDRA|=BIT(4);
DDRD=0XFF;
    PORTA|=BIT(3);
PORTD=table[j];
PORTA&=~BIT(3);
delay(3);//此延時(shí)在仿真時(shí)非常重要
PORTD=0XFF;
PORTD&=~BIT(k);
PORTA|=BIT(4);
PORTA&=~BIT(4);
 
}
void display()//實(shí)際上只用最后一個(gè)就行,保留這么多
              //就是為了留一種算法
{
  if(FREQ<10)
{
 show(FREQ%10,1);
 show(0,2);
 show(0,3);
 show(0,0);
}
else if(FREQ<100)
{
   show(FREQ%10,1);
   show(FREQ%100/10,2);
show(0,3);
  show(0,0);
}
else if(FREQ<1000)
{
 show(FREQ%10,1);
 show(FREQ%100/10,2);
 show(FREQ%1000/100,3);
 show(0,0);
}
else 
{
 show(FREQ%10,1);
 show(FREQ%100/10,2);
 show(FREQ%1000/100,3);
 show(FREQ/1000,0);
}
}
以下是接口函數(shù):


 

show.h:
#define uchar unsigned char
#define uint unsigned int
#ifndef delay_h
#define delay_h
extern void show(uchar j,uchar k);
extern void display();
#endif

HD_init.h:
#ifndef HD_init_H
#define HD_init_H
extern void PORT_Init();
extern void timer0_init(void);
extern void timer1_init(void);
#endif

delay.h:
#define uchar unsigned char
#define uint unsigned int
#ifndef delay_h
#define delay_h
extern void delay(uint ms);
#endif
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 手机看片福利视频 | 国产精品成人一区二区 | 亚洲午夜一区 | 亚洲欧美另类在线 | 国产成人免费在线观看 | 欧美精品一区在线观看 | 成人av一区二区三区在线观看 | 日韩欧美精品一区 | 欧美日韩一本 | 午夜成人在线视频 | 国产高潮在线 | 免费在线毛片 | 中文字幕免费 | 天堂va蜜桃一区二区三区 | 成人毛片一区二区三区 | 久草视 | 国产精品亚洲一区 | 在线不卡一区二区 | 国产成人免费在线观看 | 亚洲黄色精品 | 中文字幕综合 | 五月婷婷综合激情 | 国产高清一区二区三区 | 中文字幕+乱码+中文乱码91 | 一级肉体裸体bbbb | 中文字幕在线视频观看 | 在线观看欧美日韩视频 | 国产区在线 | 久久a视频 | 日韩精品一二三 | 韩日av在线 | www.黄色av| 成人黄色在线 | 日韩黄色录像 | 欧美亚洲在线 | 91看片在线观看 | 黄色天堂 | 97国产精品| 二区在线观看 | 欧美视频精品 | 日韩三级在线播放 |