Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a07_TIMER1频率计
*本文及代码参阅彭伟《单片机C语言程序设计实训100例》
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示)
图1
二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示)
图2
图3
图4
三,点击Source Code标签。(如下图5所示)
图5
四,编辑main.c 代码如Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a07_TIMER1频率计 (如下图6所示)
图6
五,Main.c 代码:
//-----------------------------------------------------------------
// 名称: 用TIMER1输入捕获功能设计的频率计
//-----------------------------------------------------------------
// 说明: 本例运行时,切换不同的频率输入,然后按下K1按键,数码管上将
// 显示当前频率值.两次捕获的时间差值即为当前输入频率的周期,
// 周期倒数即可得到当前频率.
//
//-----------------------------------------------------------------
//#define F_CPU 1000000UL //1M晶振
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define INT8U unsigned char
#define INT16U unsigned int
extern INT8U Display_Buffer[];
extern INT16U CAPi, CAPj;
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
int main()
{
INT8U LastKey= 0xff;
DDRA= 0xff;
DDRB= 0xff;
DDRC= 0x00; PORTC= 0xff;
DDRD= 0x00; PORTD= 0xff;
TCCR1B= _BV(ICNC1) | _BV(ICES1);
sei();
while(1) {
if(LastKey != PINC) {
TIMSK =_BV(TICIE1);
TCCR1B |= 0x01;
LastKey= PINC;
}
Show_FRQ_ON_DSY();
}
}
//------------------------------------------------------------------
// T1输入捕获中断子程序
//------------------------------------------------------------------
ISR (TIMER1_CAPT_vect)
{
INT8U i;
if(CAPi== 0) CAPi= ICR1;
else {
CAPj= ICR1- CAPi;
CAPj= 1000000UL/ CAPj;
TIMSK= 0xfc;
for(i= 3; i !=0xff; i–) {
Display_Buffer[i]= CAPj % 10;
CAPj /= 10;
}
TCNT1= CAPi= CAPj= 0;
}
}
Myfunc01.h:
//******************************************************************************************
#ifndef MYFUNC01_H
#define MYFUNC01_H
//#define F_CPU 2000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define INT8U unsigned char
#define INT16U unsigned int
//共阴数码管0-9的数字编码,最后一位为黑屏
static INT8U SEG_CODE[] =
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
void Show_FRQ_ON_DSY();
#endif
六,点击构建工程按钮,编译工程。(如下图7所示)
图7
七,点击窗口左下方仿真按钮,可见虚拟数字屏显示。 (如下图8,9,10所示)
图8
图9
图10
八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示)
图11
附件下载:https://download.****.net/download/kaillen/12542194
Proteus8.9 SP2下载:https://download.****.net/download/kaillen/12459968
附件Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a07_TIMER1频率计在已安装Proteus8.9的计算机文件夹中打开即可
需要进一步了解,请加入QQ群:976235464