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

📄 tslcd_elt240320tp_v1_10.c

📁 just uploading the file to get a new downlad for AD7843
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "app_config.h"
//  _____________________
// | _______________	 |
// ||<-- origin in software
// ||	---------	|[]	 |
// ||		/		|[]	 |
// || 	-------->	|[]	 |
// ||_______________|[]	 |
// |<-- LCD's origin (0x0000)
//
//define TS_ORN_PORTRAIT when your LCD is installed in vertical
//  ________________
// |<-- LCD's origin (0x0000) = origin in software
// ||--------------||
// ||			   ||
// ||	------     ||
// ||		/	   ||
// ||	  /		   ||
// ||	/		   ||
// ||	------>	   ||
// ||______________||
// | [] [] [] [] []	|
// |________________|
//

/*
#ifdef TS_ORN_PORTRAIT
#define TS_SIZE_X					240
#define TS_SIZE_Y					320
#define TS_VAL_ENTRY_MOD			0x0030
#define TS_INS_GRAM_ADX				TS_INS_GRAM_HOR_AD
#define TS_INS_GRAM_ADY				TS_INS_GRAM_VER_AD
#define TS_INS_START_ADX   			TS_INS_HOR_START_AD
#define TS_INS_END_ADX   			TS_INS_HOR_END_AD
#define TS_INS_START_ADY   			TS_INS_VER_START_AD
#define TS_INS_END_ADY   			TS_INS_VER_END_AD
#else
#define TS_SIZE_X					320
#define TS_SIZE_Y					240
#define TS_VAL_ENTRY_MOD			0x0028
#define TS_INS_GRAM_ADX				TS_INS_GRAM_VER_AD
#define TS_INS_GRAM_ADY				TS_INS_GRAM_HOR_AD
#define TS_INS_START_ADX   			TS_INS_VER_START_AD
#define TS_INS_END_ADX   			TS_INS_VER_END_AD
#define TS_INS_START_ADY   			TS_INS_HOR_START_AD
#define TS_INS_END_ADY   			TS_INS_HOR_END_AD
#endif
*/

extern void delay_1ms(unsigned int n);

void TSLCDCharDisp(char charactor,ts_pos_t sx,ts_pos_t sy,ts_mode_t mode); //low level function to print a character on LCD

#include "font_courier.h"

#define FONT_BIT_WIDTH 8
#define FONT_BYTE_HIGHT 2
#define FONT_SIZE FONT_BIT_WIDTH*FONT_BYTE_HIGHT

#define FONT_WIDTH FONT_BIT_WIDTH
#define FONT_HEIGHT FONT_BYTE_HIGHT*8

unsigned char char_buf[FONT_BIT_WIDTH][FONT_BYTE_HIGHT];

void buf_store(unsigned char charactor);

unsigned short font_color;
unsigned short back_color;
ts_pos_t offsetx,offsety;
ts_pos_t ts_margin_xl = 0;
ts_pos_t ts_margin_xr = TS_SIZE_X - 1;
ts_pos_t ts_margin_yu = 0;
ts_pos_t ts_margin_yl = TS_SIZE_Y - 1;

#define TSLCDGetMarginXl()			ts_margin_xl
#define TSLCDGetMarginXr()			ts_margin_xr
#define TSLCDGetMarginYu()			ts_margin_yu
#define TSLCDGetMarginYl()			ts_margin_yl

void TSLCDSetFontColor(unsigned short color) //set text's color
{
	font_color = color;
}

void TSLCDSetBackColor(unsigned short color) //set back color for TS_MODE_FULL
{
	back_color = color;
}

void TSLCDOutDat(unsigned short dat) //write data to LCD
{
	TS_XDAT = dat >> 8; 
	TS_XDAT = dat;
}

void TSLCDOutDat2(unsigned char dath,unsigned char datl) //write data to LCD
{
	TS_XDAT = dath; 
	TS_XDAT = datl;
}

void TSLCDOutIns(unsigned short ins) //write instruction to LCD
{
	TS_XINS = ins >> 8; 
	TS_XINS = ins;
}

unsigned short TSLCDInDat(void) //read data from LCD
{
	unsigned short dat = TS_XDAT << 8;
	dat |= TS_XDAT;
	return (dat);
}

unsigned short TSLCDInIns(void) //read data from LCD
{
	unsigned short ins = TS_XINS << 8;
	ins |= TS_XINS;
	return (ins);
}

void TSLCDRst(void) //pulse reset signal to LCD
{
	Orb(LCD_RST_DPRT,LCD_RST_PIN);
	Clrb(LCD_RST_PRTC,LCD_RST_PIN);
	delay_1ms(50);
	Setb(LCD_RST_PRTS,LCD_RST_PIN);
}

void TSLCDInit(void) //initial LCD
{
	delay_1ms(100);

	TSLCDOutIns(0x00E5);
	TSLCDOutDat(0x8000); 					//set the internal vcore voltage
	TSLCDOutIns(TS_INS_START_OSC);
	TSLCDOutDat(0x0001); 					//start oscillator
	delay_1ms(50);

	TSLCDOutIns(TS_INS_DRIV_OUT_CTRL);
	TSLCDOutDat(0x0100); 					//set SS, SM
	TSLCDOutIns(TS_INS_DRIV_WAV_CTRL);
	TSLCDOutDat(0x0700); 					//set 1 line inversion
	
	TSLCDOutIns(TS_INS_ENTRY_MOD);
	TSLCDOutDat(TS_VAL_ENTRY_MOD);			//set GRAM write direction, BGR=0

	TSLCDOutIns(TS_INS_RESIZE_CTRL);
	TSLCDOutDat(0x0000); 					//no resizing

	TSLCDOutIns(TS_INS_DISP_CTRL2);
	TSLCDOutDat(0x0202); 					//front & back porch periods = 2
	TSLCDOutIns(TS_INS_DISP_CTRL3);
	TSLCDOutDat(0x0000); 					
	TSLCDOutIns(TS_INS_DISP_CTRL4);
	TSLCDOutDat(0x0000); 					
	TSLCDOutIns(TS_INS_RGB_DISP_IF_CTRL1);
	TSLCDOutDat(0x0000); 					//select system interface				
	TSLCDOutIns(TS_INS_FRM_MARKER_POS);
	TSLCDOutDat(0x0000); 					
	TSLCDOutIns(TS_INS_RGB_DISP_IF_CTRL2);
	TSLCDOutDat(0x0000);					
	
	TSLCDOutIns(TS_INS_POW_CTRL1);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_POW_CTRL2);
	TSLCDOutDat(0x0000); 					
	TSLCDOutIns(TS_INS_POW_CTRL3);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_POW_CTRL4);
	TSLCDOutDat(0x0000); 					
	delay_1ms(200);

	TSLCDOutIns(TS_INS_POW_CTRL1);
	TSLCDOutDat(0x17B0);
	TSLCDOutIns(TS_INS_POW_CTRL2);
	TSLCDOutDat(0x0137); 					
	delay_1ms(50);

	TSLCDOutIns(TS_INS_POW_CTRL3);
	TSLCDOutDat(0x013C);
	delay_1ms(50);

	TSLCDOutIns(TS_INS_POW_CTRL4);
	TSLCDOutDat(0x1400);
	TSLCDOutIns(TS_INS_POW_CTRL7);
	TSLCDOutDat(0x0007);
	delay_1ms(50);

	TSLCDOutIns(TS_INS_GRAM_HOR_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_GRAM_VER_AD);
	TSLCDOutDat(0x0000);

	TSLCDOutIns(TS_INS_GAMMA_CTRL1);
	TSLCDOutDat(0x0007);
	TSLCDOutIns(TS_INS_GAMMA_CTRL2);
	TSLCDOutDat(0x0504);
	TSLCDOutIns(TS_INS_GAMMA_CTRL3);
	TSLCDOutDat(0x0703);
	TSLCDOutIns(TS_INS_GAMMA_CTRL4);
	TSLCDOutDat(0x0002);
	TSLCDOutIns(TS_INS_GAMMA_CTRL5);
	TSLCDOutDat(0x0707);
	TSLCDOutIns(TS_INS_GAMMA_CTRL6);
	TSLCDOutDat(0x0406);
	TSLCDOutIns(TS_INS_GAMMA_CTRL7);
	TSLCDOutDat(0x0006);
	TSLCDOutIns(TS_INS_GAMMA_CTRL8);
	TSLCDOutDat(0x0404);
	TSLCDOutIns(TS_INS_GAMMA_CTRL9);
	TSLCDOutDat(0x0700);
	TSLCDOutIns(TS_INS_GAMMA_CTRL10);
	TSLCDOutDat(0x0A08);

	TSLCDOutIns(TS_INS_HOR_START_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_HOR_END_AD);
	TSLCDOutDat(0x00EF);
	TSLCDOutIns(TS_INS_VER_START_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_VER_END_AD);
	TSLCDOutDat(0x013F);
	TSLCDOutIns(TS_INS_GATE_SCAN_CTRL1);
	TSLCDOutDat(0x2700);
	TSLCDOutIns(TS_INS_GATE_SCAN_CTRL2);
	TSLCDOutDat(0x0001);
	TSLCDOutIns(TS_INS_GATE_SCAN_CTRL3);
	TSLCDOutDat(0x0000);

	TSLCDOutIns(TS_INS_PART_IMG1_DISP_POS);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PART_IMG1_START_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PART_IMG1_END_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PART_IMG2_DISP_POS);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PART_IMG2_START_AD);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PART_IMG2_END_AD);
	TSLCDOutDat(0x0000);

	TSLCDOutIns(TS_INS_PANEL_IF_CTRL1);
	TSLCDOutDat(0x0010);
	TSLCDOutIns(TS_INS_PANEL_IF_CTRL2);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PANEL_IF_CTRL3);
	TSLCDOutDat(0x0003);
	TSLCDOutIns(TS_INS_PANEL_IF_CTRL4);
	TSLCDOutDat(0x0110);
	TSLCDOutIns(TS_INS_PANEL_IF_CTRL5);
	TSLCDOutDat(0x0000);
	TSLCDOutIns(TS_INS_PANEL_IF_CTRL6);
	TSLCDOutDat(0x0000);

	TSLCDOutIns(TS_INS_DISP_CTRL1);
	TSLCDOutDat(0x0173);
}

void TSLCDShowPic2(ts_pos_t sx,ts_pos_t ex,ts_pos_t sy,ts_pos_t ey,const unsigned short *pic,ts_mode_t mode)
//show picture from code memory with specific size
{
	unsigned long k = 0;
	unsigned short color;
	unsigned int x,y;
	unsigned int i,j;
	if (sx < ts_margin_xl)
		sx = ts_margin_xl;
	if (ex > ts_margin_xr)
		ex = ts_margin_xr;
	if (sy < ts_margin_yu)
		sy = ts_margin_yu;
	if (ey > ts_margin_yl)			 
		ey = ts_margin_yl;

	TSLCDOutIns(TS_INS_START_ADX);
	TSLCDOutDat(sx);
	TSLCDOutIns(TS_INS_END_ADX);
	TSLCDOutDat(ex);
	TSLCDOutIns(TS_INS_GRAM_ADX);
	TSLCDOutDat(sx);
	x = ex - sx + 1;

#ifndef TS_ORN_PORTRAIT
	sy = TS_SIZE_Y - 1 - sy; 	// mirror start y address
	ey = TS_SIZE_Y - 1 - ey; 	// mirror end y address
	TSLCDOutIns(TS_INS_START_ADY);
	TSLCDOutDat(ey);
	TSLCDOutIns(TS_INS_END_ADY);
	TSLCDOutDat(sy);
	TSLCDOutIns(TS_INS_GRAM_ADY);
	TSLCDOutDat(sy);//fix from bug of v1_00
	y = sy - ey + 1;
#else
	TSLCDOutIns(TS_INS_START_ADY);
	TSLCDOutDat(sy);
	TSLCDOutIns(TS_INS_END_ADY);
	TSLCDOutDat(ey);
	TSLCDOutIns(TS_INS_GRAM_ADY);
	TSLCDOutDat(sy);
	y = ey - sy + 1;
#endif

	TSLCDOutIns(TS_INS_RW_GRAM);

	if (mode == TS_MODE_FULL)
	{
		for (j=0; j<y; j++)
			for (i=0; i<x; i++)
			{
				TSLCDOutDat(code(pic[k]));
				k++;
			}
	}
	else
	if (mode == TS_MODE_NORMAL)
	{
		for (j=0; j<y; j++)
			for (i=0; i<x; i++)
			{
				if (code(pic[k]) == TS_COL_WHITE)
				{
					color = TSLCDInDat(); 		// ignore invalid data
					color = TSLCDInDat();
					TSLCDOutDat(color);
				}
				else
				{
					TSLCDOutDat(code(pic[k]));
				}
				k++;
			}
	}
}

void TSLCDFillRect(ts_pos_t sx,ts_pos_t ex,ts_pos_t sy,ts_pos_t ey,unsigned short color,ts_mode_t mode) //draw a rectangular
{
	unsigned int x,y;
	unsigned int i,j;
	if (sx < ts_margin_xl)
		sx = ts_margin_xl;
	if (ex > ts_margin_xr)
		ex = ts_margin_xr;
	if (sy < ts_margin_yu)
		sy = ts_margin_yu;
	if (ey > ts_margin_yl)			 

⌨️ 快捷键说明

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