📄 main.c
字号:
#include <reg52.h>
#include "MTV212MN32.h"
#include "comm.h"
#include "osd.h"
#include "gen.h"
#include "eeprom.h"
#include "intpro.h"
#include "Ic_ctrl.h"
#include "I2C.h"
volatile unsigned char pdata GlobalBuf[48] _at_ 0xd0; //系统共用的存储区
/****************** 全局字节变量定义(需要初试化) **********************/
unsigned int data old_hfre_count=0; //显示模式稳定后,水平同步频率的记数值
unsigned int data old_vfre_count=0; //显示模式稳定后,垂直同步频率的记数值
unsigned int data hfre_range=300; //水平同步频率的变动门限值
unsigned char data vfre_range=30; //垂直同步频率的变动门限值
unsigned char data Hfre=0; //当前显示模式的水平频率
unsigned char data Vfre=0; //当前显示模式的垂直频率
unsigned char data HVpol=0; //当前显示模式的水平和垂直同步极性
bit Flg_Key_Lock=0; //等于1时其按键操作为up,down,exit;
//等于0时分别为Bright,Contrast,及Degauss;
//等于2时为exit;
bit Flg_Burnin_State=0; // =1时,表示进入老化测试状态
bit Flg_Factory=0; //=1时,表示进入工厂调试
bit Flg_BriCon_Shortcut=0;
bit Flg_SoftStart=0; // =1时,表示需要对TDA4841/TDA4856进行软启动
// 系统配置字节的定义,该字节保存在EEPROM中
unsigned char bdata SysConfigByte;
sbit Flg_PowerSwitch_Type=SysConfigByte^7; // 1:物理电源开关; 0:逻辑电源开关
sbit Flg_PowerState=SysConfigByte^6; // 1:电源开; 0:电源关
sbit Flg_EnBurnIn=SysConfigByte^5; // 1:允许产生老化信号; 0:禁止老化信号
// 关于老化代码的定义
unsigned char bdata Burnin_Code;
sbit Flg_Burnin_Hsize =Burnin_Code^7; // =1:水平幅度最大; =0:水平幅度最小
sbit Flg_Burnin_Self =Burnin_Code^5; // =1:允许产生自测信号
sbit Flg_Burnin_STF1 =Burnin_Code^4;
sbit Flg_Burnin_STF0 =Burnin_Code^3;
sbit Flg_Burnin_RT1 =Burnin_Code^2;
sbit Flg_Burnin_RT0 =Burnin_Code^1;
sbit Flg_Burnin_STE =Burnin_Code^0; // =1:允许自测信号输出
/*************************定义全局位变量(不需要初始化)*************************/
bit Flg_Hfre_Lower; //=1时,表示水平同步频率低于下限值
bit Flg_Vfre_Lower; //=1时,表示垂直同步频率低于下限值
bit Flg_HVfre_Over; //=1时,表示水平或者垂直同步频率高于上限值
bit Flg_Par_Adjustment; //=1时,表示正在进行参数调节
bit Flg_VGA350; //=1时,表示当前显示模式是350线
bit Flg_EnAutoSave; //=1时,表示正在请求参数自动保存
bit Flg_SyncType; //=1时,表示当前的同步信号类型是复合同步信号
bit Flg_AL_Proc; //=1适,请求进行自动调整处理
bit Flg_OnLine=0; //=1时,表示进入联机自动调整状态
unsigned char data Burnin_Clock; // 老化的时钟计数器
unsigned char data Burnin_Min; // 老化时钟的分
unsigned int data Burnin_Hours; // 老化时钟的小时
void Select_Sync(void);
void Key_Process(void);
void Mode_Detect(void);
void Set_Burnin_Timing(void);
extern void Init(void);
//extern void System_State_Reset(void);
void main (void)
{
Init();
while(1)
{
Select_Vync_Source();
Key_Process();
Mode_Detect();
}
}
/****************************************************************************
*******************功能:模式检测,检测当前状态下显示模式**********************
*****************************************************************************/
void Mode_Detect(void)
{
unsigned int data hfre_count,vfre_count;
register unsigned char i,hvpol;
if (!Flg_PowerState) return; //如果处于关电源的状态,则直接退出
hfre_count=Get_hfre_count();
vfre_count=Get_vfre_count();
hvpol=Get_hv_pol();
if (hvpol!=HVpol || hfre_count<old_hfre_count-hfre_range ||
hfre_count>old_hfre_count+hfre_range ||
vfre_count<old_vfre_count-vfre_range ||
vfre_count>old_vfre_count+vfre_range) {
// 发生显示模式变化时,关掉屏幕显示并使所有的S校正电容接通
Mute_ON();
PIN_CS1=0;PIN_CS2=0;PIN_CS3=0;
System_State_Reset();
Flg_Burnin_State=0;
for (i=0;i<7;i++) {
hfre_count=Get_hfre_count();
vfre_count=Get_vfre_count();
hvpol=Get_hv_pol();
if (hvpol!=HVpol ||
hfre_count<old_hfre_count-2 || hfre_count>old_hfre_count+2 ||
vfre_count<old_vfre_count-2 || vfre_count>old_vfre_count+2) {
i=0;
old_hfre_count=hfre_count;
old_vfre_count=vfre_count;
HVpol=hvpol;
}
Delay(50);
}
CloseOsd(); //清除osd显示
if (Flg_EnAutoSave) { //该条件成立,说明在显示模式改变之前有请求参数保存
if (Flg_Factory) Save_Parameter();
else {
sEvent_SavePar(0);
Flg_EnAutoSave=0;}
}
//设置一些需要设置的参数
sEvent_SysReset(0);
sEvent_PowerSaving(0);
old_hfre_count=Get_hfre_count();
old_vfre_count=Get_vfre_count();
HVpol=Get_hv_pol();
Hfre=128000L/(old_hfre_count+1);
Vfre=62500L/old_vfre_count;
//下面将判断水平和垂直同步频率有无超出范围
Flg_HVfre_Over=0;
if (Hfre>Max_Hfre || Vfre>C_FV_UPPER) {
Flg_HVfre_Over=1;
Show_HVfre_InfoPat();
sEvent_PowerSaving(40); //20秒之后进入节能
return;
}
//下面将判断同步频率是否低于下限值
Flg_Hfre_Lower=0;
Flg_Vfre_Lower=0;
if (Hfre<C_FH_LOWER) Flg_Hfre_Lower=1;
if (Vfre<C_FV_LOWER) Flg_Vfre_Lower=1;
if (Flg_Hfre_Lower || Flg_Vfre_Lower) {
if (Flg_Hfre_Lower && Flg_Vfre_Lower && Flg_EnBurnIn) {
//进入产生老化测试信号的处理
/*if (Flg_Hfre_Lower && Flg_Vfre_Lower) { //进入产生老化测试信号的处理*/
Flg_Burnin_State=1;
Burnin_Clock=0;
Burnin_Min=0;
Burnin_Hours=0;
Burnin_Code=0x21; // 00100001B
Set_Burnin_Timing();
Show_BurninInfo_Pat();
return;
}
else { //进入节能处理
XFR_HVCTR2=0x21; //#00100001B
sEvent_PowerSaving(6);
return;
}
}
XFR_HVCTR2=0; //禁止产生自测画面
Delay(30);
//old_hfre_count=get_hfre_count();
//old_vfre_count=get_vfre_count();
//HVpol=get_hv_pol();
//Hfre=128000/(old_hfre_count+1);
//Vfre=62500/old_vfre_count;
// 设置水平和垂直同步信号频率计数值变化的门限值
//hfre_range=old_hfre_count/1000;
//vfre_range=old_vfre_count/100;
hfre_range=((unsigned long)old_hfre_count*old_hfre_count)/(128000L-old_hfre_count);
vfre_range=((unsigned long)old_vfre_count*old_vfre_count)/(62500L-old_vfre_count);
Set_CS_switch(Hfre);
Get_Mode_Num();
Get_Mode_Data();
// Set_V_Blank(Hfre);
// Set_Osd_Par();
Set_Vsize();
Out_All_Parameter();
CloseOsd();
sEvent_DisplayMuteOFF(50);
}
}
/********************************************************************
* 函 数 名: Set_Burnin_Timing
* 功能描述: 在老化状态时,切换老化的模式(主要是时序)
* 输 入: 无
* 返 回: 无
***********************************************************************/
void Set_Burnin_Timing(void)
{
Mute_ON();
sEvent_PowerSaving(0);
sEvent_SysReset(0);
CloseOsd();
XFR_HVCTR2=Burnin_Code&0x3f;
Set_pLED_Normal();
Set_Power_Normal();
Flg_VGA350=0; // 非350线模式
//Flg_Osd_v_Position=1; // 设置OSD垂直位置的范围
Vfre=60;
CurrentModel=1;
Hfre=31;
//OsdHpos_Bias=12; // 设置OSD水平位置的范围
//OsdHpos_Divisor=22;
if (Flg_Burnin_STF1) {
CurrentModel=9;
Hfre=64;
//OsdHpos_Bias=29; // 设置OSD水平位置的范围
//OsdHpos_Divisor=26;
}
Set_CS_switch(Hfre);
Get_Mode_Data();
//Set_LM1237_PLL(Hfre);
//Set_V_Blank(Hfre);
// 设置与OSD显示相关的参数
//Write_LM1237_Reg(0x04,130); // 设置OSD窗口高度
Write_TDA4886_Reg(0x01,0xff);
Write_TDA4886_Reg(0x02,0xff);
if (Flg_Burnin_Hsize) Write_TDA48XX_Reg(0x00,0xff);
else Write_TDA48XX_Reg(0x00,0x00);
Out_All_Parameter();
sEvent_DisplayMuteOFF(50); // 设定取消MUTE的时间
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -