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

📄 main.c

📁 MCU为:ATMGEA128
💻 C
字号:


//ICC-AVR application builder : 2007-1-10 11:11:10
// Target : M128
// Crystal: 1.0000Mhz

#include "include.h"
//***************全局变量************************
unsigned char 	eeprom_data[100];
unsigned char 	cur_mode=0;
unsigned char 	globe_timer;
unsigned char 	led_status=3;
unsigned char 	eeprom_cmd[3]={0,0,0};
unsigned char 	user_config[CONFIGDATA_MAX];
unsigned char 	activeline=0xff,osdstyle=2,colourmode;				
//***************全局变量************************//end
void port_init(void)
{
 PORTA = 0x0C;
 DDRA  = 0x0F;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
 PORTE = 0x00;
 DDRE  = 0x00; 
 PORTF = 0x00;
 DDRF  = 0x00;
 PORTG = 0x00;
 DDRG  = 0x01;
}

//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1mSec
// actual value:  1.000mSec (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0xFF; //setup
 TCNT1L = 0x83;
 OCR1AH = 0x00;
 OCR1AL = 0x7D;
 OCR1BH = 0x00;
 OCR1BL = 0x7D;
 OCR1CH = 0x00;
 OCR1CL = 0x7D;
 ICR1H  = 0x00;
 ICR1L  = 0x7D;
 TCCR1A = 0x00;
 TCCR1B = 0x02; //start Timer
}

#pragma interrupt_handler timer1_ovf_isr:15
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 extern unsigned char  globe_timer;
 TCNT1H = 0xFF; //reload counter high value
 TCNT1L = 0x83; //reload counter low value
 globe_timer++;
}
//********等待至5MS,保证主循环一个周期为5MS********
void timer_check(void){
 while(globe_timer<5)
 {
 asm("nop");
 }
 globe_timer=0;
 //PORTG^=0X01;//TP5为时钟节拍测试点。
}
//********等待至5MS,保证主循环一个周期为5MS********//end


//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x00; //external memory
 port_init();
 timer1_init();
 uart1_init();
 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x00;
 TIMSK = 0x04; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}
void testmode(void)
{
unsigned int  i,j;
//		DDRF&=~0X06;
//		 while(1);
for(i=0;i<100;i++)
	{
	if((KEY1_PIN&(1<<KEY1_BIT))!=0)return;
	if((KEY2_PIN&(1<<KEY2_BIT))!=0)return;
	if((UD_PIN&(1<<UD_BIT))!=0)return;
	for(j=0;j<10;j++);
	if(i==99)
		{
		LED1_ON;
		LED2_ON;
		osdstyle=0x5;
		refreshmenu();
 		 DDRF&=~0X06;
		 while(1){
		 	LED1_ON;
			LED2_INV;
			for(i=0;i<100;i++)for(j=0;j<100;j++);
		 	}
		}
	}
return;
}
//
void main(void)
{
 int i,j,m,n;
 init_devices();
 //insert your functional code here...
 t103_reset();
 TD28_INIT();
 t103_cfg_init();
 bluescrenable();  
 t103_init();
 osdstyle=0x0; 
 OSDInit();
 osdenable();
 //***************************屏幕逐渐变亮********************
 /*修改硬件
 tps64014使能脚EN下拉到地,并且连接TP5(即PG0)。由单片机
 控制背关的通断。如果改板,可在TPS64014后做一PWM背光电压调节
 电路。
 */
 if(0)//屏幕逐渐变亮
 	{
	 for(m=0;m<=1000;m+=5)
	 	{
		for(n=0;n<m;n++)
			{
			BACKLIGHT_ON;
			//for(i=0;i<10;i++);
			}
	 	for(;n<1000;n++)
			{
			BACKLIGHT_OFF;
			//for(i=0;i<10;i++);
	 		}
	 	}
 	} 
 BACKLIGHT_ON
 //**************************	检测输入源视频格式
 t103_write(0x50,0x0f,0x00);
 
 while((t103_read(0x54,0x3a)&0x01)==0x01);
 
 if((t103_read(0x54,0x3c)&0x1)==0x1)
 	cur_mode=0;
 else
 	{cur_mode=1;
 	t103_init();
 	}
 	
//***************************	

 DetectNTSC_PAL();
 DetectNTSC_PAL();
 
 bluescrdisable();
 osddisable();
 osdstyle=2;
 testmode();


 
  //main loop
 while(1)
 {
 DetectNTSC_PAL();
 dokey(keyscan());
 statusscan();
 eeprom_check();
 leddisplay();
 timer_check();
 }
}

⌨️ 快捷键说明

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