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

📄 process.c

📁 本软件为tft型液晶显示器的驱动程序 可用于车载主机显示屏等
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "define.h"
#include "variable.h"
#include "I2C.h"
#include "osddisplay.h"
#include "key.h"
#include "IEBus.h"
#include "memory.h"
#include "video.h"

extern void Send_Char(uchar c);

void Rev_Process(uchar c);
void Mode_Process(uchar c);



/*{0x17,0xA0,0x87,0xA4,0x5C,0x6E,0x63,0x83,0x01};*/

void Variable_Init(void)
{
  SysMenuDisplayFlg=0x00;
  WindowDispFlag=NO_WINDOW;
  SysWindowsOff;
  SysMenuCnt=0;
  VideoMenuCnt=0;
}
void Video_Init(void)
{
   MemoryInit_Check();
/*  
   SysMenuBright=0x1f;
   SysMenuColor=0xA5;
   SysMenuCont=0x82;
   SysMenuPic=0x5a;
   SysMenuTint=0x9D;
   SysMenuCom=0x81;
   SysMenuSubr=0x6B;
   SysMenuSubb=0x60;
*/   
 
   Pwm_Process(CTRADDR,  0x7C);//0x7c
   Pwm_Process(BRIGHTADDR,SysMenuBright);//+VideoMenuBright);
   Pwm_Process(COLORADDR, SysMenuColor);//+VideoMenuColor);
   Pwm_Process(CONTADDR,  SysMenuCont);//+VideoMenuCont);
   Pwm_Process(PICADDR,   SysMenuPic);
   Pwm_Process(TINTADDR,  SysMenuTint);
   Pwm_Process(COMADDR,   SysMenuCom);
   Pwm_Process(SUBRADDR,  SysMenuSubr);
   Pwm_Process(SUBBADDR,  SysMenuSubb);  
   
   Rev_Process(2);
   Mode_Process(0);
   
   Osd_Init();
   Logo_Disp();   
   
   //Yc_Process(0x4f,0x00,0xd0);
   //Yc_Process(0x00,0x00,0x00);
}


void Pwm_On(void)
{
  ICR1 =150;//210;//0xD5;//8M/8/D5=4.7K
  OCR1A=67;//0x6A;
  TCCR1A=0x82;//0x82;
  //TCCR1B=0x1A;//clk/8 
  TCCR1B=0x1B;//clk/64 
  //TCCR1B=0x1C;//clk/256 
}
void Pwm_Off(void)
{
  TCCR1A=0x82;//0x82;
  TCCR1B=0x18;//clk/8 
}
void SysOn_Init(void)//开机初始化
{  
  Variable_Init();
  I2c_Init();
  DECODE_High;
  VGHGL_High;//+-
  NmDelay(200);
  Video_Init();
  NmDelay(200);
  //Pwm_On();
  NmDelay(100);
  HIGHV_High;//高压  
  
  NmDelay(100);  
  
  if(!ConnectVal)
  { 
    Osd_Clear();
    Windows_Close();
  }
  
  Rev_Process(VideoMenuRev);
  Mode_Process(VideoMenuMode);
  LED1_High;
  LED2_High;
  
  INT1_Enable;
}

void SysOff_Init(void)//关机初始化
{
  INT1_Disable;  
  HIGHV_Low;//高压
  VGHGL_Low;//+-
  if(!ConnectVal)//未联机
     Memory_Save(0);
  //Memory_Save(1);
  //Pwm_Off();
  NmDelay(200);
  DECODE_Low;
  ConnectNo;
  LED1_Low;
  LED2_Low;
}

void Rev_Process(uchar c)
{
  switch(c)
   {
     case 0:
     case 2:UD_Low;LR_High; break;
     case 1:UD_High;LR_Low;break;     
     case 3:UD_High;LR_High;break;
     case 4:UD_Low;LR_Low;break;
     default:break;
    }
}
void Mode_Process(uchar c)
{
  if(c==0)
    MODE_Low;
  else
    MODE_High;
}
void Ctr_Process(void)
{
   if(WindowDispFlag==VIDEO_WINDOW)//user setting
      switch(VideoMenuCnt)
        {
          case NUM_BRIGHT: Pwm_Process(BRIGHTADDR,SysMenuBright+VideoMenuBright);break;
          case NUM_COLOR:  Pwm_Process(COLORADDR,SysMenuColor+VideoMenuColor);  break;
          case NUM_CONT:   Pwm_Process(CONTADDR,SysMenuCont+VideoMenuCont);    break;
          case NUM_REV:    Rev_Process(VideoMenuRev);              break;
          case NUM_MODE:   Mode_Process(VideoMenuMode);            break;  
          default:break;
         }
   
   else if(SysWindowsVal)//sytem setting
      switch(SysMenuCnt)
        {
          case  NUM_BRIGHT: Pwm_Process(BRIGHTADDR,SysMenuBright);break;
          case  NUM_COLOR:  Pwm_Process(COLORADDR, SysMenuColor); break;
          case  NUM_CONT:   Pwm_Process(CONTADDR,  SysMenuCont);  break;
          case  NUM_PIC:    Pwm_Process(PICADDR,   SysMenuPic);   break;
          case  NUM_TINT:   Pwm_Process(TINTADDR,  SysMenuTint);  break; 
          case  NUM_COM:    Pwm_Process(COMADDR,   SysMenuCom);   break; 
          case  NUM_SUBR:   Pwm_Process(SUBRADDR,  SysMenuSubr);  break; 
          case  NUM_SUBB:   Pwm_Process(SUBBADDR,  SysMenuSubb);  break; 
          default:break;
         }
}
void Disp_Process(void)
{      
   if(SysWindowsVal)//System
     {
       Sysdata_Updata();
     }  
   else if(WindowDispFlag==VIDEO_WINDOW)//user setting
     {
       Videodata_Updata();
     }
}

void KeyPower_Process(void)
{  
   if(PowVal)//如果开机
    {      
      SysOff_Init();
      PowOff;//关机
     }
   else
    {
      SysOn_Init();
      PowOn;
     }
}
void KeySet_Process(void)
{
   if(WindowDispFlag==VIDEO_WINDOW)
     { 
       WindowDispFlag=NO_WINDOW;
       Windows_Close();
       SysWindowsOff;
      }
   else
     {
       WindowDispFlag=VIDEO_WINDOW;
       SysWindowsOff;
       VideoSet_Windows();
       //SoundSet_Windows();
       //UsrSet_Windows();
       //RadioFreCH++;
       //if(RadioFreCH>8)
       //   RadioFreCH=0;
       //RadioDisp_Windwos();
       //DvcDisp_Windows();
      }  
}
void KeyVolInc_Process(void)//UP
{
   if(SysMenuDisplayFlg==0||SysMenuDisplayFlg==1)
      SysMenuDisplayFlg=1;
   else
      SysMenuDisplayFlg=0xff;
   
   if(WindowDispFlag==VIDEO_WINDOW)//if video set close return 
    {
      if(VideoMenuCnt>0)
        VideoMenuCnt--;
      else
        VideoMenuCnt=VIDEOMENU_NUM-1;
     }
   else if(SysWindowsVal)//system setting
    {
      if(SysMenuCnt>0)
        SysMenuCnt--;
      else
        SysMenuCnt=SYSMENU_NUM-1;
     }
   Disp_Process();
}
void KeyVolDec_Process(void)//DOWN
{
      if(SysMenuDisplayFlg==1||SysMenuDisplayFlg==2)
      SysMenuDisplayFlg=2;
   else
      SysMenuDisplayFlg=0xff;
  
   if(WindowDispFlag==VIDEO_WINDOW)//if video set close return 
    {
      VideoMenuCnt++;
      if(VideoMenuCnt>=VIDEOMENU_NUM)
         VideoMenuCnt=0;
      }
   else if(SysWindowsVal)//system setting
    {
      SysMenuCnt++;
      if(SysMenuCnt>=SYSMENU_NUM)
         SysMenuCnt=0;
     } 
   Disp_Process();
}

void KeyPrev_Process(void)//LEFT
{
   if(SysMenuDisplayFlg==3)
    { 
      SysMenuDisplayFlg=0xff;
      SysWindowsOn;
      WindowDispFlag=NO_WINDOW;
      Sysdata_Updata();
      return;
     }
   else
      SysMenuDisplayFlg=0xff;
   
   if(WindowDispFlag==VIDEO_WINDOW)//if video set close return 
     switch(VideoMenuCnt)
       {
         case NUM_BRIGHT:  if(VideoMenuBright>0) VideoMenuBright--;break;
         case NUM_COLOR:   if(VideoMenuColor>0)  VideoMenuColor--; break;
         case NUM_CONT:    if(VideoMenuCont>0)   VideoMenuCont--;  break;
         case NUM_REV:     if(VideoMenuRev>1)    VideoMenuRev--;   break;
         case NUM_MODE:    if(VideoMenuMode>0)   VideoMenuMode--;  break;
         default: break;
       }
   else if(SysWindowsVal)//system setting
     switch(SysMenuCnt)
       {
         case NUM_BRIGHT :  if(SysMenuBright>0)   SysMenuBright--;break;
         case NUM_COLOR:    if(SysMenuColor>0)    SysMenuColor--; break;
         case NUM_CONT:     if(SysMenuCont>0)     SysMenuCont--;  break;
         case NUM_PIC:      if(SysMenuPic>0)      SysMenuPic--;   break;
         case NUM_TINT:     if(SysMenuTint>0)     SysMenuTint--;  break;
         case NUM_COM:      if(SysMenuCom>0)      SysMenuCom--;  break;
         case NUM_SUBR:     if(SysMenuSubr>0)     SysMenuSubr--;  break;
         case NUM_SUBB:     if(SysMenuSubb>0)     SysMenuSubb--;  break;
         default: break;
        }
   Disp_Process();
   Ctr_Process();
}
void KeyNext_Process(void)//RIGHT
{
   if(SysMenuDisplayFlg==2||SysMenuDisplayFlg==3)
      SysMenuDisplayFlg=3;
   else
      SysMenuDisplayFlg=0xff;  
   
   if(WindowDispFlag==VIDEO_WINDOW)//if video set close return 
     switch(VideoMenuCnt)
      {
       case NUM_BRIGHT: VideoMenuBright++;if(VideoMenuBright>16) VideoMenuBright=16;break;
       case NUM_COLOR:  VideoMenuColor++; if(VideoMenuColor>16)  VideoMenuColor=16; break;
       case NUM_CONT:   VideoMenuCont++;  if(VideoMenuCont>16)   VideoMenuCont=16;  break;
       case NUM_REV:    VideoMenuRev++;   if(VideoMenuRev>4)     VideoMenuRev=4;    break;
       case NUM_MODE:   VideoMenuMode++;  if(VideoMenuMode>1)    VideoMenuMode=1;   break;
       default:break;
       }
   else if(SysWindowsVal)//system setting
     switch(SysMenuCnt)
       {
         case NUM_BRIGHT:  if(SysMenuBright<0xFF)   SysMenuBright++;break;
         case NUM_COLOR:   if(SysMenuColor<0xFF)    SysMenuColor++; break;
         case NUM_CONT:    if(SysMenuCont<0xFF)     SysMenuCont++;  break;
         case NUM_PIC:     if(SysMenuPic<0xFF)      SysMenuPic++;   break;
         case NUM_TINT:    if(SysMenuTint<0xFF)     SysMenuTint++;  break;
         case NUM_COM:     if(SysMenuCom<0xFF)      SysMenuCom++;  break;
         case NUM_SUBR:    if(SysMenuSubr<0xFF)     SysMenuSubr++;  break;
         case NUM_SUBB:    if(SysMenuSubb<0xFF)     SysMenuSubb++;  break;
         default: break;
        }
   Disp_Process();
   Ctr_Process();
}

void SendDataToBus(uchar Cmd,uchar Val,uchar LongFlag)
{
   IEBus_TBroadcast=0x80;//0x80;
   IEBus_THAddr=IEBus_MASTERADDR>>4;
   IEBus_TLAddr=(uchar)(IEBus_MASTERADDR<<4);   
   IEBus_TLength=3;
   IEBus_TData0=Cmd;//CMD_KEY;//Cmd_KEY
   IEBus_TData1=Val;//KeyPrevious;//KEY
   if(LongFlag)//(KeyLongFlagVal)
      IEBus_TData2=0x01;//Val	
   else
      IEBus_TData2=0x00;//Val	
   IEBus_SendData(IEBus_TxBuf);	  
}

/*********************************************
    
   按键处理方式:当面板与外界(主控制板)联机时,收集到的按键直接传输给总线
                 当面板没有与外界联机,单独使用时,响应按键,但只对面板的video调节的按键起作用

*********************************************/

void Key_Process(void)
{
   if(!ConnectVal)//if not connect mainboard
   {
     if((KeyPrevious!=KEYPOWER)&&(!PowVal))//如果没有开机,按下的不是power则返回
        return;
        
     switch(KeyPrevious)
      {
       case KEYPOWER: 
                      KeyPower_Process();
                      break;
       case KEYSET:  
                      KeySet_Process();
                      break;

⌨️ 快捷键说明

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