📄 lcd2.0_hx8309_220x176_16_v1.c
字号:
//******************************************************************************
#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 + -