📄 key.c
字号:
#include <w77e58.h>
#include <stdio.h>
#include "struct.h"
#include "china_ch.h"
#include<intrins.h>
#define ch_64 128//存储频道地址
#define ch_cun 10//存储总频道数地址
#define DEBUG 1
char menu_cr1;//菜单位置1
char menu_cr2;//菜单位置2
unsigned char chanle;//当前使用频道值
unsigned char chan_le;//存储总频道数
extern unsigned char pos;//当前节目
extern unsigned char sound;//当前节目声音中频
extern unsigned char tv_av;//tv/av
extern unsigned char slep;//静音
extern unsigned char band;////波段
void daya1(unsigned long i);
extern void menu_main( char r);
extern void av_menu( char r);//tv/av1/av2/av3
extern void vol_main( char r);//
extern void vol_av( char r);
extern void jintu(unsigned int r,unsigned int l,
unsigned int h, unsigned int op);//进度条
extern void osd_start0();
extern void osd_start1();
extern void osd_start2();//无信号时 小字符
extern void osd_start3();//有信号时 小字符
extern void delay1(unsigned int i);
extern void wirte_24c64(unsigned int address,unsigned char fb[],unsigned char su);
extern void wirte_24c64a(unsigned int address,unsigned char fb);
extern void read_24c64(unsigned int address,unsigned char fb[],unsigned char su);//多字节读
extern unsigned char i2c_reada(unsigned int address);//单字节读
extern void tuning_start();//调谐器初始化
extern void tuning_freq(tv ch);//调到频道
extern void tda9886_set(av sou);
void ret_ch(ret_s dv,unsigned char xh);//保存有信号频道
void tuning_cun(unsigned char i);//调谐到预定频道
void key_menu();
bit key1();//菜单
bit key2();//-
bit key3();//+
bit key4();//开关机
extern bit pal_ntsc();
extern bit p_n;//P/N标志
extern void osd_starta();
extern void osd_startb();
extern void tongxin_rxd();//接收下传命令
void tune_a();//进入自动选台
void tune_b();//进入手动选台
void weitiao();//进入微调
void exit();//退出菜单
void band_s();//波段
void vol_off();//进入静音
void posa();//节目
void sound_select();//进入声音中频调节
void tv_av_select();//进入TV/AV1/AV2
sbit key1_menu=P3^4;
sbit key2_up=P3^5;
sbit key3_np=P3^6;
sbit key4_pow=P3^7;
sbit signal= P1^2;//信号检测
void key_menu()
{
if(key1())//进入1级设置菜单--图象
{ menu_cr1=0;//菜单位置1
menu_cr2=0;//菜单位置2
chanle=0;
if(signal)
{
pal_ntsc();
if(p_n)
osd_start3();
else osd_startb();
}
else osd_start2();
menu_main(0);//显示菜单
vol_main(0);
jintu(chanle,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
#if(DEBUG)
printf("菜单 1\n");
#endif
while(1)
{
if(key3())//+
{
menu_cr1++;
if(menu_cr1>4)
menu_cr1=0;
menu_main(menu_cr1);
vol_main(menu_cr1);
jintu(chanle,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
}
if(key2())//-
{
menu_cr1--;
if(menu_cr1<0)
menu_cr1=4;
menu_main(menu_cr1);
vol_main(menu_cr1);
jintu(chanle,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
}
if(key4())//选择运行调节
{
switch(menu_cr1)
{
case 0: posa();break;//节目
case 1: band_s();break;//波段
case 2: tune_a();exit();return;//进入自动选台
break;
case 3: tune_b(); break;// 进入手动选台
case 4: weitiao();//进入微调
break;
default:;
}
}
/**********************/
if(key1())//第2级菜单
{
if(signal)
{
pal_ntsc();
if(p_n)
osd_start3();
else osd_startb();
}
else osd_start2();
av_menu(0);
vol_av(0);
while(1)
{
if(key3())//+
{
menu_cr2++;
if(menu_cr2>2)
menu_cr2=0;
av_menu(menu_cr2);
vol_av(menu_cr2);
}
if(key2())//-
{
menu_cr2--;
if(menu_cr2<0)
menu_cr2=2;
av_menu(menu_cr2);
vol_av(menu_cr2);
}
if(key4())
{
switch(menu_cr2)
{
case 0: sound_select();//进入声音中频调节
break;
case 1: tv_av_select();//进入TV/AV1/AV2
break;
case 2: vol_off();//进入静音
break;
default:;
}
}
if(key1())//退出菜单
{
exit();
return;
}
}
}
/**********************/
}
}
}
void tune_a()//进入自动选台
{
unsigned char i;
unsigned int h;
tv ac;
ret_s hv;
av as;
chanle=0;
chan_le=0;//储存频道数清除
as.f_vif=china_ch.pic_if;
as.off_audio=slep;
as.sound_freq=sound;
tda9886_set(as);
for(i=0;i<china_ch.opn;i++)
{
jintu(i,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
ac.f_if2=china_ch.cen_if2;
ac.f_step=china_ch.fsteps;
ac.fif_bw=china_ch.f_ifbwith;
ac.rf=china_ch.chan[i].cennter_freq;
tuning_freq(ac);//调到频道
daya1(10000);
#if(DEBUG)
h=i;
printf("自动选台 i=%u\n",h);
#endif
if(signal)
{
if(pal_ntsc())
{
hv.country=1;
hv.chh=i;
hv.sound_freqf=sound;
hv.rff=china_ch.chan[i].cennter_freq;
hv.low_freqf=china_ch.chan[i].low_freq;
hv.up_freqf=china_ch.chan[i].up_freq;
hv.pic_if=china_ch.pic_if;
hv.f_iff2=china_ch.cen_if2;
hv.fif2_bw=china_ch.f_ifbwith;
hv.f_stepf=china_ch.fsteps;
ret_ch(hv,chanle);//保存有信号频道
#if(DEBUG)
printf("有信号 i=%u,中心频率=%f\n",h,hv.rff);
#endif
chanle++;
}
}
}
chan_le=chanle;
wirte_24c64a(ch_cun,chan_le);//保存有信号总频道数
chanle=0;
tuning_cun(chanle);//调谐到预定频道
#if(DEBUG)
printf("自动选台完成\n ");
#endif
}
void tune_b()//进入手动选台
{
unsigned char i;
unsigned int f;
tv ac;
i=0;
while(1)
{
if(key3())//+
{
i++;
if(i>china_ch.opn)
i=0;
jintu(i,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
ac.f_if2=china_ch.cen_if2;
ac.f_step=china_ch.fsteps;
ac.fif_bw=china_ch.f_ifbwith;
ac.rf=china_ch.chan[i].cennter_freq;
tuning_freq(ac);//调到频道
#if(DEBUG)
f=i;
printf("手动选台 i=%u, 中心频率=%f\n",f,china_ch.chan[i].cennter_freq);
#endif
}
if(key2())//-
{
i--;
if(i>china_ch.opn)
i=china_ch.opn;
jintu(i,china_ch.vhf_l,china_ch.vhf_h,china_ch.opn);
ac.f_if2=china_ch.cen_if2;
ac.f_step=china_ch.fsteps;
ac.fif_bw=china_ch.f_ifbwith;
ac.rf=china_ch.chan[i].cennter_freq;
tuning_freq(ac);//调到频道
#if(DEBUG)
f=i;
printf("手动选台 i=%u, 中心频率=%f\n",f,china_ch.chan[i].cennter_freq);
#endif
}
if(key4())
return;
}
}
void weitiao()//进入微调
{
av as;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -