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

📄 lcd2.0_hx8309_220x176_16_v1.c

📁 HX8309驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
//******************************************************************************
#define     _IN_LCD_LTPS
//------------------------------------------------------------------------------
#include "Memap.h"
#include "Macro.h"
#include "Lcd.h"
//---------driver program HX8309---TFT2.0-------------------------------------------------------------------
#undef   Parallel8
#define  UINT16     unsigned short
#define LCD_INIT_NORMAL 0
#define MP4_LCD_INIT    2

void LCD_Init(unsigned int type) ;
void LCD_SetDispAddr(unsigned int x,unsigned int y);
void Display_off(void) ;


//void Delay1Ms(unsigned int tmr)
//{
//    unsigned int i;
//    unsigned int j;
//    while(tmr){
//        for(j=0; j<0x6000; j++){
//            asm("nop");
//            asm("nop");
//            asm("nop");
//            asm("nop");
//        }
//        tmr--;
//    }
//}


void LCD_Command(unsigned int cmd)
{
#ifdef  Parallel8    
    write_mem(LCD_COMMAND,cmd >> 8);
#endif    
    write_mem(LCD_COMMAND,cmd);
}

void LCD_Data(unsigned int data)
{
#ifdef  Parallel8    
    write_mem(LCD_DATA,data >> 8);
#endif    
    write_mem(LCD_DATA,data);
}

void LCD_Reg_Set(unsigned int cmd,unsigned int data)
{
#ifdef  Parallel8        
    write_mem(LCD_COMMAND,cmd >> 8);   
#endif    
    write_mem(LCD_COMMAND,cmd); 
    
#ifdef  Parallel8        
    write_mem(LCD_DATA,data >> 8);
#endif    
    write_mem(LCD_DATA,data);
}       

unsigned int LCD_StatusRead(void)
{
    unsigned int i,j;
    i = read_XDATA(LCD_COMMAND);
#ifdef  Parallel8
    j = read_XDATA(LCD_COMMAND);
    i = ((i & 0xff00) | (j >> 8));
#endif
    return i;
}


// wjm 2.0 HX8309
void LCD_SetPixel(unsigned int x, unsigned int y, unsigned int color)
{
	  unsigned short i;
	  i = (x<<8) + y ;
    LCD_Reg_Set(0x0021,i) ;
    
    LCD_Command(0x0022) ;	
	  LCD_Data(color) ;	      //color表示RGB值, 这个函数的功能是往(x,y)写入color值
}


unsigned int LCD_GetPixel(unsigned int x, unsigned int y)
{
	unsigned int color;
	unsigned int i;

	LCD_Reg_Set(0x16, x);
  LCD_Reg_Set(0x17, y);	
	color = read_XDATA(LCD_DATA);
	//for(i=10; i>0; i--);
	color = read_XDATA(LCD_DATA);
	//color = DataChange(color);
	return(color);
}


void LCD_XorPixel(unsigned int x, unsigned int y)
{
	unsigned int color;
	color = LCD_GetPixel(x,y);
	LCD_SetPixel(x,y,0xFFFF-color);	
}


//void LCD_ReadBipmapData(unsigned int x, unsigned int y, unsigned int xsize, unsigned int ysize, unsigned int *pBuf)
//{
//	unsigned int x_bck;
//	unsigned int i;
//	for(i=0; i<ysize; i++){
//		x_bck = x;
//		LCD_Reg_Set(0x16, x);
//    LCD_Reg_Set(0x17, y);
//		while(x_bck > 0){
//			*pBuf   = read_XDATA(LCD_DATA);
//			*pBuf++ = read_XDATA(LCD_DATA);
//		}
//	}	
//}


//wjm 2.0 
void MP4_LCD_Init(void)
{
    short i,j ;
   
    LCD_Init(MP4_LCD_INIT) ;
    
    //LCD_Reg_Set(0x0003,0x1030); //6020
    
    LCD_SetDispAddr(0, 0);    
}


