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

📄 tft_7._h

📁 7"车载液晶电视机 控制程序源码 WinRar3.2压缩 MCU ATMega8
💻 _H
📖 第 1 页 / 共 2 页
字号:
	break;
  case BACK:
    OSD_out_1row(0,2,3,1,c_backsight);
	break;
  }
  FOSD=DIS_VIDEO;
}
/*========================
显示音量
========================*/
void dis_volume(void)
{
  OSD_window(2);
  OSD_attrib_1row(0,0,16,1,0);
  OSD_out_1row(0,0,3,1,c_volume);
  OSD_out_num(0,10,user_config[volume],1);
  FOSD=DIS_VOLUME;
}
/*================================
================================*/
void delay(unsigned int x)
{
  unsigned int i,j;
  for(j=0;j<x;j++)
  {
    for(i=0;i<x;i++)
	  WDR();
  }
}
/*================================
================================*/
unsigned ADC_read(unsigned char x)
{
  ADCSR = 0x00; //disable adc
  ADMUX = 0x60|x; //select adc input x
  ACSR  = 0x80;
  ADCSR = 0xC1;
  while(!(ADCSR&0x10))
    ;
  ADCL=ADCH;
  ADCSR|=0x40;
  while(!(ADCSR&0x10))
    ;
  return ADCH;
}
/*================================
================================*/
unsigned char key(unsigned char x)
{
  unsigned char static old_key=0xff,j;
//  unsigned char static k=0;
  if((ADC_read(x)&0xe0)!=0xe0 && fkey==0)
  {
    for(j=0;j<50;j++)
	{
	  if((ADC_read(x)&0xe0)==0xe0)
	    return 0xff;
	}
	if(x==6)
	  old_key=ADC_read(x)&0xe0;
	else
	  old_key=((ADC_read(x)&0xe0)>>4)|1;
	fkey=1;
	switch(old_key)
	{
	case 0x80:
	  return KMENU;
	case 0x40:
	  return KDOWN;
	case 0x00:
	  return KUP;
	case 0x01:
	  return KLEFT;
	case 0x05:
	  return KRIGHT;
	case 0x09:
	  return KAV;
	case 0x0d:
	  return KBACK;
	case 0xc0:
	  return KRESERVE;
	}
  }
  else if(ADC_read(6)>0xf0 && ADC_read(7)>0xf0)
    fkey=0;
  if(fcontinuous==1)
	{
	  fcontinuous=0;	
	  switch(old_key)
	  {
	  case 0x40:
	    return KDOWN;
	  case 0x00:
	    return KUP;
	  case 0x01:
	    return KLEFT;
	  case 0x05:
	    return KRIGHT;
	  }
	}
  return 0xff;
}
/*==========================================
==========================================*/
void EEPROMwrite(unsigned char a,unsigned char d)
{
  unsigned char j=0;
  unsigned char rw_add;
  switch(a/256){
    case 0: rw_add=0xa0; break;
    case 1: rw_add=0xa2; break;
    case 2: rw_add=0xa4; break;
    case 3: rw_add=0xa6; break;
	default: break;
  }
  while(IICwrite(rw_add,a%256,d)==0)
  {
    WDR();
	if((++j)==10)
	  return;
  }
  delay(100);
}
/*==========================================
==========================================*/
unsigned char EEPROMread(unsigned char a)
{
  unsigned char rw_add;
  switch(a/256){
    case 0: rw_add=0xa0; break;
    case 1: rw_add=0xa2; break;
    case 2: rw_add=0xa4; break;
    case 3: rw_add=0xa6; break;
	default: break;
  }
  return IICread(rw_add,a%256);
}
/*================================
================================*/
unsigned int CHwrite(unsigned char x)
{
  unsigned int tmp;
  unsigned char db1,db2;
//  volume_register=0;
  db1=EEPROMread(x*2+48);
  db2=EEPROMread(x*2+49);
  tmp=db1*256+db2;
  EEPROMwrite(channel,x);  //保存频道
  FI1256write(tmp);
  return tmp;
}
/*================================
================================*/
void auto_tune(void)
{
  unsigned int tmp,ch_f,j,address=1;
  unsigned char ftune=1;
  volume_register=0;
  gauge_num(tmp=Frequency_low);	            //加载最低频率
  WDR();
  OSD_out_1row(1,12,1,0,c_on_off[ON]);
  OSD_out_num(3,11,1,0);	
  do
  {
    do
	{
	  if(key(7)==KLEFT || tmp>Frequency_high) 
	    ftune=0;                   //扫描停止命令
      j=0;
	  if(((tmp+=2)%8)==0); 
	    gauge_num(tmp);
	  WDR();
    }while((0x0f&FI1256write(tmp))!=0 && ftune==1);
	ch_f=tmp;
    do
	{
	  if(key(7)==KLEFT || tmp>Frequency_high) 
	    ftune=0;                   //扫描停止命令
      j++; 
	  if(((++tmp)%8)==0); 
	    gauge_num(tmp);
	  WDR();
	}while((0x0f&FI1256write(tmp))==0 && ftune==1);
	if(j>5)
	{
	  j=0;
	  channel_frequency[address++]=ch_f;
	  OSD_out_num(3,11,address,0);
	}
  }while(ftune);  
  OSD_out_1row(1,12,1,0,c_on_off[OFF]);  
  FI1256write(channel_frequency[user_config[channel]=1]);
  tmp=50;
  EEPROMwrite(ch_max,user_config[ch_max]=address);
  for(j=1;j<=address;j++)
  {
    EEPROMwrite(tmp++,channel_frequency[j]/256);
    EEPROMwrite(tmp++,channel_frequency[j]%256);
  }
  OSD_time=OSD_TIME;
}
/*========================
加载默认值
========================*/
void aload_default(void)
{
  unsigned char *p;
  unsigned char j;
  p=&user_adjust[1][0];
  for(j=0;j<5;j++)
  {
    EEPROMwrite(j,user_config[j]);
  }
  for(j=0;j<18;j++)
  {
    EEPROMwrite(j+10,*(p+j));
  }
}
/*========================
读取配置
========================*/
void aload_config(void)
{
  unsigned char *p;
  unsigned char j;
  p=&user_adjust[1][0];
  for(j=1;j<5;j++)
  {
    user_config[j]=EEPROMread(j);
  }
  for(j=0;j<18;j++)
  {
    *(p+j)=EEPROMread(j+10);
  }
}
/*========================
上电初始化
========================*/
void power_on(void)
{  
  write_user_char();
  if(key(6)==KMENU)
    aload_default();
  aload_config();
  CHwrite(user_config[channel]);
  video_choose(user_config[video_input]);
  dis_video(user_config[video_input]);
  screen_mode(user_adjust[user_config[video_input]][5]);
  pal_ntsc(NTSC);
  screen_inversion(user_config[inversion]=ON);
  screen_mirror(user_adjust[user_config[video_input]][4]);
}
/*========================
菜单
========================*/
void dis_menu(unsigned char x)
{
  unsigned char j;
  if(x<7)
  {
    if(FOSD!=DIS_MENU1)
    {
    FOSD=DIS_MENU1;
	OSD_window(1);
	for(j=0;j<3;j++)  //标题文字
	{
	  OSD_out_1row(0,j*5+1,3,0,c_menu[j]);
	}
    //标题颜色
	OSD_attrib_1row(0,0,15,7,3);
	OSD_attrib_1row(0,(user_config[video_input]-1)*5,5,7,2);
	for(j=1;j<7;j++)
	{
	  OSD_out_1row(j,2,3,0,c_menu[j+3]);
	}
	for(j=0;j<4;j++)
	{
	  OSD_out_num(j+1,10,user_adjust[user_config[video_input]][j],0);
	}
	OSD_out_1row(5,11,1,0,c_on_off[user_adjust[user_config[video_input]][4]]);
	OSD_out_1row(6,11,1,0,mode_1_2_3[user_adjust[user_config[video_input]][5]]);
	}
    for(j=1;j<7;j++)
    {
      if(j!=x)
	    OSD_attrib_1row(j,0,15,7,2);
      else  //选中
	  {
	    OSD_attrib_1row(j,0,15,5,4);
	  }
	}
	if(x<5)
	  OSD_out_num(x,10,user_adjust[user_config[video_input]][x-1],0);
	else if(x==5)
	  OSD_out_1row(5,11,1,0,c_on_off[user_adjust[user_config[video_input]][4]]);
	else if(x==6)
	  OSD_out_1row(6,11,1,0,mode_1_2_3[user_adjust[user_config[video_input]][5]]);
  }
  else  //第二页
  {    
    if(FOSD!=DIS_MENU2)
    {
    FOSD=DIS_MENU2;
	OSD_window(1);
	for(j=0;j<3;j++)  //标题文字
	{
	  OSD_out_1row(0,j*5+1,3,0,c_menu[j]);
	}
    //标题颜色
	OSD_attrib_1row(0,0,5,7,2);
	OSD_attrib_1row(0,5,10,7,3);
	for(j=0;j<3;j++)
	{
	  OSD_out_1row(j+1,2,4,0,c_menu2[j]);
	}
	OSD_out_1row(1,12,1,0,c_on_off[OFF]);
	OSD_out_num(3,11,user_config[channel],0);	
	}
    for(j=1;j<6;j++)
    {
      if(j!=x-6)
	    OSD_attrib_1row(j,0,15,7,2);
      else
	  {
	    OSD_attrib_1row(j,0,15,5,4);
	  }
	}
	gauge_num(CHwrite(user_config[channel]));
  }
}
/*================================
================================*/
void exe_video_choose(unsigned char x)
{
  dis_video(x);
  video_choose(x);
  screen_mode(user_adjust[x][5]);
  screen_mirror(user_adjust[x][4]);
}
/*================================
END
================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -