📄 tft_7._h
字号:
/*=======================
文件名: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 + -