//wjm 2.0 HX8309
void LCD_Init(unsigned int type)
{
	LCD_Reg_Set(0x0001,0x001B);
	
	LCD_Reg_Set(0x0002,0x0400); 
	if(type == MP4_LCD_INIT){
        LCD_Reg_Set(0x0003,0x1030); //6020
    }else{
        LCD_Reg_Set(0x0003,0x1038); //6020
  }
	LCD_Reg_Set(0x0004,0x0000);
	LCD_Reg_Set(0x0005,0x0000);
	//LCD_Reg_Set(0x0007,0x0004);
	LCD_Reg_Set(0x0008,0x0202);
	LCD_Reg_Set(0x0009,0x0000);
	LCD_Reg_Set(0x000B,0x0000);
	LCD_Reg_Set(0x000C,0x0003);
	
	LCD_Reg_Set(0x0040,0x0000);
	LCD_Reg_Set(0x0041,0x00ef); //00ef
	LCD_Reg_Set(0x0042,0xDB00);
	LCD_Reg_Set(0x0043,0xDB00);
	
	LCD_Reg_Set(0x0021,0x0000);
	LCD_Reg_Set(0x0023,0x0000);
	LCD_Reg_Set(0x0024,0x0000);
	LCD_Reg_Set(0x0044,0xAF00);
	LCD_Reg_Set(0x0045,0xDB00);
	
	LCD_Reg_Set(0x0021, 0x0000);
	LCD_Command(0x0022);	
}

__attribute__((section(".sys_init_text,\"ax\"")))
void  PowerOnLcdinit()
{
	Delay1Ms(50);
		//other register setting
	LCD_Reg_Set(0x0001,0x001B);//180度转向0x001B
	
	LCD_Reg_Set(0x0002,0x0400); 
	
	LCD_Reg_Set(0x0003,0x1038); //6020
	LCD_Reg_Set(0x0004,0x0000);
	LCD_Reg_Set(0x0005,0x0000);
	LCD_Reg_Set(0x0007,0x0004);
	LCD_Reg_Set(0x0008,0x0202);
	LCD_Reg_Set(0x0009,0x0000);
	LCD_Reg_Set(0x000B,0x0000);
	LCD_Reg_Set(0x000C,0x0003);
	
	LCD_Reg_Set(0x0040,0x0000);
	LCD_Reg_Set(0x0041,0x00ef); //00ef
	LCD_Reg_Set(0x0042,0xDB00);
	LCD_Reg_Set(0x0043,0xDB00);
	
	LCD_Reg_Set(0x0021,0x0000);
	LCD_Reg_Set(0x0023,0x0000);
	LCD_Reg_Set(0x0024,0x0000);
	LCD_Reg_Set(0x0044,0xAF00);
	LCD_Reg_Set(0x0045,0xDB00);
	//other register setting
	Delay1Ms(150);
	LCD_Reg_Set(0x0000,0x0001);

	Delay1Ms(50);
	LCD_Reg_Set(0x0010,0x0000);
	LCD_Reg_Set(0x0011,0x0000);
	LCD_Reg_Set(0x0012,0x0000);	
	LCD_Reg_Set(0x0013,0x0000);	
	
	LCD_Reg_Set(0x0013,0x1517);
	LCD_Reg_Set(0x0012,0x0008);
	LCD_Reg_Set(0x0010,0x4040);
	Delay1Ms(30);
	LCD_Reg_Set(0x0010,0x0054);
	LCD_Reg_Set(0x0012,0x0015);
	Delay1Ms(30);
	LCD_Reg_Set(0x0010,0x4460);
	Delay1Ms(30);
	//LCD_Reg_Set(0x0013,0x3613);
	LCD_Reg_Set(0x0013,0x3006);
	
	Delay1Ms(150);        
	//gamma CORRECTION
	LCD_Reg_Set(0x0030,0x0000);
	LCD_Reg_Set(0x0031,0x0207);
	LCD_Reg_Set(0x0032,0x0002);
	LCD_Reg_Set(0x0033,0x0104);
	LCD_Reg_Set(0x0034,0x0305);
	LCD_Reg_Set(0x0035,0x0002);
	LCD_Reg_Set(0x0036,0x0706);
	LCD_Reg_Set(0x0037,0x0503);
	LCD_Reg_Set(0x0038,0x0000);
	LCD_Reg_Set(0x0039,0x0000);
	//gamma CORRECTION
	
	LCD_Reg_Set(0x0007,0x0005);
	Delay1Ms(50);
	LCD_Reg_Set(0x0007,0x0025);
	LCD_Reg_Set(0x0007,0x0027);
	Delay1Ms(50);
	LCD_Reg_Set(0x0007,0x0037); 
	Delay1Ms(15);	
}

//wjm 2.0 HX8309
void Standby_lcd(void)
{
//	Display_off();
//	LCD_Reg_Set(0x0010,0x6021);
//	//close_backlight
}


void  standby_return()
{
//	LCD_Reg_Set(0x0000,0x0001);
//    Delay1Ms(15);
//    LCD_Reg_Set(0x0010,0x0000);
//	
//	LCD_Reg_Set(0x0013,0x1517);
//	LCD_Reg_Set(0x0012,0x0008);
//	LCD_Reg_Set(0x0010,0x4040);
//	Delay1Ms(20);
//	LCD_Reg_Set(0x0010,0x0054);
//	LCD_Reg_Set(0x0012,0x0015);
//	Delay1Ms(20);
//	LCD_Reg_Set(0x0010,0x4460);
//	Delay1Ms(20);
//	//LCD_Reg_Set(0x0013,0x3613);
//	//LCD_Reg_Set(0x0013,0x360d);
//	LCD_Reg_Set(0x0013,0x3006);
//	
//	Delay1Ms(30);        
//	LCD_Reg_Set(0x0007,0x0005);
//	Delay1Ms(20);
//	LCD_Reg_Set(0x0007,0x0025);
//	LCD_Reg_Set(0x0007,0x0027);
//	Delay1Ms(20);
//	LCD_Reg_Set(0x0007,0x0037); 
}

//wjm 2.0 HX8309
void Display_off(void)
{
//	LCD_Reg_Set(0x000B,0x0000); 
//	LCD_Reg_Set(0x0010,0x6020);  
//	LCD_Reg_Set(0x0007,0x0036);
//	Delay1Ms(6);
//	LCD_Reg_Set(0x0007,0x0026);
//	Delay1Ms(6);
//	LCD_Reg_Set(0x0007,0x0004);
//	Delay1Ms(9);
//	LCD_Reg_Set(0x0007,0x0037); 
//	Delay1Ms(10);
//	LCD_Reg_Set(0x0011,0x0000);
//	LCD_Reg_Set(0x0010,0x0000);
//	LCD_Reg_Set(0x0012,0x0000);
//	LCD_Reg_Set(0x0013,0x0000);
}


//wjm 2.0 HX8309
//void Sleep_lcd(void)
//{
//  Display_off();
//	LCD_Reg_Set(0x0010,0x6022);
//	//close_backlight 	
//}


////wjm  2.0 HX8309
//void Display_Sub(UINT16 RGB_Data)
//{
//    UINT16  i,j;
//    UINT16  temp ;
//    
//    LCD_Command(0x0021);       //ram address set
//    LCD_Data(0x0000);           //    
//    
//    LCD_Command(0x0022);       //ram address write 
//    for(i = 176; i>0; i--)
//    {
//        for(j = 220; j>0; j--)      
//           {
//               LCD_Data(RGB_Data);
//           }
//    }
//    
//}


////wjm 2.0 HX8309
//void Display_Image(unsigned int *pBuffer)
//{
//    unsigned int i,j,temp,temp_data;
//
//    LCD_Command(0x0021);       //ram address set
//    LCD_Data(0x0000);           //    
//    
//    LCD_Command(0x0022);       //ram address write 
//    
//    for(i = 0x800; i>0; i--){
//        temp_data = *pBuffer++;   //pBuffer[i];
//        temp = 0x0080;
//        for(j=8; j>0; j--){
//            if(temp & temp_data){
//                LCD_Data(0x001f);
//            }else{
//                LCD_Data(0x07e0);
//            }
//            temp = temp >> 1;
//        }
//    }
//}


////wjm 2.0 HX8309
//void Display_Picture(unsigned int *pBuffer)
//{
//    unsigned int  i,j;
//
//    LCD_Command(0x0021);       //ram address set
//    LCD_Data(0x0000);           //    
//    
//    LCD_Command(0x0022);       //ram address write 
//    for(i = 176; i>0; i--){
//        for(j = 220; j>0; j--){
//           	LCD_Data(*pBuffer++);
//     	}
//    }
//}


//2.0 wjm  HX8309
void LCD_SetDispAddr(unsigned int x,unsigned int y)
{
	  unsigned short i;
	  i = (x<<8) + y ;
    LCD_Reg_Set(0x0021,i) ;
    
    LCD_Command(0x0022) ;	
}


//2.0 wjm HX8309
void LCDDEV_SetWindow(int x0, int y0, int x1, int y1)
{
	  unsigned short row,column ;
	  row =  (x1<<8) + x0 ;
	  column = (y1<<8) + y0 ;
    
	  LCD_Reg_Set(0x0045,row);
	  LCD_Reg_Set(0x0044,column);
	  LCD_SetDispAddr(x0, y0) ;
	  
	  LCD_Command(0x0022);   
}


//2.0 wjm HX8309
void LCDDEV_RevertWindow(int x0, int y0, int x1, int y1)
{
   LCDDEV_SetWindow(x0,y0,x1,y1) ;  
}

⌨️ 快捷键说明

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