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

📄 tft_7._h

📁 7"车载液晶电视机 控制程序源码 WinRar3.2压缩 MCU ATMega8
💻 _H
📖 第 1 页 / 共 2 页
字号:
/*=======================
文件名:TFT.h
========================*/
#include"hard_iic.h"

#define MAX     63    //调整的最大值
#define PLEDR   0x01  //PORTC  红色发光管
#define PVOL    0x20  //PORTB  音量控制
#define PNPC    0x08  //PORTB  制式
#define VSYNC   0x10  //PORTB  制式场频
#define NTSC    0     //PORTB  制式
#define PAL     1     //PORTB  制式
#define PBRI    0x80  //PORTB  亮度
#define PCON    0x10  //PORTD  对比度
#define PCOL    0x08  //PORTD  色饱和度
#define PHUE    0x40  //PORTB  色调
#define PTV     0x80  //PORTD  电视
#define TV      1     //PORTD  电视
#define PAV     0x40  //PORTD  外部视频
#define AV      2     //PORTD  外部视频
#define PBACK   0x20  //PORTD  后视
#define FPBACK  0x01  //PORTB  后视
#define BACK    3     //PORTD  后视
#define PMD1    0x04  //PORTC  电视
#define MD1     0     //PORTC  电视
#define PMD2    0x08  //PORTC  外部视频
#define MD2     1     //PORTC  外部视频
#define PMD3    0x04  //PORTD  后视
#define MD3     2     //PORTD  后视
#define PU_D    0x04  //PORTB  上下
#define PL_R    0x02  //PORTB  左右
#define OFF     0
#define ON      1
#define LEFT    0
#define RIGHT   1
#define UP      0
#define DOWN    1


#define Frequency_low  0x04e0                 //最低频率8
#define Frequency_high 0x3900                 //最高频率
#define OSD_TIME    500                       //OSD显示时间

#define WHITE   7
#define YELLOW  5
#define CYAN    3
#define GREEN   1
#define PURPLE  6
#define RED     4
#define BLUE    2
#define BLACK   0

#define KMENU    100
#define KUP      101
#define KDOWN    102
#define KLEFT    103
#define KRIGHT   104
#define KAV      105
#define KBACK    106
#define KRESERVE 107

#define DIS_VIDEO  1
#define DIS_MENU1  2
#define DIS_MENU2  3
#define DIS_VOLUME 4

#define VOLUME           20
#define CHANNEL           1
#define CHANNEL_AMOUNT   99
#define VIDEO_INPUT      TV
#define INVERSION        ON

#define volume      1
#define channel     2
#define ch_max      3
#define video_input 4
#define inversion   5

unsigned char FOSD=0;          //OSD指针
unsigned char volume_register;
unsigned char fkey=0;
unsigned char fcontinuous=0;

unsigned long int v_sync_count=0;

unsigned char user_config[]={
0xaa,VOLUME,CHANNEL,CHANNEL_AMOUNT,VIDEO_INPUT,INVERSION};

unsigned int OSD_time=OSD_TIME;

unsigned char user_adjust[4][6]={
{30,30,30,33, 0, MD1},//机器
{23,50,40,33, 0, MD1},//电视
{23,50,40,33, 0, MD1},//视频
{23,50,40,33, 0, MD1},//后视
};

unsigned int channel_frequency[110];

unsigned int c_channel[]   ={0x07c,0x168,0x000};  //频道
unsigned int c_volume[]    ={0x062,0x000,0x063};  //音量
unsigned int c_tv[]        ={0x06a,0x000,0x07b};  //电视
unsigned int c_video[]     ={0x07b,0x000,0x07c};  //视频
unsigned int c_backsight[] ={0x169,0x000,0x07b};  //后视
unsigned int c_bright[]    ={0x03e,0x000,0x03f};  //亮度
unsigned int c_contrast[]  ={0x040,0x041,0x03f};  //对比度
unsigned int c_color[]     ={0x05e,0x000,0x03f};  //色度
unsigned int c_hue[]       ={0x05e,0x000,0x053};  //色调
unsigned int c_mirror[]    ={0x16a,0x000,0x16b};  //镜象
unsigned int c_mode[]      ={0x14f,0x000,0x150};  //模式

unsigned int c_on_off[2][1]    ={0x05f,0x16c};
unsigned int mode_1_2_3[3][1]  ={0x002,0x003,0x004};

unsigned int c_menu[10][3]={
{0x06a,0x000,0x07b},  //电视
{0x07b,0x000,0x07c},  //视频
{0x169,0x000,0x07b},  //后视
{0x07c,0x168,0x000},  //频道
{0x03e,0x000,0x03f},  //亮度
{0x040,0x041,0x03f},  //对比度
{0x05e,0x000,0x03f},  //色度
{0x05e,0x000,0x053},  //色调
{0x16a,0x000,0x16b},  //镜象
{0x14f,0x000,0x150},  //模式
};
unsigned int c_menu2[3][4]={
{0x074,0x133,0x16d,0x16e},  //自动搜台
{0x16f,0x133,0x16d,0x16e},  //手动搜台
{0x07c,0x000,0x000,0x168},  //频道
};

unsigned char user_character[8][36]={  //道后镜像开搜台手
{//道
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x20,0x22,0x40,0x0F,0xF0,0x01,0x00,
0xE7,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x50,0x00,0x8F,0xF0,
0x00,0x00,0x00,0x00},
{//后
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x70,0x00,0x20,0x00,
0x3F,0xF0,0x20,0x00,0x20,0x00,0x2F,0xE0,0x28,0x20,0x48,0x20,0x4F,0xE0,0x88,0x20,
0x00,0x00,0x00,0x00},
{//镜
0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x27,0xE0,0x72,0x40,0x4F,0xF0,0x80,0x00,
0x77,0xE0,0x24,0x20,0x27,0xE0,0xFC,0x20,0x27,0xE0,0x2A,0x80,0x32,0x90,0x2C,0x70,
0x00,0x00,0x00,0x00},
{//像
0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xC0,0x14,0x80,0x2F,0xF0,0x39,0x10,0x6F,0xF0,
0xA2,0x00,0x25,0x30,0x2B,0xC0,0x24,0xC0,0x29,0xA0,0x22,0x90,0x2C,0x80,0x21,0x80,
0x00,0x00,0x00,0x00},
{//开
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
0x11,0x00,0xFF,0xF0,0x11,0x00,0x11,0x00,0x21,0x00,0x21,0x00,0x41,0x00,0x81,0x00,
0x00,0x00,0x00,0x00},
{//搜
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x26,0xB0,0x24,0x90,0xFE,0xB0,0x24,0x90,
0x27,0xF0,0x37,0x70,0xE7,0xF0,0x22,0x20,0x21,0x40,0x20,0x80,0xA1,0x40,0x46,0x30,
0x00,0x00,0x00,0x00},
{//台
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x10,0x80,0x20,0x40,0x40,0x20,
0xFF,0xF0,0x00,0x10,0x3F,0xC0,0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,
0x00,0x00,0x00,0x00},
{//手
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0xFC,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,
0x04,0x00,0x04,0x00,0xFF,0xF0,0x04,0x00,0x04,0x00,0x04,0x00,0x24,0x00,0x18,0x00,
0x00,0x00,0x00,0x00},
};

extern void OSD_window(unsigned char x);
extern unsigned char OSD_out_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char size,unsigned int *string);
extern unsigned char OSD_out_num(unsigned char row,unsigned char col,unsigned char value,unsigned char size);
extern unsigned char OSD_attrib_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char fg_color,unsigned char bg_color);
extern void write_custom_char(unsigned char j,unsigned char *x);
extern unsigned char gauge_num(unsigned long value);
extern void OSD_off(void);
/*=======================
写入用户字符
========================*/
void write_user_char(void)
{
  unsigned char j;
  for(j=0;j<8;j++)
    write_custom_char(j,user_character[j]);
}
//**************读取FI1256hm数据****************/
unsigned char FI1256read(void)
{
  unsigned char tmp;
  iic_start();
  if(iic_send(0xc1))
  {
    tmp=iic_receive();
	iic_stop();
	return tmp;
  }
  iic_stop();
  return 0;
}
/*=======================
更新用户设定
========================*/
void update_user_adjust(void)
{
  unsigned char j;
  if((FI1256read()&0x0f)!=0)
	volume_register=0;
  else
    volume_register=user_config[volume];
  for(j=0;j<4;j++)
    user_adjust[0][j]=user_adjust[user_config[video_input]][j];
}
//**************向FI1256hm写入数据****************
unsigned char FI1256write(unsigned int Fosc)
{
  unsigned char db1,db2,PB;
  db1=Fosc/256;
  db2=Fosc%256;
  if(Fosc<0x0c80) 
    PB=0x80;
  if(Fosc>0x0c80 && Fosc<0x1d60) 
    PB=0x82;
  if(Fosc>0x1d60) 
    PB=0x84;
  iic_init();
  iic_start();
  if(iic_send(0xc0))
  {
    if(iic_send(db1) && iic_send(db2) && iic_send(PB) && iic_send(0x00))
	{
	  iic_stop();
	  return FI1256read();
	}
  }
  iic_stop();
  return 0;
}
/*========================
视频源选择
========================*/
void video_choose(unsigned char x)
{
  switch(x)
  {
  case 1:  //TV
    PORTD|=PAV|PBACK;
	PORTD&=~PTV;
	break;
  case 2:  //AV
    PORTD|=PTV|PBACK;
	PORTD&=~PAV;
	break;
  case 3:  //BACK
    PORTD|=PAV|PTV;
	PORTD&=~PBACK;
	break;
  }
}
/*========================
模式
========================*/
void screen_mode(unsigned char x)
{
  switch(x)
  {
  case MD1:  //16:9
    PORTC&=~PMD2;
    PORTC&=~PMD1;
	PORTD&=~PMD3;
    break;
  case MD2:  //4:3 适应高
    PORTC|=PMD1;
    PORTC&=~PMD2;
	PORTD&=~PMD3;
    break;
  case MD3:  //4:3 适应宽
    PORTC&=~PMD1;
    PORTC&=~PMD2;
	PORTD|=PMD3;
    break;
  }
}
/*========================
PAL/NTSC
========================*/
void pal_ntsc(unsigned char x)
{
  if(x==NTSC)
  {
    PORTB|=PNPC;
  }
  else
  {
    PORTB&=~PNPC;
  }
}
/*========================
倒置
========================*/
void screen_inversion(unsigned char x)
{
  if(x==ON)
  {
    PORTB&=~PU_D;
  }
  else
  {
    PORTB|=PU_D;
  }
}
/*========================
镜像
========================*/
void screen_mirror(unsigned char x)
{
  if(x==ON)
  {
    if(user_config[inversion]==ON)
      PORTB|=PL_R;
	else
      PORTB&=~PL_R;
  }
  else
  {
    if(user_config[inversion]==ON)
      PORTB&=~PL_R;
	else
      PORTB|=PL_R;
  }
}

/*========================
显示视频源
========================*/
void dis_video(unsigned char x)
{
  OSD_window(0);
  OSD_attrib_1row(0,0,10,3,0);
  switch(x)
  {
  case TV:
    OSD_out_1row(0,0,3,1,c_channel);
    OSD_out_num(0,6,user_config[channel],1);
	break;
  case AV:
    OSD_out_1row(0,2,3,1,c_video);

⌨️ 快捷键说明

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