/*********************************************************************************/
//#include "5249.h"
#include "ST7529.h"
//#include "typedefs.h"
extern unsigned char font_ASCII[],font_ASCII_8x8[],font_ASCII_16x8[],font_gb[],font_none[], font_gb_f[];//
#define LCD_CS_BASE_ADDRESS 0x2000
#define LCD_CS_MASK 0x00FF0021
#define LCD_CS_CTR 0x0180
char Line_Display_Buffer[256*16];// = 0xf0;
unsigned char *fontC();
char MBAR_CSAR1,MBAR_CSCR1,MBAR_CSMR1;
int g_nDisplayHalfFlag;
#define FONT_WIDE 16 //in pixel
#define FONT_HEIGHT 16 //in pixel
typedef struct
{
uint8 wide;
uint8 height;
uint8 leftMargin;
uint8 rightMargin;
uint8 topMargin;
uint8 bottonMargin;
}sCharacterInfo;
//------------------------------------------------------------------
static void ST7529_8bitsWrite(uint32 addr, uint8 data)
{
vDisableIsrs();
*(volatile uint8 *)addr = data;
vEnableIsrs();
}
//------------------------------------------------------------------
void ST7529_8bitsWrite_Command(const uint8 data)
{
ST7529_8bitsWrite(COMMAND_REG, data);
}
void ST7529_8bitsWrite_Data(const uint8 data)
{
//int i;
ST7529_8bitsWrite(DATA_REG, data);
}
//==================================================================
//-----------------------------------------------------------------
void HDT_ClearDisplay()
{
int i,j;
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(0); // parameter data0
ST7529_8bitsWrite_Data(159); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
ST7529_8bitsWrite_Data(31); // parameter data0
ST7529_8bitsWrite_Data(84); // parameter data1
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<162;i++)
{
for(j=0;j<160;j++) //write 160 byte display data to display RAM
{
ST7529_8bitsWrite_Data(0x20);
}
}
}
//------------------------------------------------------------------
//==================================================================
//------------------------------------------------------------------
void ST7529SetDispWindow(sWindowPosInf * sWindowPos)
{
uint16 hori,vert;
hori = sWindowPos->ColStart;
vert = sWindowPos->RowStart;
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(vert*16+0); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
ST7529_8bitsWrite_Data(32+((hori+1)/2)*5); // parameter data0
ST7529_8bitsWrite_Data(32+((hori+1)/2)*5+4); // parameter data1
}
//===================================================================
void LCDFillSpecifiedBlock(sWindowPosInf * sWindowPos, const uint16 * const data_buf)
{
int i,j,k;
uint8 temp;
uint16 hori,vert;
uint16 hori_e,vert_e;
hori = sWindowPos->ColStart;
vert = sWindowPos->RowStart;
hori_e = sWindowPos->ColEnd;
vert_e = sWindowPos->RowEnd;
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(vert*16+8); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
ST7529_8bitsWrite_Data(32+(hori/2)*5 ); // parameter data0
ST7529_8bitsWrite_Data(32+(hori/2)*5+4 ); // parameter data0
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<16;i++)
{
for(j=0;j<15;j++) //write 160 byte display data to display RAM
{
temp = data_buf[i*16+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void Display_Buffer_To_LCD(uint16 row, uint16 col, uint16 num)
{
int i,j,k;
int m,n;
uint8 temp;
uint16 num1;
num1 = col + num;
if(num1 > 19) num1 = 20;
if(num1 < 20)
{
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
if(0 == g_nDisplayHalfFlag)
ST7529_8bitsWrite_Data(row*16+8); // parameter data0
else
ST7529_8bitsWrite_Data(row*16+16); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
//ST7529_8bitsWrite_Data(32+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(31+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(32+((col*8+2)/3)+((num*8+2)/3)-1 ); // parameter data1 = 159
//m = ((num*8+2)/3)*3;
m = ((num*8+2)/3)*3+3;
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<16;i++)
{
for(j=0;j<m;j++) //write 160 byte display data to display RAM
{
temp = Line_Display_Buffer[i*256+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
else if(num1 == 20)
{
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
if(0 == g_nDisplayHalfFlag)
ST7529_8bitsWrite_Data(row*16+8); // parameter data0
else
ST7529_8bitsWrite_Data(row*16+16); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
//ST7529_8bitsWrite_Data(32+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(31+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(32+ 53 -1); // parameter data1 = 159
//m = 159 - ((col*8+2)/3)*3 ;
m = 159 - ((col*8+2)/3)*3+3;
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<16;i++)
{
for(j=0;j<m;j++) //write 160 byte display data to display RAM
{
temp = Line_Display_Buffer[i*256+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
}
//=============================================================
//*************************************************************
//=============================================================
void Display_Buffer_To_LCD_8x8(uint16 row, uint16 col, uint16 num)
{
int i,j,k;
int m,n;
uint8 temp;
uint16 num1;
num1 = col + num;
if(num1 > 19) num1 = 20;
if(num1 < 20)
{
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(row*8); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
//ST7529_8bitsWrite_Data(32+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(31+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(32+((col*8+2)/3)+((num*8+2)/3)-1 ); // parameter data1 = 159
//m = ((num*8+2)/3)*3;
m = ((num*8+2)/3)*3+3;
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<8;i++)
{
for(j=0;j<m;j++) //write 160 byte display data to display RAM
{
temp = Line_Display_Buffer[i*256+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
else if(num1 == 20)
{
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(row*8); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
//ST7529_8bitsWrite_Data(32+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(31+((col*8+2)/3)); // parameter data0
ST7529_8bitsWrite_Data(32+ 53 -1); // parameter data1 = 159
//m = 159 - ((col*8+2)/3)*3 ;
m = 159 - ((col*8+2)/3)*3+3;
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<8;i++)
{
for(j=0;j<m;j++) //write 160 byte display data to display RAM
{
temp = Line_Display_Buffer[i*256+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
}
//==================================================================
//******************************************************************
//==================================================================
void Fi