📄 main.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <main.h>
#include <i2c.h>
#include <fmd1216.h>
unsigned char tv_radio = 0;
#include <lcd.h>
#define MAX_CH_NO 30
unsigned char togglebit = 0;
unsigned char in_data = 0x26;
unsigned char auto_scan = 0;
unsigned char i;
unsigned char tune_coarse;
unsigned char tune_fine;
unsigned char total_ch_no=0;
unsigned char cur_ch_no = MAX_CH_NO;
unsigned char tv_format=0;
void store_ch_freq(void)
{
if(total_ch_no >= MAX_CH_NO)
return;
lo_freq = (in_freq + ATV_IF)*16/100;
pdivider_lo = lo_freq&0xff;
pdivider_hi = ((lo_freq>>8)&0xff);
// i2c_data = pdivider_lo;
i2c_write(x2402dev,total_ch_no*2,pdivider_lo);
delay30ms();
// i2c_data = pdivider_hi;
i2c_write(x2402dev,(total_ch_no*2)+1,pdivider_hi);
total_ch_no++;
}
void restore_ch_freq(void)
{
i2c_read(x2402dev,cur_ch_no*2);
pdivider_lo = i2c_data;
i2c_read(x2402dev,cur_ch_no*2+1);
pdivider_hi = i2c_data;
tcom_data(0x0a);
tcom_data(0x0d);
dis_data(cur_ch_no);
tcom_data(0x20);
dis_data(pdivider_hi);//for trace
tcom_data(0x20);
dis_data(pdivider_lo);//for trace
tcom_data(0x20);
lo_freq = (unsigned long)(pdivider_hi<<8) + (unsigned long)pdivider_lo;
lo_freq = lo_freq*25l;
lo_freq = lo_freq/4l;
in_freq = lo_freq - ATV_IF;
fine_value = 20;
wr_fmd1216_rf();
}
void skip_next_ch(void) //for chinese channel
{
if( tune_coarse == 0)
in_freq = 5750;
else if( tune_coarse == 1)
in_freq = 6550;
else if( tune_coarse == 2)
in_freq = 7700;
else if( tune_coarse == 3)
in_freq = 8500;
else if(tune_coarse > 3 && tune_coarse < 48)
in_freq = (unsigned long) (tune_coarse*800l) +8000l; // 11200-3200 = 8000
else if(tune_coarse > 47 && tune_coarse < 61)
in_freq = (unsigned long) (tune_coarse*800l) + 7900l; // 46300-38400 = 7900
else if(tune_coarse > 60 && tune_coarse < 94)
in_freq = (unsigned long) (tune_coarse*800l) + 11900l; // 60675-48800 = 11900
else
{
i2c_write(x2402dev,120,total_ch_no);
delay30ms();
auto_scan = 0;
cur_ch_no = 0;
restore_ch_freq();
init_fmd1216();
dis_freq();
}
tune_coarse++;
tune_fine = 0;
}
/*
void skip_next_ch(void) //for taiwan and us channel
{
if( tune_coarse == 0)
in_freq = 6100;
else if( tune_coarse == 1)
in_freq = 6700;
else if( tune_coarse == 2)
in_freq = 7300;
else if( tune_coarse == 3)
in_freq = 7700;
else if( tune_coarse == 4)
in_freq = 8300;
else if( tune_coarse == 5)
in_freq = 9100;
else if(tune_coarse > 5 && tune_coarse < 124)
in_freq = (unsigned long) (tune_coarse*600l) + 6100l;//9700 - 3600 = 6100
else
{
i2c_write(x2402dev,120,total_ch_no);
delay30ms();
auto_scan = 0;
cur_ch_no = 0;
restore_ch_freq();
init_fmd1216();
dis_freq();
}
tune_coarse++;
tune_fine = 0;
}
*/
void main()
{
main_init();
init_lcd();
i2c_init();
ir_init();
i2c_read(x2402dev,120);
if(i2c_data > 50)
total_ch_no = 50;
else
total_ch_no = i2c_data;
tcom_data(0x6c); //l
tcom_data(0x6f); //o
tcom_data(0x63); //c
tcom_data(0x6b); //k
tcom_data(0x65); //e
tcom_data(0x64); //d
tcom_data(0x20);
test_lcd();
init_fmd1216();
wr_fmd1216_rf();
wr_fmd1216_if_i();
dis_freq();
while(1)
{
if(tick_count >= 1)
{
if(auto_scan!=0)
{
rd_fmd1216_if();
dis_data(i2c_data);
tcom_data(0x20);
if(in_freq >= 4925 && in_freq <= 86350)
{
if((i2c_data&0xd9)==0xc0)
{
store_ch_freq();
skip_next_ch();
}
else if((i2c_data&0xf9)==0xd8)
{
store_ch_freq();
skip_next_ch();
}
else
{
if(tune_fine>=10)
{
tune_fine = 0;
skip_next_ch();
}
else
{
in_freq = in_freq + 5;
tune_fine++;
}
}
fine_value = 20;
wr_fmd1216_rf();
if((in_freq%25)==0)
{
init_fmd1216();
dis_freq();
}
}
else
{
auto_scan = 0;
}
}
tick_count = 0;
}
if(RMDTSET)
{
RMDTSET=0;
switch(RMDATA)
{
case 0x05: //set tv or radio mode
fine_value = 20;
if(tv_radio == TV_MODE)
{
//in_freq = 9710; // 97.10MHZ
digit5 = 0x30;
digit4 = 0x30;
digit3 = 0x39;
digit2 = 0x37;
digit1 = 0x31;
digit0 = 0x30;
tv_radio = FM_MODE;
cal_fm_freq();
}
else if (tv_radio == FM_MODE)
{
//in_freq = 53000; //530.00 MHZ
digit5 = 0x30;
digit4 = 0x35;
digit3 = 0x33;
digit2 = 0x30;
digit1 = 0x30;
digit0 = 0x30;
tv_radio = DVBT_MODE;
cal_dvbt_freq();
}
else
{
//in_freq = 18425; // 184.25MHZ
digit5 = 0x30;
digit4 = 0x31;
digit3 = 0x38;
digit2 = 0x34;
digit1 = 0x32;
digit0 = 0x35;
tv_radio = TV_MODE;
cal_in_freq();
if(tv_format==0)
wr_fmd1216_if_i();
else
wr_fmd1216_if_dk();
}
dis_freq();
break;
case 0x14: //play
fine_value = 20;
if(tv_radio==0)
cal_in_freq();
else
cal_fm_freq();
break;
case 0x1a: // next frequency
if(tv_radio != 0)
break;
if(cur_ch_no >= (total_ch_no-1))
cur_ch_no = 0;
else
cur_ch_no++;
restore_ch_freq();
init_fmd1216();
dis_freq();
break;
case 0x0e: // last frequency
if(tv_radio != 0)
break;
if(cur_ch_no==0)
{
if(total_ch_no > 0)
cur_ch_no = total_ch_no-1;
}
else
cur_ch_no--;
restore_ch_freq();
init_fmd1216();
dis_freq();
break;
case 0x0a: // fine - 0.05MHz
if(tv_radio==0)
{
if(fine_value > 0)
{
fine_value = fine_value - 1;
wr_fmd1216_rf();
init_fmd1216();
dis_freq();
}
}
else
{
in_freq = in_freq - 5; ;
wr_fmd1216rf_150mhz();
delay30ms();
wr_fmd1216rf_fm();
init_fmd1216();
dis_freq();
}
break;
case 0x1e : //fine tune +
if(tv_radio==0) // +0.05MHz
{
if(fine_value < 40)
{
fine_value = fine_value + 1;
wr_fmd1216_rf();
init_fmd1216();
dis_freq();
}
}
else // + 0.05 MHz
{
in_freq = in_freq + 5;
wr_fmd1216rf_150mhz();
delay30ms();
wr_fmd1216rf_fm();
init_fmd1216();
dis_freq();
}
break;
case 0x50 : //set frequency
digit_pos = 0;
init_fmd1216();
dis_freq();
move_cursor(digit_pos+6);
break;
case 0x18 : //move cursor left
move_cursor_left();
break;
case 0x1c : //move cursor right
move_cursor_right();
break;
case 0x16 : //num 0
set_digit_value(0x30);
move_cursor_right();
break;
case 0x09 : //num 1
set_digit_value(0x31);
move_cursor_right();
break;
case 0x1d : //num 2
set_digit_value(0x32);
move_cursor_right();
break;
case 0x1f : //num 3
set_digit_value(0x33);
move_cursor_right();
break;
case 0x0d : //num 4
set_digit_value(0x34);
move_cursor_right();
break;
case 0x19 : //num 5
set_digit_value(0x35);
move_cursor_right();
break;
case 0x1b: //num 6
set_digit_value(0x36);
move_cursor_right();
break;
case 0x11 : //num 7
set_digit_value(0x37);
move_cursor_right();
break;
case 0x15 : //num 8
set_digit_value(0x38);
move_cursor_right();
break;
case 0x17 : //num 9
set_digit_value(0x39);
move_cursor_right();
break;
case 0x01: //
if(tv_radio!=0)
break;
auto_scan = 1;
fine_value = 20;
total_ch_no = 0;
in_freq = 4950;
wr_fmd1216_rf();
init_fmd1216();
dis_freq();
tune_coarse = 0;
tune_fine = 0;
tick_count=0;
break;
case 0x54: //
fine_value = 20;
if(tv_format==0)
{
wr_fmd1216_if_dk();
tv_format = 1;
}
else
{
wr_fmd1216_if_i();
tv_format = 0;
}
break;
default :
if(RMDATA>128)
{
EA =1;
break;
}
else
EA=1;
break;
} //switch
// in_data = RMDATA;
// dis_data(in_data);
// tcom_data(0x20);
}
} //while
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -