#include "all.h"
void write_fi1256(unsigned int fs)
{
unsigned char Db1,Db2,Pb;
unsigned int NDB;
unsigned long dis;
NDB=fs/16-38;
if(NDB>0 && NDB<160) Pb=0XA0; //频段计算 VHF-L
else if(NDB>168 && NDB<466) Pb=0X90; // VHF-H
else if(NDB>470 && NDB<863) Pb=0X30; //
Db1=fs>>8;
Db2=fs;
twi_start();
twi_wr(0xC0);
twi_data(Db1); //Db1
twi_data(Db2); //Db2
twi_data(0x8E);//Cb
twi_data(Pb);//Pb
twi_stp();
dis=fs;
dis=dis*100/16-3800;
dis_float(0,3,2,5,0,dis);
//delay_us(10000);
}
unsigned char read_fi1256(void)
{
unsigned char data;
twi_start();
data=twi_rd(0xC1);
twi_stp();
return data;
}
void Manual(void) //手动搜台
{
unsigned int fs=2000;
while(1)
{
dis_num(112,0,num[kb]);
if(kb==5 && kb_v==1)
{
kb_v=0;
fs++;
}
else if(kb==6 && kb_v==1)
{
kb_v=0;
fs--;
}
else if(kb==3 && kb_v==1)
{
kb_v=0;
fs-=500;
}
else if(kb==2 && kb_v==1)
{
kb_v=0;
fs+=500;
}
else if(kb==1 && kb_v==1)
{
break;
kb_v=0;
}
write_fi1256(fs);
}
}
/***************自动搜台*********************/
/* 千万别被产品手册骗了!经测试:FL位始终为1,失去作用,
只能使用read_fi1256的后三位等于010来判断。搜到台时读到数为0x7a */
void auto_search(void)
{
unsigned int fs=2000;
unsigned char ch=0,flag=0;
ch=1;
dis_float(3,2,0,2,0,0);
while(fs<14420)
{
write_fi1256(fs);
fs++;
delay_us(500);
flag=read_fi1256();
if(flag==0x7A)
{
EEPROM_write(((unsigned int)ch)*2,fs>>8);
EEPROM_write((((unsigned int)ch)*2)+1,fs);
ch++;
dis_float(3,2,0,2,0,ch);
}
}
EEPROM_write(0x00,ch);
EEPROM_write(0x01,1);
dis_num(0,2,letter['F'-65]);
dis_num(8,2,letter['I'-65]);
dis_num(16,2,letter['N'-65]);
dis_num(24,2,letter['I'-65]);
dis_num(32,2,letter['S'-65]);
dis_num(40,2,letter['H'-65]);
}
void watch_TV(void)
{
unsigned char ch,ch_all,wr,rd,Db1,Db2;
unsigned int fs;
ch_all=EEPROM_read(0x00);
ch=EEPROM_read(0x01);
wr=1;
rd=1;
dis_num(32,2,letter['C'-65]);
dis_num(40,2,letter['H'-65]);
while(1)
{
if(kb_v==1 && kb==3) //切换频道
{
kb_v=0;
ch--;
if(ch<=0)
ch=ch_all;
rd=1;
}
else if(kb_v==1 && kb==2)
{
kb_v=0;
ch++;
if(ch>ch_all)
ch=1;
rd=1;
}
else if(kb_v==1 && kb==5) //微调
{
kb_v=0;
fs++;
wr=1;
}
else if(kb_v==1 && kb==6)
{
kb_v=0;
fs--;
wr=1;
}
else if(kb_v==1 && kb==4)
{
kb_v=0;
break;
}
if(rd==1) //读取存台
{
rd=0;
Db1=EEPROM_read(((unsigned int)ch)*2);
Db2=EEPROM_read((((unsigned int)ch)*2)+1);
fs=Db1;
fs=fs<<8;
fs=fs+Db2;
wr=1;
EEPROM_write(0x01,ch);
dis_float(40,2,0,2,0,ch);
}
if(wr=1)
{
wr=0;
write_fi1256(fs);
}
}
}