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

📄 lcd1.8_tl1771_160x128_8_v1.c

📁 TL1771驱动
💻 C
字号:
//******************************************************************************
#define     _IN_LCD_LTPS
//------------------------------------------------------------------------------
#include "Memap.h"
#include "Macro.h"
#include "Lcd.h"
//------------TL1771----128X160--------------------------------------------------------------
void LCD_SetDispAddr(unsigned int x,unsigned int y);
void LCDDEV_DlyTmrMs(unsigned int tmr);

#define LCD_DlyTmrMs(tmr)    Delay1Ms(tmr)//LCDDEV_DlyTmrMs(tmr)


//void LCDDEV_DlyTmrMs(unsigned int tmr)
//{
//    unsigned int i;
//    unsigned int j;
//    while(tmr){
//        for(j=0; j<0x4000; j++){    //OSC = 24M 时,time is 6ms (j<4000)
//            //i += j;
//            asm("nop");
//            asm("nop");
//            asm("nop");
//            asm("nop");
//        }
//        tmr--;
//    }
//}


//nt3911  wjm
void LCD_Command(unsigned int cmd)
{
    write_XDATA(LCD_COMMAND,cmd >> 8);
    write_XDATA(LCD_COMMAND,cmd);
}

void LCD_Data(unsigned int data)
{
    write_XDATA(LCD_DATA,data >> 8);
    write_XDATA(LCD_DATA,data);
}


void LCD_Reg_Set(unsigned int cmd,unsigned int data)
{
     LCD_Command(cmd);
     LCD_Data(data);
}


//nt3911 wjm
unsigned int LCD_StatusRead(void)
{
    unsigned int i,j;
    i = read_XDATA(LCD_COMMAND);
    j = read_XDATA(LCD_COMMAND);
    i = ((i & 0xff00) | (j >> 8));

    return i;
}


//nt3911 wjm
void LCD_SetPixel(unsigned int x, unsigned int y, unsigned int color)
{
    LCD_SetDispAddr(x,y);
	LCD_Data(color);
}


unsigned int LCD_GetPixel(unsigned int x, unsigned int y)
{
	unsigned int color;
    
    LCD_SetDispAddr(x,y);
	color = read_XDATA(LCD_DATA);
	color = read_XDATA(LCD_DATA);
	
	color = read_XDATA(LCD_DATA)<<8;
	color |= (read_XDATA(LCD_DATA)&0xff);

	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)
{

}


void LCD_PowerOff(void)
{
}


//NT3911
void Display_Sub(unsigned int RGB_Data)
{
    unsigned int  i,j;
    
    LCD_SetDispAddr(0,0);
    for(i = 160; i>0; i--){
        for(j = 128; j>0; j--)        
            LCD_Data(RGB_Data);
    }
}


void LCD_Init()
{
//     LCD_Reg_Set(0x0001,0x030c);  
//     LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
//     LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
//     LCD_Reg_Set(0x0003,0x1038);  //Entry Mode  
//     Display_Sub(0x0000);

     LCD_Reg_Set(0x0001,0x000c);  
     LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
     LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
     LCD_Reg_Set(0x0003,0x1038);  //Entry Mode  
     Display_Sub(0x0000);
}


//TL1771
void  PowerOnLcdinit()
{
    LCD_Reg_Set(0x0000,0x0001);  //;Power Control 2      
    Delay1Ms(50);
    
    LCD_Reg_Set(0x0011,0x000a);  //;Power Control 2                       
    LCD_Reg_Set(0x0012,0x0001);  //;Power Control 3
    LCD_Reg_Set(0x0013,0x081e);  //;Power Control 4
    LCD_Reg_Set(0x0014,0x0c12);  //;Power Control 5
    LCD_Reg_Set(0x0010,0x220c);  //;Power Control 1
    
    Delay1Ms(10);
     
//    LCD_Reg_Set(0x0001,0x030c);  
    LCD_Reg_Set(0x0001,0x000c);  

    LCD_Reg_Set(0x0002,0x0200); 
    LCD_Reg_Set(0x0003,0x1038);  //Entry Mode                               
                                 
    LCD_Reg_Set(0x0007,0x0005);  //Display Control 1
    LCD_Reg_Set(0x0008,0x030a);  //Display Control 2
    LCD_Reg_Set(0x000b,0x0000); 
    LCD_Reg_Set(0x000c,0x0000); 
    LCD_Reg_Set(0x00a0,0x0100); 
    LCD_Reg_Set(0x00a7,0x0011); 
    LCD_Reg_Set(0x000e,0x0002); 
    
    LCD_Reg_Set(0x0030,0x0300);    //;Gamma Control 1
    LCD_Reg_Set(0x0031,0x0307);    //;Gamma Control 2
    LCD_Reg_Set(0x0032,0x0000);    //;Gamma Control 3                        
    LCD_Reg_Set(0x0033,0x0200);    //;Gamma Control 4 
    LCD_Reg_Set(0x0034,0x0707);    //;Gamma Control 5 
    LCD_Reg_Set(0x0035,0x0003);    //;Gamma Control 6 
    LCD_Reg_Set(0x0036,0x0703);    //;Gamma Control 7 
    LCD_Reg_Set(0x0037,0x0002);    //;Gamma Control 8 
    
    LCD_Reg_Set(0x0038,0x0a00);    //;Power Control 6  
    LCD_Reg_Set(0x0040,0x0000);     
    LCD_Reg_Set(0x0042,0x9f00);     
    LCD_Reg_Set(0x0043,0x9f00); 
    
    LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
    LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
    
    LCD_Reg_Set(0x0007,0x1001);    //;Display Control 1                       
                                                        
    Delay1Ms(40);                 
                                  
    LCD_Reg_Set(0x0007,0x1021);    //;Display Control 1                
    LCD_Reg_Set(0x0007,0x1023);    //;Display Control 1

    Delay1Ms(30);
    
    LCD_Reg_Set(0x0007,0x1037);
}



void MP4_LCD_Init(void)
{
//   unsigned int x,y,temp;
//   LCD_Reg_Set(0x0001,0x030c);  
//   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
//   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
//   LCD_Reg_Set(0x0003,0x1038);  //Entry Mode  
//   Display_Sub(0x0000);
//   LCD_SetDispAddr(0,0);

   unsigned int x,y,temp;
   LCD_Reg_Set(0x0001,0x000c);  
   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
   LCD_Reg_Set(0x0003,0x1038);  //Entry Mode  
   Display_Sub(0x0000);
   LCD_SetDispAddr(0,0);
}


//NT3911
void Display_Image(unsigned int *pBuffer)
{
    unsigned int i,j,temp,temp_data;

    LCD_SetDispAddr(0,0);
    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;
        }
    }
}


//NT3911
void Display_Picture(unsigned int *pBuffer)
{
    unsigned int  i,j;

    LCD_SetDispAddr(0,0);
    for(i = 160; i>0; i--){
        for(j = 128; j>0; j--){
           	LCD_Data(*pBuffer++);
     	}
    }
}


//TL1771 wjm
void LCD_SetDispAddr(unsigned int x,unsigned int y)
{
   unsigned int temp;
   
   temp = ((x<<8)&0xff00)+ y ;
   LCD_Reg_Set(0x0021,temp);  
   LCD_Command(0x0022);      
}



//TL1771 wjm
void LCDDEV_SetWindow(int x0, int y0, int x1, int y1)
{              
    LCD_Reg_Set(0x0044,((y1<<8)+y0));            
    LCD_Reg_Set(0x0045,((x1<<8)+x0));   
    LCD_SetDispAddr(x0,y0);
    LCD_Command(0x0022);   
}


//TL1771 wjm
void LCDDEV_RevertWindow(int x0, int y0, int x1, int y1)
{
    LCD_Reg_Set(0x0044,((y1<<8)+y0));          
    LCD_Reg_Set(0x0045,((x1<<8)+x0));  //Vertical window address       
}


void LCD_ReadBitmap(int x0, int y0, int xsize, int ysize, unsigned int *pData)
{
	int x1, y1;
	x1 = x0+xsize-1; 
	y1 = y0+ysize-1; 
	LCDDEV_SetWindow(x0, y0, x1, y1);
	read_XDATA(LCD_DATA);
	read_XDATA(LCD_DATA);
	for(y1=0; y1<ysize; y1++){
		for(x1=0; x1<xsize; x1++){
                *pData =  (read_XDATA(LCD_DATA)&0xFF)<<8;
                *pData++ |= read_XDATA(LCD_DATA)&0xFF;
		}
	}
		
	LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}


unsigned int LCDDEV_GetPixel(int x, int y)
{
}


void LCDDEV_SetPixel(int x, int y, unsigned int color)
{
    LCD_SetDispAddr(x,y);
	LCD_Data(color);
}

void LCDDEV_XorPixel(int x, int y)
{
	unsigned int color;
	color = LCDDEV_GetPixel(x,y);
	LCDDEV_SetPixel(x,y,0xFFFF-color);			
}

void LCDDEV_DrawHLine(int x0, int y, int x1)
{
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; x0<=x1; x0++){
			LCDDEV_XorPixel(x0, y);
		}
	}else{
		LCDDEV_SetWindow(x0, y, x1, y);
		for(; x0<=x1; x0++){
			LCD_Data(LCD_COLOR);
		}
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}

void LCDDEV_DrawVLine(int x, int y0, int y1)
{
    unsigned int color;
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; y0<=y1; y0++){
			LCDDEV_XorPixel(x, y0);
		}
	}else{
	    if(LCD_Context.DrawMode == LCD_DRAWMODE_REV)
	        color = LCD_BKCOLOR;
	    else
	        color = LCD_COLOR;
		LCDDEV_SetWindow(x, y0, x, y1);
		for(; y0<=y1; y0++){
			LCD_Data( LCD_COLOR);
		}	
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}

void LCDDEV_FillRect(int x0, int y0, int x1, int y1)
{
    unsigned int color;
	int i;
	if (LCD_Context.DrawMode & LCD_DRAWMODE_XOR){
		for(; y0<=y1; y0++){
			LCDDEV_DrawHLine(x0, y0, x1);
		}
	}else{
	    if(LCD_Context.DrawMode == LCD_DRAWMODE_REV)
	        color = LCD_BKCOLOR;
	    else
	        color = LCD_COLOR;
		LCDDEV_SetWindow(x0, y0, x1, y1);
		for(; y0<=y1 ; y0++){
			i = x0;
			for(; i<=x1; i++){
				LCD_Data(LCD_COLOR);
			}
		}
		
		LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
	}
}


void LCDDEV_DrawBitLine1BPP(int x, int y, int xsize, int Diff, unsigned int *pData) 
{
  	x += Diff;

	switch(LCD_Context.DrawMode){
		case LCD_DRAWMODE_REV:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCDDEV_SetPixel(x, y, LCD_BKCOLOR);
				else
					LCDDEV_SetPixel(x, y, LCD_COLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
		case LCD_DRAWMODE_TRANS:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCDDEV_SetPixel(x, y, LCD_COLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
		case LCD_DRAWMODE_XOR:
			while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCDDEV_XorPixel(x,y);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
	    case LCD_DRAWMODE_CIR90:
	        while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCDDEV_SetPixel(x, y, LCD_COLOR);
				y++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
	        break;
		default:
		    while(xsize){
				if(*pData & (0x8000 >> Diff))
					LCDDEV_SetPixel(x, y, LCD_COLOR);
				else
					LCDDEV_SetPixel(x, y, LCD_BKCOLOR);
				x++;
				xsize--;
				if(++Diff == 16){
					Diff = 0;
					pData++;
				}
			}
			break;
	}	
}

void LCDDEV_DrawBitLine16BPP(int x0, int y0, int xsize, int ysize, unsigned int *pData) 
{
	int x1,y1;
	unsigned int i;
	
	x1 = x0+xsize-1;
	y1 = y0+ysize-1;
	LCDDEV_SetWindow(x0, y0, x1, y1);
	for(; ysize>0; ysize--){
		i = xsize;
		for(; i>0; i--){
			LCD_Data(*pData++);
		}
	}
		
	LCDDEV_RevertWindow(0, 0, LCD_MAX_XSIZE-1, LCD_MAX_YSIZE-1);
}

void LCDDEV_DrawBitmap(int x0,    		int y0,
                       int xsize, 		int ysize,
                       int BitsPerPixel,	int BytesPerLine,
                       unsigned int *pData, 		int Diff)
{
  	int i;
   	switch (BitsPerPixel) {
   		case 1:
   		    if(LCD_Context.DrawMode == LCD_DRAWMODE_CIR90){
   			    for(i=0; i<ysize; i++){ 
   	                LCDDEV_DrawBitLine1BPP(x0+i, y0, xsize, Diff, pData);
   	                pData += BytesPerLine;
   	                }
   		    }else{
   			    for(i=0; i<ysize; i++){ 
   				LCDDEV_DrawBitLine1BPP(x0, i+y0, xsize, Diff, pData);
   				pData += BytesPerLine;
   			}
   			}
   			break;
   		case 16:
       		LCDDEV_DrawBitLine16BPP(x0, y0, xsize, ysize, pData);
       	break;
   	}
}


//NT3911  128
void DMA_LcdJpegInit(void)
{
//   LCD_Reg_Set(0x0001,0x020c);  
//   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
//   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
//   LCD_Reg_Set(0x0003,0x1030);  //Entry Mode  
////   Display_Sub(0x0000);
//   LCD_SetDispAddr(0,0);
   
   LCD_Reg_Set(0x0001,0x010c);  
   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
   LCD_Reg_Set(0x0003,0x1030);  //Entry Mode  
//   Display_Sub(0x0000);
   LCD_SetDispAddr(0,0);   
}


//NT3911      160
void DMA_LcdJpegInitX(void)
{   
//   LCD_Reg_Set(0x0001,0x030c);  
//   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
//   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
//   LCD_Reg_Set(0x0003,0x1038);  //Entry Mode  
////   Display_Sub(0x0000);
//   LCD_SetDispAddr(0,0);
   
   LCD_Reg_Set(0x0001,0x000c);  
   LCD_Reg_Set(0x0044,0x7f00);   //Horizontal window address
   LCD_Reg_Set(0x0045,0x9f00);   //Vertical window address
   LCD_Reg_Set(0x0003,0x1038);  //Entry Mode     
   LCD_SetDispAddr(0,0);
}


void Sleep_lcd(void)
{

}


void  Sleep_return()
{

}
//******************************************************************************

⌨️ 快捷键说明

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