📄 st75292.c
字号:
/*********************************************************************************/
//#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 FillDisplayBufferASCII( uint16 * const data_buf, const uint16 char_num)
{
int i,j,k;
uint8 temp;
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*8+j];
Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*8+j];
}
}
}
void FillDisplayBufferASCII_8x8( uint16 * const data_buf, const uint16 char_num)
{
int i,j,k;
uint8 temp;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*8+j];
Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*8+j];
}
}
}
void FillDisplayBuffer(const uint16 * const data_buf, const uint16 char_num)
{
int i,j,k;
uint8 temp;
for(i=0;i<16;i++)
{
for(j=0;j<16;j++) //write 160 byte display data to display RAM
{
//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*16+j];
Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*16+j];
}
}
}
//------------------------------------------------------------------
void LCDInit(unsigned char nContrastStage)
{
int i,j;
ST7529_8bitsWrite_Command( 0x30); // Ext=0 Ext In
ST7529_8bitsWrite_Command( 0xa7); // Inverse Display
//DISCTRL: This command must be selected before using SLPOUT.
//DISCTRL: Do not change this command while the display is turned on.
ST7529_8bitsWrite_Command( 0xca); // DISCTRL:Display Control /// ???????????????????? 2006.07.22
ST7529_8bitsWrite_Data( 0x04); //0xe4 parameter data0
ST7529_8bitsWrite_Data( 0x27); //0xe7 parameter data1 //112 display lines
ST7529_8bitsWrite_Data( 0x1a); //0xf0 parameter data2 /0 line cycles // ?????????????????
//==================================================================================
ST7529_8bitsWrite_Command( 0xbc); // DATSDR:Data Scan Direction // ????????????
//ST7529_8bitsWrite_Data( 0x00); // parameter data0
ST7529_8bitsWrite_Data( 0x02); //0xf8 parameter data0
ST7529_8bitsWrite_Data( 0x01); //0xfe parameter data1
ST7529_8bitsWrite_Data( 0x02); //0xfa parameter data2
ST7529_8bitsWrite_Command( 0xbb); // COM Scan Direction
ST7529_8bitsWrite_Data( 0x01); // 0→79 159→80
//==================================================================================
ST7529_8bitsWrite_Command( 0xee); //RMW end
ST7529_8bitsWrite_Command( 0xa9); //Partial display out
ST7529_8bitsWrite_Command( 0xd1); //Internal OSC on
ST7529_8bitsWrite_Command( 0x20); // PWRCTRL:Power Control
ST7529_8bitsWrite_Data( 0x08); // parameter data0
for(i=0;i< 0x100000; i++); //
//for(i=0;i< 0x1000; i++); //2006.11.3 by zhangjiong
ST7529_8bitsWrite_Command( 0x20); // PWRCTRL:Power Control
ST7529_8bitsWrite_Data( 0x0b); // parameter data0
ST7529_8bitsWrite_Command( 0x81); // VOLCTRL:EC control ????????? 2006.07.25
ST7529_8bitsWrite_Data(0x1f+nContrastStage); // parameter data0 0x38~0x1f
ST7529_8bitsWrite_Data( 0x04); // parameter data1
ST7529_8bitsWrite_Command( 0x94); // Sleep Out
ST7529_8bitsWrite_Command( 0xaf); // Display On
ST7529_8bitsWrite_Command( 0x30);
g_nDisplayHalfFlag = 0;
}
/*
//------------------------------------------------------------------
void LCDInitialize ()
{
int i,j;
MBAR_CSAR1 = LCD_CS_BASE_ADDRESS; //chip select address register 1
MBAR_CSCR1 = LCD_CS_CTR;
MBAR_CSMR1 = LCD_CS_MASK;
ST7529_8bitsWrite_Command(0x30); // Ext=0 Ext In
ST7529_8bitsWrite_Command(0x94); // Sleep Out
ST7529_8bitsWrite_Command(0xd1); //Internal OSC on
HDT_Sleep(5);
ST7529_8bitsWrite_Command(0x20); // PWRCTRL:Power Control
ST7529_8bitsWrite_Data(0x0b); // parameter data0,TURN ON BOOSTER AND REFERENCE VOLTAGE GENERATION CIRCUIT ;0bh
HDT_Sleep(10);
//DISCTRL: This command must be selected before using SLPOUT.
//DISCTRL: Do not change this command while the display is turned on.
ST7529_8bitsWrite_Command(0xca); // DISCTRL:Display Control /// ???????????????????? 2006.07.22
ST7529_8bitsWrite_Data(0x04); //0xe4 parameter data0
ST7529_8bitsWrite_Data(0x27); //0xe7 parameter data1 //112 display lines
ST7529_8bitsWrite_Data(0x00); //0xf0 parameter data2 /0 line cycles // ?????????????????
ST7529_8bitsWrite_Command(0xbb); // COM Scan Direction
ST7529_8bitsWrite_Data(0x01); // 0→79 159→80
ST7529_8bitsWrite_Command(0x81); // VOLCTRL:EC control ????????? 2006.07.25
ST7529_8bitsWrite_Data(0x1e); // parameter data0 0x38~0x1f
HDT_Sleep(5);
ST7529_8bitsWrite_Data(0x04); // parameter data1
HDT_Sleep(5);
ST7529_8bitsWrite_Command(0xa7); // Display Normal
ST7529_8bitsWrite_Command(0x31); // EXT=1
ST7529_8bitsWrite_Command(0x32); //ANALOG CIRCUIT SET
ST7529_8bitsWrite_Data(0x03); //OSC FREQUENCEY ADJUSTMENT
ST7529_8bitsWrite_Data(0x01); //BOOSTER EFFICIENCY SET
ST7529_8bitsWrite_Data(0x00); //BIAS SETTING
HDT_Sleep(10);
ST7529_8bitsWrite_Command(0x22); //WEIGHTING
ST7529_8bitsWrite_Data(0x03); // WEIGHTING VALUE
ST7529_8bitsWrite_Data(0x02); // EDGE VALUE
ST7529_8bitsWrite_Data(0x00); // ENABLE FLAG
ST7529_8bitsWrite_Command(0x34); //DITHERER OFF
HDT_Sleep(10);
ST7529_8bitsWrite_Command(0x30); // EXT=0
ST7529_8bitsWrite_Command(0xbc); // FORTH COMMAND SET DATA SCAN DRECTION
ST7529_8bitsWrite_Data(0x02); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION
ST7529_8bitsWrite_Data(0x01); // RGB ARRANGEMENT
ST7529_8bitsWrite_Data(0x02); // 32 GRAY-SCALE 65K
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -