?? tft_7._c
字號:
//ICC-AVR application builder : 2004-12-17 14:40:37
// Target : M8
// Crystal: 4.0000Mhz
#include <iom8v.h>
#include <macros.h>
#include "tft_7.h"
unsigned char fff=0;
unsigned int sync_time=0;
unsigned char v_black=0;
unsigned char jjj=0;
unsigned char iii=0;
void port_init(void)
{
PORTB = 0x10;
DDRB = 0xee;
PORTC = 0x00; //m103 output only
DDRC = 0xff;
PORTD = 0x00;
DDRD = 0xff;
}
//TIMER0 initialisation - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value: 9.984mSec (0.2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0xD9; //set count
TCCR0 = 0x05; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
unsigned char static count_led=0,count_key=0,count_key2=0,fk0=0;
TCNT0 = 0xD9;
if((++count_led)==50)
{
count_led=0;
PORTC^=PLEDR;
fff=1;
}
if(OSD_time!=0)
OSD_time--;
if(fkey==1)
{
if((++count_key)==50)
fk0=1;
}
else
{
count_key=0;
count_key2=0;
fcontinuous=0;
fk0=0;
}
if(fk0==1)
{
if((++count_key2)==10)
{
fcontinuous=1;
count_key2=0;
}
}
}
//TIMER1 initialisation - prescale:1
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFE; //setup
TCNT1L = 0x70;
OCR1AH = 0x01;
OCR1AL = 0x90;
OCR1BH = 0x01;
OCR1BL = 0x90;
ICR1H = 0x01;
ICR1L = 0x90;
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
unsigned char static count_adc=0;
//TIMER1 has overflowed
TCNT1H = 0xFE; //reload counter high value
TCNT1L = 0x70; //reload counter low value
if((++count_adc)==65)
count_adc=0;
if(count_adc<volume_register && (PIND&PTV)==0) //音量
PORTB|=PVOL;
else
PORTB&=~PVOL;
if(count_adc<user_adjust[0][0]) //亮度
PORTB|=PBRI;
else
PORTB&=~PBRI;
if(count_adc<user_adjust[0][1]) //對比度
PORTD&=~PCON;
else
PORTD|=PCON;
if(count_adc<user_adjust[0][2]) //色飽和度
PORTD|=PCOL;
else
PORTD&=~PCOL;
if(count_adc<user_adjust[0][3]) //色調
PORTB|=PHUE;
else
PORTB&=~PHUE;
//同步計數
v_sync_count++;
if((PINB&VSYNC)==0)
{
if(v_sync_count>140)
{
v_black=1;
sync_time=v_sync_count;
}
v_sync_count=0;
}
}
//TWI initialisation
// bit rate:2
void twi_init(void)
{
TWCR= 0X00; //disable twi
TWBR= 0x02; //set bit rate
TWSR= 0x01; //set prescale
TWAR= 0x02; //set slave address
TWCR= 0x44; //enable twi
}
//call this routine to initialise all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
timer1_init();
twi_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x05; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}
//
void main(void)
{
struct cmenu{
unsigned char item;
unsigned char page;
} menu={0,0},amount;
unsigned int tmp;
unsigned char command;
unsigned char fback,natural;
init_devices();
power_on();
while(1)
{
if(OSD_time==0)//關閉OSD
{
OSD_off();
menu.item=0;
menu.page=0;
FOSD=0;
}
if(FOSD!=DIS_MENU1 && FOSD!=DIS_MENU2)//復位菜單指針
{
menu.item=0;
menu.page=0;
}
if(user_config[video_input]==TV)
{
amount.item=9;
amount.page=2;
}
else
{
amount.item=6;
amount.page=1;
}
update_user_adjust(); //更新用戶設置
//收集命令
if((command=key(6))==0xff)
command=key(7);
if(command!=0xff)
OSD_time=OSD_TIME;
//處理命令
switch(command)
{
case KMENU: //菜單鍵
if((++menu.page)>amount.page)
{
menu.page=0;
OSD_time=0;
}
if(menu.page==1)
dis_menu(menu.item=1);
if(menu.page==2)
dis_menu(menu.item=7);
break;
case KUP: //頻道加/菜單下
if(menu.page!=0)
{
if((++menu.item)>amount.item)
menu.item=1;
if(menu.item>6)
menu.page=2;
else
menu.page=1;
dis_menu(menu.item);
}
else if(user_config[video_input]==TV)
{
if(user_config[channel]<user_config[ch_max])
CHwrite(++user_config[channel]);
dis_video(TV);
}
break;
case KDOWN: //頻道減/菜單上
if(menu.page!=0)
{
if((--menu.item)==0)
menu.item=amount.item;
if(menu.item>6)
menu.page=2;
else
menu.page=1;
dis_menu(menu.item);
}
else if(user_config[video_input]==TV)
{
if(user_config[channel]>0)
CHwrite(--user_config[channel]);
dis_video(TV);
}
break;
case KLEFT: //音量減/亮度減
if(menu.page!=0)
{
switch(menu.item)
{
case 1:
case 2:
case 3:
case 4:
if(user_adjust[user_config[video_input]][menu.item-1]>0)
EEPROMwrite((user_config[video_input]-1)*6+9+menu.item,--user_adjust[user_config[video_input]][menu.item-1]);
break;
case 5:
if(user_config[video_input]!=TV)
{
screen_mirror(user_adjust[user_config[video_input]][4]^=1);
EEPROMwrite((user_config[video_input]-1)*6+9+menu.item,user_adjust[user_config[video_input]][4]);
}
break;
case 6:
if((++user_adjust[user_config[video_input]][5])==3)
user_adjust[user_config[video_input]][5]=0;
EEPROMwrite((user_config[video_input]-1)*6+15,user_adjust[user_config[video_input]][5]);
screen_mode(user_adjust[user_config[video_input]][5]);
break;
// case 7: //停止自動搜臺
// auto_tune();
// break;
case 8: //手動搜臺
tmp=CHwrite(user_config[channel]);
FI1256write(--tmp);
EEPROMwrite(user_config[channel]*2+48,tmp/256);
EEPROMwrite(user_config[channel]*2+49,tmp%256);
break;
case 9: //頻道
if(user_config[channel]>0)
{
CHwrite(--user_config[channel]);
OSD_out_num(3,11,user_config[channel],0);
}
break;
}
dis_menu(menu.item);
}
else if(user_config[video_input]==TV)
{
if(user_config[volume]>0)
EEPROMwrite(volume,--user_config[volume]);
dis_volume();
}
break;
case KRIGHT: //音量加/亮度加
if(menu.page!=0)
{
switch(menu.item)
{
case 1:
case 2:
case 3:
case 4:
if(user_adjust[user_config[video_input]][menu.item-1]<63)
EEPROMwrite((user_config[video_input]-1)*6+9+menu.item,++user_adjust[user_config[video_input]][menu.item-1]);
break;
case 5:
if(user_config[video_input]!=TV)
{
screen_mirror(user_adjust[user_config[video_input]][4]^=1);
EEPROMwrite((user_config[video_input]-1)*6+9+menu.item,user_adjust[user_config[video_input]][4]);
}
break;
case 6:
if((++user_adjust[user_config[video_input]][5])==3)
user_adjust[user_config[video_input]][5]=0;
EEPROMwrite((user_config[video_input]-1)*6+15,user_adjust[user_config[video_input]][5]);
screen_mode(user_adjust[user_config[video_input]][5]);
break;
case 7: //停止自動搜臺
auto_tune();
break;
case 8: //手動搜臺
tmp=CHwrite(user_config[channel]);
FI1256write(++tmp);
EEPROMwrite(user_config[channel]*2+48,tmp/256);
EEPROMwrite(user_config[channel]*2+49,tmp%256);
break;
case 9: //頻道
if(user_config[channel]<CHANNEL_AMOUNT)
{
CHwrite(++user_config[channel]);
OSD_out_num(3,11,user_config[channel],0);
}
break;
}
dis_menu(menu.item);
}
else if(user_config[video_input]==TV)
{
if(user_config[volume]<63)
EEPROMwrite(volume,++user_config[volume]);
dis_volume();
}
break;
case KAV: //視頻選擇
if((PINB&FPBACK)!=FPBACK)
{
user_config[video_input]++;
if(user_config[video_input]>BACK)
user_config[video_input]=TV;
exe_video_choose(user_config[video_input]);
EEPROMwrite(video_input,user_config[video_input]);
}
break;
}
if((PINB&FPBACK)==FPBACK)
{
if(fback==0)
{
exe_video_choose(BACK);
fback=1;
OSD_time=OSD_TIME;
}
natural=0;
}
else
{
if(natural==0)
{
natural=1;
exe_video_choose(user_config[video_input]);
OSD_time=OSD_TIME;
}
fback=0;
}
if(v_black==1)
{
v_black=0;
if(fff==1)
{
fff=0;
if(sync_time<160) //NTSC
pal_ntsc(NTSC);
else
pal_ntsc(PAL);
user_config[volume]=sync_time>>1;
dis_volume();
OSD_time=100;
}}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -