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

📄 lcd_phyc_hx8310.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
字号:
 /*
*******************************************************************************
*                uc/gui 
*        This program demostrates how to build an AP
*
*        (c) Copyright Actions Co,Ld.                             
*
*******************************************************************************
*/          

//#include "lcmoption.h"      
#include "lcd.h"   
#include "LCD_PHY_HX8310.h" 
#define  DISMOD_RGB
extern char direction;
non_banked void LCM_Enable(void);
non_banked void LCM_Disable(void);
non_banked void LCM_Write_Command(int Index,int Value);
non_banked void LCM_GPIOInit(void);      
non_banked void Delay_10us(void);
non_banked void Delay_1ms(void);
non_banked void LCM_Write_Pixel(int Pixel);
non_banked void LCM_Fill_Area(int Value,int Size);
non_banked unsigned int LCM_Read_Pixel(int x,int y);
non_banked void LCM_Read_Area(char *Buffer,int Counter);
non_banked void LCM_BuffDataTrans ( char *buff , int datacnt);

void LCM_RegInit(void); 
void LCM_PowerOn(void); 
void LCM_PowerOff(void); 
void LCM_DisplayOn(void);
void LCM_DisplayOff(void);
void LCM_DelayMS(int delaycnt);   
      
/*
*************************************************************************
    LCM Physical Code Layer
*************************************************************************
*/
void LCD_P0_DrawRect(int x0, int y0, int x1, int y1,int ColorLine,int ColorFill)
{
      LCD_RECT    win;
      int    size;
      if ((x0==x1)&&(y0==y1))
      {
          return;
      }
      LCD_P0_DrawLine(x0,y0,x0,y1,ColorLine);
      LCD_P0_DrawLine(x1,y0,x1,y1,ColorLine);
      LCD_P0_DrawLine(x0,y0,x1,y0,ColorLine);
      LCD_P0_DrawLine(x0,y1,x1,y1,ColorLine);
      if ((x0==x1)||(y0==y1))
      {
          return;
      }
      win.x0    =    x0+1;
      win.x1    =    x1-1;
      win.y0    =    y0+1;
      win.y1    =    y1-1;
      size    =    (win.y1-win.y0+1)*(win.x1-win.x0+1);
      if(size!=0)
    {
        LCD_P0_SetWindow(&win);
          LCM_Fill_Area(ColorFill,size);
      }
}
void LCD_P0_InvertRegion(LCD_RECT *reg)
{
}
void LCD_P0_CopyRect(int x0, int y0, int x1, int y1,int newx, int newy)
{
    LCD_RECT    win,winnew;   
    int  ColorPixel;
      int    size;
      int i;
      win.x0    =    x0;
      win.x1    =    x0;
      win.y0    =    y0;
      win.y1    =    y0;
      size    =    (y1-y0)*(x1-x0);
      winnew.x0    =    newx;
      winnew.x1    =    newx;
      winnew.y0    =    newy;
      winnew.y1    =    newy;
      if(size!=0)
    {
        for(;win.x0<win.x1;win.x0++)
            {
                for(;win.y0<win.y1;win.y0++)
                {
                LCD_P0_SetWindow(&win);
                ColorPixel    =    LCM_Read_Pixel(0,0);
                LCD_P0_SetWindow(&winnew);
                LCM_Write_Pixel(ColorPixel);
                winnew.y0++;
                }
                win.y0    =    y0;
                winnew.y0    =    newy;
                  winnew.x0++;
          }
      }
}
void LCD_P0_ClearRect(int x0, int y0, int x1, int y1)
{
    LCD_RECT    win;
      int    size;
      LCD_P0_DrawLine(x0,y0,x0,y1,0x0000);
      LCD_P0_DrawLine(x1,y0,x1,y1,0x0000);
      LCD_P0_DrawLine(x0,y0,x1,y0,0x0000);
      LCD_P0_DrawLine(x0,y1,x1,y1,0x0000);
      win.x0    =    x0;
      win.x1    =    x1;
      win.y0    =    y0;
      win.y1    =    y1;
      size    =    (y1-y0)*(x1-x0);
      if(size!=0)
    {
        LCD_P0_SetWindow(&win);
          LCM_Fill_Area(0x0000,size);
      }
}

void LCD_P0_FillArea(int Value,int Size)
{
    LCM_Fill_Area(Value, Size);
}


void LCD_P0_BuffDataTrans(U8 *pData, int cnt, char mode)
{
        LCM_BuffDataTrans(pData,cnt);
}
void LCD_P0_GetBuffData ( char *buff, int datacnt, char mode)
{
            LCM_Read_Area(buff,datacnt);
}
unsigned int LCD_P0_GetPixelIndex(int x, int y)
{
        return(LCM_Read_Pixel(x,y));    
}

int LCD_P0_DrawLine (int x0, int y0,  int x1, int y1,int ColorIndex)
{
        int x0save;
        LCD_RECT win;
        win.x0    =    x0;
        win.x1    =    x1;
        win.y0    =    y0;
        win.y1    =    y1;    

        if((x0>x1)||(y0>y1))
        return 1;
        if(x0==x1)
        {
        win.x0    =    x0;
        win.x1    =    XMAX;
        win.y0    =    y0;
        win.y1    =    YMAX;
        for(;y0<(y1+1);y0++)
            {
            win.y0    =    y0;
            LCD_P0_SetWindow(&win);
            LCM_Write_Pixel(ColorIndex);    
            }
        }
        else  if(y0==y1)
        {
        win.x0    =    x0;
        win.x1    =    XMAX;
        win.y0    =    y0;
        win.y1    =    YMAX;    
        for(;x0<(x1+1);x0++)
            {
        win.x0    =    x0;
            LCD_P0_SetWindow(&win);
            LCM_Write_Pixel(ColorIndex);    
            }    
           }
           else
           {
               x0save    =    x0; 
               win.x0    =    x0;
        win.x1    =    XMAX;
        win.y0    =    y0;
        win.y1    =    YMAX;        
               for(;x0<(x1+1);x0++)
            {
            
            y0    =    ((y1-y0)*x0)/(x1-x0save);
            win.x0    =    x0;
            win.y0    =    y0;
            LCD_P0_SetWindow(&win);
            LCM_Write_Pixel(ColorIndex);    
            }    
           }    
}
void LCD_P0_XorPixel(int x, int y)
{
    LCD_RECT win;
    win.x1    =    win.x0    =    x;
    win.y1    =    win.y0    =    y;    
    LCD_P0_SetWindow(&win);
    LCM_Write_Pixel(0x0000);
} 
void LCD_P0_SetPixelIndex(int x, int y, int ColorIndex)
{
    LCD_RECT win;
    win.x1    =    win.x0    =    x;
    win.y1    =    win.y0    =    y;    
    LCD_P0_SetWindow(&win);     
    LCM_Write_Pixel(ColorIndex);
} 
void LCD_P0_SetDrawMode(unsigned char mode)
{
    switch(mode)
    {
        case DrawModeH_def:   
            LCM_Write_Command(0x0005,0x1038);
                break;
        case DrawModeV_def:
            LCM_Write_Command(0x0005,0x1030);
                break;    
        default:                break;
    }    
}
int LCD_P0_SetWindow(LCD_RECT *win) 
{
    int x, y;
    int ramaddr;       
    if((win->x1<win->x0)||(win->y1<win->y0))
    return 0;
        if(win->x1>0x9f||win->y1>0x7f)
        return 0;
        x = win->x1;
        x <<=8;
        x &= 0xff00;
        x |= ((win->x0)&0x00ff);   
        y = win->y1;
        y <<=8;
        y &= 0xff00;
        y |= ((win->y0)&0x00ff);
         
        ramaddr    =win->x0;
        ramaddr    <<= 0x08;
        ramaddr &=0xff00;
        ramaddr |= ((win->y0)&0x00ff); 
        LCM_Write_Command(0x0016,y);
        LCM_Write_Command(0x0017,x);
        LCM_Write_Command(0x0021,ramaddr);  
    return 1;
}  
void LCD_P0_SetContrast(char ContrastValue)
{
    
}
void LCD_P0_Standby(unsigned char bStandby)
{
    switch(bStandby)
    {
        case StandbyStart_def:  LCM_PowerOff();  
                        LCM_Write_Command(0x0003,0x0001);
                         break;
        case StandbyExit_def:    LCM_DelayMS(10);
                    LCM_Write_Command(0x0003,0x0000);
                    LCM_DelayMS(10);
                    LCM_PowerOn();
                        
                break;    
        default:                break;
    }    
}           
void LCD_P0_On(void)
{
    LCM_PowerOn();
}

void LCD_P0_Off(void)
{
    LCM_PowerOff();
}
 

int LCD_P0_Init(void)
{
    LCM_GPIOInit();
    LCM_RegInit();
    LCM_PowerOn();
    return 0;    
        
}

















/*
*************************************************************************
    LCM Hardware Code Layer
*************************************************************************
*/



void LCM_RegInit(void) 
{
    LCM_Write_Command(0x0001,0x0313);        //Display Control Setting   
    LCM_Write_Command(0x0002,0x0700);
    LCM_Write_Command(0x0005,0x1038);        //横屏
    LCM_Write_Command(0x0006,0x0000);
    LCM_Write_Command(0x0008,0x0202);
    LCM_Write_Command(0x000a,0x0000);
    LCM_Write_Command(0x000b,0x1800);
    LCM_Write_Command(0x000f,0x0000);
    LCM_Write_Command(0x0010,0x0000);
    LCM_Write_Command(0x0011,0x0000);
    LCM_Write_Command(0x0014,0x9f00);
    LCM_Write_Command(0x0015,0x9f00);
    LCM_Write_Command(0x0016,0x7f00);
    LCM_Write_Command(0x0017,0x9f00);
    LCM_Write_Command(0x0020,0x0000);    
    LCM_Write_Command(0x0021,0x0000);    
    LCM_Write_Command(0x0023,0x0000);    
    LCM_Write_Command(0x0024,0x0000);    
    LCM_Write_Command(0x0025,0x0000);    
    LCM_Write_Command(0x0026,0x0000);    
    LCM_Write_Command(0x0030,0x0000);        //Grmma Control Setting    
    LCM_Write_Command(0x0031,0x0606);    
    LCM_Write_Command(0x0032,0x0006);    
    LCM_Write_Command(0x0033,0x0403);
    LCM_Write_Command(0x0034,0x0107);
    LCM_Write_Command(0x0035,0x0101);    
    LCM_Write_Command(0x0036,0x0707);    
    LCM_Write_Command(0x0037,0x0304);    
    LCM_Write_Command(0x003a,0x1200);
    LCM_Write_Command(0x003b,0x0805);                
}


void LCM_PowerOn(void) 
{
    LCM_Write_Command(0x000d,0x0000);    //PON    =    0;
    LCM_DelayMS(15);
    LCM_Write_Command(0x000e,0x0000);    //VCOMG    =    0;
    LCM_DelayMS(15);            
    LCM_Write_Command(0x0007,0x0000);    //DTE=0,D1-0=0,GON=0S
    LCM_DelayMS(15);
    LCM_Write_Command(0x000c,0x0000);    //Set VC2-0
    LCM_DelayMS(15);
    LCM_Write_Command(0x0009,0x0008);    //DK=1
    LCM_DelayMS(15);
    LCM_Write_Command(0x000d,0x0003);    //Set VRH3-0,PON=0
    LCM_DelayMS(15);
    LCM_Write_Command(0x000e,0x1019);    //Set VCM4-0,Set VDV4-0
    LCM_DelayMS(50);
    LCM_Write_Command(0x000d,0x0013);    //PON=1
    LCM_DelayMS(15);
    LCM_Write_Command(0x0003,0x0010);    //BT2-0=000,Set DC02-00,Set AP2-0  
    LCM_DelayMS(50);
    LCM_Write_Command(0x0009,0x0000);    //Set DC12-10,DK=0
    LCM_DelayMS(15);
    LCM_Write_Command(0x0003,0x0010);    //Set BT2-0
    LCM_DelayMS(15);
    LCM_Write_Command(0x000e,0x3019);    //VCOMG=1,VDV=100000,VCM=11001
    LCM_DelayMS(150);
    LCM_Write_Command(0x0009,0x0002);    //SAP=010
    LCM_DelayMS(50);
    LCM_DisplayOn();
    
}
void LCM_PowerOff(void) 
{
    LCM_DisplayOn();
    LCM_DisplayOff();
    LCM_DelayMS(40);
    LCM_Write_Command(0x0009,0x0000);    //SAP=000
    LCM_DelayMS(15);
    LCM_Write_Command(0x0003,0x0000);    //AP2-0=000  
    LCM_DelayMS(50);
    LCM_Write_Command(0x000d,0x0000);    //PON    =    0;
    LCM_DelayMS(15);
    LCM_Write_Command(0x000e,0x0000);    //VCOMG    =    0;
    LCM_DelayMS(15);  
}

void LCM_DisplayOn()
{
    LCM_Write_Command(0x0007,0x0005);    //GON=0,DTE=0,D1-0=01
    LCM_DelayMS(40);
    LCM_Write_Command(0x0007,0x0025);    //GON=1,DTE=0,D1-0=01
    LCM_DelayMS(40);
    LCM_Write_Command(0x0007,0x0027);    //GON=1,DTE=0,D1-0=11
    LCM_DelayMS(40);
    LCM_Write_Command(0x0007,0x0037);    //GON=1,DTE=1,D1-0=11
    LCM_DelayMS(10);
}
void LCM_DisplayOff()
{
    LCM_Write_Command(0x0007,0x00036);    //GON=1,DTE=1,D1-0=10
    LCM_DelayMS(40);
    LCM_Write_Command(0x0007,0x0026);    //GON=1,DTE=0,D1-0=10
    LCM_DelayMS(40);
    LCM_Write_Command(0x0007,0x0004);    //GON=0,DTE=0,D1-0=00
    LCM_DelayMS(40);
}

void LCM_DelayMS(int delaycnt) 
{
    int i;
    for(i=0;i<delaycnt;i++)
    Delay_1ms();
}      

⌨️ 快捷键说明

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