📄 lcd1.8_tl1771_160x128_8_v1.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 + -