?? t10a2_main.c
字號(hào):
/*************************2006/08/14/修改******************************/
//ICC-AVR application builder : 2006-8-7 16:54:17
// Target : M64
// Crystal: 8.0000Mhz or 16.0000MHZ
//2006/12/8修改,軟件改版,只分三種播放環(huán)境,改遙控鍵,改菜單,信號(hào)檢測(cè)等*/
#include <iom64.h>
#include <inavr.h>
#include <ioavr.h>
#include "T10A2_flash.H"
#include "T10A2_main_define.H"
//extern Lighten_VFD();
void port_init(void);
void watchdog_init(void);
void timer0_init(void);
void timer1_init(void);
void timer2_init(void);
//void int4_isr(void); //INT4 remote
//void timer0_ovf_isr(void);//T0
void adc_init(void);
//void adc_isr(void); //AD轉(zhuǎn)換,中斷22
void twi_init(void); //I2C
void i2cReceiveByte(unsigned char ackFlag);
//void twi_isr(void); //I2C 中斷34
void twi_receive_data_disposal(void);
void init_devices(void); // 初始化寄存器
void delay_1us(void);
void delay_us(uint i);
void delay_ms(uint j);
//void writebyte_6306(uchar temp_6306);//寫字節(jié)
//void write_address_6306(uchar __flash *pa);//送五個(gè)字節(jié),一段
void write_yigezi_display(uchar temp,uchar temp1);//寫一個(gè)字
void write_data_display(uchar i,uchar temp,uchar __flash *ps);//送不定長(zhǎng)字給顯示暫存器 i表開始字地址,temp 表末地址(0-13)
void write_data_display_1(uchar i,uchar temp,uchar *ps);//
void display_slow_side_open(void);
void display_slow_right_open(void);//慢顯,往右開屏
//void dispose_qidian(void); //頻段處理
//void AD_select_channel(void);
//void ad_gain_coutrol_disposal(void);
void SendData_R2S15902(uchar temp_r2s,uchar number_r2s);
void sendbit_r2s15902(uchar temp_bit);
void sendbyte1_r2s15902(void);//input_select+tone
void sendbyte2_r2s15902(void);//fl,fr_vol
void sendbyte3_r2s15902(void);//cen,sw_vol
void sendbyte4_r2s15902(void);//sl,sr_vol
void STR(void);//PT2313 ic
void STOP(void);
void write_2313_byte(uchar s);
void write_2313_page(void);
void write_mic_delay(void);
void vol_max(void);
void tv_vol_disposal(void);//處理TV模式 音量
void ht_vol_disposal(void);
void cd_vol_disposal(void);
void vol_up_slowly_disposal(void);
void reset_disposal(void);
void remote_disp_init(void);//remote 前面段處理
void remote_disp_init_1(void);//
void display_init(void);
void remote_usbcard_on_disposal(void);
void remote_usbcard_on_disposal_1(void);
void remote_disposal_usbcard_inputselect(void);
void remote_disposal_pingheng(void);
void remote_disposal_pinghengjian(void);//remote處理子程序
void remote_disposal_pinghengjia(void);
void remote_disposal_EQ_jian(void);
void remote_disposal_EQ_jia(void);
void remote_disposal_EQ_disp(void);
void remote_display_mic(void);
void remote_disposal_mic_jia(void);
void remote_disposal_mic_jian(void);
void remote_disposal_mic_disp(void);
void tv_pingdian_disposal(void);
//void tv_send_datato_disp_buffer(void);
void input_select_autojia(void);
//void input_select_disposal(void);
void mode_select_disposal(void);
void output_disposal(void);
void input_select_init(void);//輸入初始化
void video_disposal(void);/*未完*/
void static_state_disposal(void);//無信號(hào)進(jìn)入待機(jī)狀態(tài)
void turn_on_init(void);//開機(jī)初化始
void turn_off_init(void);
//void SendDataToDisp_Buffer(uchar __flash *tp0,uchar __flash *tp1,uchar __flash *tp2,uchar __flash *tp3);
void Temportect_disposal(void);
void Dcportect_disposal(void);
void Shortportect_disposal(void);
void single_check_turnoff(void);//無信號(hào)自動(dòng)關(guān)機(jī)
void karaok_insert_pullout_disposal(void);
void auto_search_channel_theatre();
void osd_tiaoshi_display(void);//新加,用于菜單顯示
void tv_anjian_disposal1(void);//按鍵處理子程序
void ht_anjian_disposal2(void);
void cd_anjian_disposal3(void);
void mic_anjian_disposal5(void);
void setup_anjian_disposal6(void);
void setup_anjian_disposal6_0(void);
void menu_disposal(void); //菜單按鍵處理主程序
void start_cm6930(void);
void stop_cm6930(void);
void write_cm6930(uchar data_cm6930);
uchar read_cm6930(void);
uchar key_cm6930(void);
void touch_cm6930_disposal(void);//面板感應(yīng)處理
void touch_disposal(void);//面板按鍵處理
void write4094(uchar data4094);
void LED_Flash(void);
void Display_Proc(uchar Display_Mode);
void VFD_Display(void);
unsigned char Initial_Display(void);
void CLEAR_VFD(void);
void ini_CLEAR_VFD(void);
void Initial_VFD(void);
void Rotary_Proc(void);
void Temperature_Detect(void);
void fshizhen(void);
void sshizhen(void);
void port_init(void)
{
// PORTA = 0x3b;//3b 1:output 0=input 00111011
// DDRA = 0xDF;
PORTA = 0x80; //0xe1; //11100001 10000000
DDRA = 0xbf; //0xef; //11101111 10111111
// PORTB = 0x08; 00001000
// DDRB = 0xfd;//#01111101B;//
PORTB = 0xc0; //待定
DDRB = 0x3f;
// PORTC = 0xF1; 11110001
// DDRC = 0x6E;
PORTC = 0x93; //0xb1; //10000001 10010011
DDRC = 0xdF; //0x7e; //01111110 11011111
// PORTD = 0x2F; 00101111
// DDRD = 0x00;
PORTD = 0x73; //01010011
//PORTD = 0xdf; //11011111
DDRD = 0xac; //10101100
// PORTE = 0xff; 11111111
// DDRE = 0xac;//input
PORTE = 0x93; //高3位顯示待定
DDRE = 0xec;//input 11101100 10010011
// PORTF = 0x00;//AD口 00000000
// DDRF = 0x0e;
PORTF = 0x08;//AD口
DDRF = 0x00;
// PORTG = 0x08; 00001000
// DDRG = 0x04;
PORTG = 0x05; //00000101
DDRG = 0x05; //00000101
SPCR = 0x1C;
//SPSR = 0x01;
}
//Watchdog initialize
// prescale: 1024K
void watchdog_init(void)/* 看門狗用上了,要試一下*/
{
WDR(); //this prevents a timout on enabling
WDTCR=0x1f;
WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//TIMER0 initialize - prescale:32
// WGM: Normal
// desired value: 2KHz
// actual value: 2.000KHz (0.0%)
void timer0_init(void)
{
//TCCR0 = 0x00; //stop
//ASSR = 0x00; //set async mode
//TCNT0 = TIMER0_DATA;//set count
//OCR0 = 0x7D; //比較寄存器,無用//0xFA 16M
//TCCR0 = 0x07; //start timer //0X03
ASSR = 0x00; //set async mode
TCNT0 = 0; //set count
OCR0 = 100;
TCCR0 = (1<<WGM01)|(1<<COM00)|(1<<CS01)|(1<<CS00); //start timer
}
//TIMER1 initialize - prescale:8
// WGM: 5) PWM 8bit fast, TOP=0x00FF
// desired value: 10KHz
// actual value: 7.813KHz (28.0%)
void timer1_init(void)//注意不用中斷產(chǎn)生 占空比可變的方波
{
/*TCCR1B = 0x00; //stop
TCNT1H = 0x00; //setup 0xFF 初始值送0000,計(jì)數(shù)到滿0x00ff后自動(dòng)清0,
TCNT1L = 0x00;//0x01
//OCR1AH = 0x00;//只有A匹配//產(chǎn)生方波,OC1A輸出,同時(shí)匹配值隨時(shí)可變.
//OCR1AL = 0x00;
OCR1AH = 0x00;//unused
OCR1AL = 0xFF;
//OCR1BH = 0x00;//unused
//OCR1BL = 0xFF;
OCR1BH = 0x00;//只有B匹配
OCR1BL = 0x00;
OCR1CH = 0x00;//unused
OCR1CL = 0xFF;
ICR1H = 0x00;
ICR1L = 0xFF;
//TCCR1A = 0x81;//C1 反向 //正向時(shí),0x21則是B匹配,OC1B輸出, 0x09則是C匹配,OC1C輸出
TCCR1A = 0x21;
TCCR1B = 0x0a; //start Timer 8分頻 TCCR1B|=0x08;//表示快速中*/
}
//TIMER2 initialize - prescale:256分頻 //溢出清除標(biāo)志
// WGM: Normal
// desired value: 1KHz
// actual value: 1.008KHz (0.8%)
void timer2_init(void)/*TIFR&=~BIT(TOV2);T2溢出標(biāo)志位清除,計(jì)數(shù)31為1ms,T2不中斷,只計(jì)數(shù)*/
{
TCCR2 = 0x00; //stop
TCNT2 = 0x00; //setup e1
OCR2 = 0x1F; //輸出比較寄存器,這里沒有用
TCCR2 = 0x04; //start
}
//TIMER3 initialize
void timer3_init(void)/*TIFR&=~BIT(TOV2);T2溢出標(biāo)志位清除,計(jì)數(shù)31為1ms,T2不中斷,只計(jì)數(shù)*/
{
TCCR3A = 0x00;
TCCR3B = 0x00; //stop
TCNT3H = 0xFF; //1MS定時(shí)
TCNT3L = 0x06;
TCCR3B = 0x03; //start Timer 64分頻 4us
}
#pragma vector= INT4_vect//:6
__interrupt void int4_isr(void)//int4
{
uchar j;
TCCR2 = 0x00;
if(first_int_f==0)
{
remote_data=0;
remote_data1=0;
remote_bit=0;
first_int_f=1;
}
else
{
j=TCNT2;
if(j<TIMER2_SMALL||j>TIMER2_LARGE)
{
first_int_f=0;
remote_bit=0;
}
else
{
remote_bit++;
remote_data<<=1;
if(j>TIMER2_MIDDLE)
remote_data|=BIT(0);
switch(remote_bit)
{
case 8:
remote_data1=remote_data;
break;
case 16:
remote_data2=remote_data;
if(remote_data1==0x18)
{
if(remote_continue_f==1)
{
if(remote_data2!=remote_data2bak)
{
remote_continue_f=1;
remote_counter1=0;
remote_data2bak=remote_data2;
}
else
{
switch(remote_data2)
{
case 0x0e://左
case 0x0f://?
if(((address_buffer&0xf0)==0x60)||((address_buffer&0xf0)==0x70)||((address_buffer&0xf0)==0x90))
{
remote_counter1++;
if(remote_counter1<5)remote_data2=0xff;//500ms
else {remote_counter1=4;}
}
else remote_data2=0xff;
break;
case 0x15: //vol+
break;
case 0x14: //vol-
break;
case 0x00: //standby
break;
default: //其余按鍵不連續(xù)用 //遙控取數(shù)取remote_data2
remote_data2=0xff;
break;
}
}
}
else
{
remote_continue_f=1;
remote_counter1=0;
remote_data2bak=remote_data2;
}
first_int_f=0;
}
else
remote_data2=0xff;
remote_bit=0;
remote_data=0;
remote_data1=0;
first_int_f=0;
break;
default:
break;
}
}
}
remote_counter=0x00;
TCNT2 = 0x00; //
TCCR2 = 0x04;
}
/*
#pragma vector= TIMER0_OVF_vect//:17
__interrupt void timer0_ovf_isr(void)
{
SEI();
TCNT0 = TIMER0_DATA; //reload counter value //500us定時(shí)
remote_counter++;
grid_counter++;
counter_1ms++;
//if(counter_1ms%10 == 0)
//{
time_flag|=BIT(FLAG_5MS); //10us標(biāo)志位
//}
if(counter_1ms>=2)
{
counter_1ms=0;
counter_10ms++;
time_flag|=BIT(FLAG_10MS); //10us標(biāo)志位
}
if(grid_counter==13)grid_counter=0;//如不穩(wěn)定改成>=
}*/
#pragma vector= TIMER3_OVF_vect//:17
__interrupt void timer3_ovf_isr(void)
{
SEI();
TCNT3H = 0xFF; //1MS定時(shí)
TCNT3L = 0xe1; //0x06 0x83
//VFD_isr(); //轉(zhuǎn)移到LED_FLASH里去
Rotary_Proc(); //加按鍵燈
LED_Flash();
if (LED_Flash_Timer != 0)
{
LED_Flash_Timer--;
}
if(counter_1ms%8 == 0)
{
remote_counter++;
}
//grid_counter++;
counter_1ms++;
if(counter_1ms%40 == 0)
{
time_flag|=BIT(FLAG_5MS); //5MS標(biāo)志位
}
if(counter_1ms>=80)
{
counter_1ms=0;
counter_10ms++;
time_flag|=BIT(FLAG_10MS); //10ms標(biāo)志位
b_stop_beep_timer++;
if (po_buzzer() && b_stop_beep_timer>=10)
{
po_buzzer_set(0);
}
}
//if(grid_counter==13)grid_counter=0;/*如不穩(wěn)定改成>=*/
}
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ACSR = 0x80;
ADCSRB = 0x00;
ADCSRA = 0x82;
//Current_Spect=SpectrumTable[0];
}
#pragma vector= ADC_vect//:22
__interrupt void adc_isr(void)
{
static unsigned char last;
unsigned char tmp,tmp2,step;
SEI();
//PORTE ^= 1<<4;
step=Using_Temporary[0];
ADCSRA=0xae;
ADMUX=64+32+AD_TIME;
if(step==0)
{
last=AD_Bias;
}
if(step<192)
{
tmp=ADCH;
if(step<64)
{
if(tmp>last)
{
Using_Temporary[1]|=4;
}
tmp2=tmp-AD_Bias;
if(tmp2 & 128)
{
tmp2=0-tmp2;
}
if(tmp2<Using_Temporary[3])
{
if(Using_Temporary[1] & 4)
{
if(tmp>last)
{
Using_Temporary[3]=tmp2;
Using_Temporary[2]=step;
}
}
else
{
Using_Temporary[3]=tmp2;
Using_Temporary[2]=step;
}
}
}
if(step==97)
{
Using_Temporary[1] |= 1;
}
Using_Temporary[step+3]=tmp;
last=tmp;
ADCSRA=0xbe;
}
else
{
ADC_BREAK;
ADCSRA=0x83;
if(step==(192+48+10))step=192;
}
step++;
Using_Temporary[0]=step;
return;
}
/*#define TWPS0 0
#define TWPS1 1
#define TWEN 2
#define TWIE 0
#define TWEA 6
#define TWINT 7
#define TWSTA 5
#define TWSTO 4 */
void twi_init(void)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -