📄 低频频率计._c
字号:
//包含所需头文件
#include <ioM16v.h>
#include <macros.h>
#include "delay.h"
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uint m,value;
const uchar led_date[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
const uchar led_seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//端口初始化
void port_init(void)
{
PORTA = 0xFF;//设置端口数据、方向
DDRA = 0xFF;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x40;
DDRD = 0x00;
}
//定时T1初始化
void timer1_init(void)
{
TCCR1B = 0x00;//停止定时器
TIMSK |= 0x20;//中断允许
TCNT1H = 0x00;
TCNT1L = 0x00;//初始值
OCR1AH = 0x00;
OCR1AL = 0x00;//匹配A值
OCR1BH = 0x00;
OCR1BL = 0x00;//匹配B值
ICR1H = 0xFF;
ICR1L = 0xFF;//输入捕捉匹配值
TCCR1A = 0x00;
TCCR1B = 0x42;//启动定时器
}
//定时器T1输入捕捉中断服务程序
#pragma interrupt_handler timer1_capt_isr:6
void timer1_capt_isr(void)
{
//timer 1 input capture event, read (int)value in ICR1 using;
TCNT1=0;
value=ICR1L; //Read low byte first (important)
value|=(int)ICR1H << 8; //Read high byte and shift into top byte
m=1000000/value;
TIFR|=BIT(ICF1);//软件写1清中断标志
}
void init_devices(void)
{
CLI(); //禁止所有中断
MCUCR = 0x00;//INT0、INT1中断触发方式
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;//外部中断使能
port_init();
timer1_init();
SEI();//开全局中断
}
//主函数
void main(void)
{
init_devices();
//在这继续添加你的代码
while(1)
{
PORTB=led_date[m%10];//设置数码管数据
PORTA=0xfe;//设置数码管片选
DelayUS(100);
PORTB=led_date[m/10%10];
PORTA=0xfd;
DelayUS(100);
PORTB=led_date[m/100%10];
PORTA=0xfb;
DelayUS(100);
PORTB=led_date[m/1000%10];
PORTA=0xf7;
DelayUS(100);
PORTB=led_date[m/10000%10];
PORTA=0xef;
DelayUS(100);
PORTB=led_date[m/100000%10];
PORTA=0xdf;
DelayUS(100);
PORTB=led_date[m/1000000%10];
PORTA=0xbf;
DelayUS(100);
PORTB=led_date[m/10000000%10];
PORTA=0x7f;
DelayUS(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -