⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ATmaga128单片机TIMER1(16位定时器)程序 通过设计寄存器的值可以实现准确的定时信号输出
💻 C
字号:
#include <avr/io.h>
#include "type.h"
#include <avr/signal.h>
#include <avr/interrupt.h>

const uchar SEGMENT[16]={0x3f,0x30,0x5b,0x79,0x74,0x6d,0x6f, 0x38,
		            0x7f,0x7d,0x7e,0x67,0x0f,0x73,0x4f,0x4e};
					//将BCD码转换成共阴极数码管扫描码的数组
					
volatile uchar number;

/*
函数名称: display_one_smg()
功    能: 指定的数码管显示指定的内容
参    数: number--显示的内容(0-15)
	  	  position--指定的数码管(1-6)
返回值  : 无
*/
void display_one_smg(uchar num,uchar pos)
{
	//SMG_INIT();
	PORTD &= 0x0F;
	PORTC = ~SEGMENT[num];
	PORTD = (PORTD|(1<<(pos+4)));
}
//定时器1溢出中断1服务程序
SIGNAL(SIG_OVERFLOW1)
{
    
	TCNT1H=0X57;
	TCNT1L=0X3F;//初值装入
//	while(!(TIFR&0X04));//检测溢出标志 
    number++;
    if(number==60)
	{
	   number=0;
	}
}
//定时器初始化函数
void timer1_inti(void)
{
	TCCR1B=0X00;//停止定时器1
	TCNT1H=0X57;//初值装入
	TCNT1L=0X3F;
	TCCR1A=0X00;
	TCCR1B=0X04;//256分频,启动定时器1
	TIMSK|=0x04;
	//SREG|=0x80;
	sei();
}

int main(void)
{
	unsigned char rt;
	SMG_INIT();
	timer1_inti();
	number = 0;
	while(1)
	{
			rt = number;
			PORTD|=0X0F;//PD口清零
			display_one_smg(rt/10,1);
			display_one_smg(rt%10,0);

	}
	
}

⌨️ 快捷键说明

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