void search(bit mode) //手动搜台
{
get_frequencry();
if(mode)
{
frequencry+=100;
if(frequencry>max_freq)
frequencry=87500;
}
else
{
frequencry-=100;
if(frequencry frequencry=108000;
}
get_pll();
write_data[0]=(pll>>8)&0x3f;
write_data[1]=pll&0xff;
write_data[2]=0x61;
write_data[3]=0x11;
write_data[4]=0x40;
write_radio();
}
void auto_search(bit mode) //自动搜台
{
get_frequencry();
get_pll();
if(mode)
{
write_data[2]=0xe1;
if(pll>max_pll)
pll=min_pll;
}
else
{
write_data[2]=0x61;
if(pllpll=max_pll;
}
write_data[0]=(pll>>8)&0x3f+0x40; //自动搜台
write_data[1]=pll&0xff;
write_data[2]=0x61;
write_data[3]=0x11;
write_data[4]=0x40;
write_radio();
read_radio();
while(!(read_data[0]&0x80)) //最高位为1 电台就绪 否则一直读
{
read_radio();
}
}
void delay_xms(unsigned int count) //1MS延时函数
{
register unsigned char j;
while (count --)
{
for (j=0;j<230;j++);
}
}
unsigned char GetKey() //键盘处理函数
{
unsigned char m,n,e=0xff;
KEY = 0x0f; //键盘口置00001111
if (KEY != 0x0f) //查寻键盘口的值是否变化
{
delay_xms(20); //延时20毫秒
if (KEY != 0x0f) //有键按下处理
{
m = KEY; //键值放入寄存器m
}
KEY = 0xf0; //将键盘口置为11110000
n = KEY; //将第二次取得值放入寄存器n
m |= n;
switch(m)
{
case 0x7e: e = 0x00; break;
case 0xbe: e = 0x01; break;
case 0xde: e = 0x02; break;
case 0xee: e = 0x03; break;
case 0x7d: e = 0x04; break;
case 0xbd: e = 0x05; break;
case 0xdd: e = 0x06; break;
case 0xed: e = 0x07; break;
case 0x7b: e = 0x08; break;
case 0xbb: e = 0x09; break;
case 0xdb: e = 0x0a; break;
case 0xeb: e = 0x0b; break;
case 0x77: e = 0x0c; break;
case 0xb7: e = 0x0d; break;
case 0xd7: e = 0x0e; break;
case 0xe7: e = 0x0f; break;
default: break;
}
}
KEY = 0x0f;
while (KEY != 0x0f);
return (e);
}
void main(void)
{
unsigned char i;
TMOD = 0x11;
TH0 = 0x5d;
TL0 = 0x3d;
TR0 = 0;
TH1 = 0x5d;
TL1 = 0x3d;
TR1 = 0;
PCON = 0x00;
SCON = 0xD0;
IP = 0x14;
EX0 = 1;
IT0 = 1;
ET0 = 1;
EX1 = 1;
IT1 = 1;
ES = 0;
EA = 0;
BUS_MODE=0;
write_radio();//初始写入 90M
frequencry = 90000;
while(1)
{
i = GetKey();
switch (i)
{
case 0x00:
search(1);
break;
case 0x01:
search(0);
break;
case 0x02:
auto_search(1);
break;
case 0x03:
auto_search(0);
break;
default: break;
}
}
}