📄 main.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 + -