⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 全数字高清电视数字调谐器
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -