📄 lcddriver.c
字号:
*************************************************/
/****************************************************************************/
/*** Include files ***/
/****************************************************************************/
#include "global.c"
#include "lcd_font.h"
#include "os_cpu.h"
/****************************************************************************/
/*** Macro Definitions ***/
/****************************************************************************/
#define LC_GRH_HOME 0x0000
#define LC_GRH_AREA 0x0000
#define LC_CGR_OFFSET 0x0000
#define LC_MOD_XOR 0x0000
#define LC_DIS_SW 0x0000
#define LC_ADD_POS 0x0000
#define LC_AUT_WR 0x0000
#define LC_AUT_OVR 0x0000
#define GRSTART 0x0000
#define grhome 0x0000
#define CGRAMSTART 0x0000
/****************************************************************************/
/*** Type Definitions ***/
/****************************************************************************/
ioport unsigned port8000;
/****************************************************************************/
/*** Local Function Prototypes ***/
/****************************************************************************/
/****************************************************************************/
/*** Exported Variables ***/
/****************************************************************************/
/****************************************************************************/
/*** Local Variables ***/
/****************************************************************************/
unsigned int au16Shadow[3840];
unsigned int lcdsta;
/****************************************************************************/
/*** Exported Functions ***/
/****************************************************************************/
/****************************************************************************
*
* NAME: vLcdReset
*
* DESCRIPTION:
* Called when bringing LCD out of reset.
*
* PARAMETERS: Name RW Usage
* u16Bias R Bias value to use (see data sheet) (0-3)
* u16Gain R Gain value to use (see data sheet) (0-7)
*
* NOTES:
* Default values are used for most things.
* It is assumed that a reasonable time has passed since power was applied
* as 20~30ms is required by LCD.
*
****************************************************************************/
void vLcdReset(void)
{
/* Put LCD in to reset */
/* 用复位电路完成 */
/* Clear shadow area to blank */
vLcdClear();
wr_cmd_2(0x42,0); // 图形显示区首地址
wr_cmd_2(0x43,30); // 图形显示区宽度30列
//grhome = GRSTART;
//wr_cmd_2(LC_CGR_OFFSET,CGRAMSTART >> 11);//CGRAM 偏移地址设置
//wr_cmd_0(LC_MOD_XOR|0x08); // 显示方式设置,异或,字符全部用RAM区域生成
wr_cmd_0(0x98); // 显示开关设置,图文混和模式
//Clr_lcdram();//清除内存
/* Refresh display */
vLcdRefreshAll();
}
/****************************************************************************
*
* NAME: vLcdStop
*
* DESCRIPTION:
* Turns off LCD and allows it to power down correctly.
*
* NOTES:
* Should be called before powering down LCD panel.
*
****************************************************************************/
void vLcdStop(void)
{
//vSendCommand(LCD_CMD_SYSTEM_RESET);
}
/****************************************************************************
*
* NAME: vLcdClear
*
* DESCRIPTION:
* Clears the LCD shadow. Does not refresh the display itself
*
****************************************************************************/
void vLcdClear(void)
{
unsigned int i, *j;
j = &au16Shadow[0];
for (i = 0; i < 3840; i++)
{
*j = 0x00;
j++;
}
}
/****************************************************************************
*
* NAME: vLcdRefreshAll
*
* DESCRIPTION:
* Copies the contents of the shadow memory to the LCD
*
* NOTES:
* Takes a certain amount of time!
*
****************************************************************************/
void vLcdRefreshAll(void)
{
unsigned int u16Pix;
unsigned int *pu16Shadow = au16Shadow;
wr_cmd_2(0x24,0x0000); // 设置地址指针0
wr_cmd_0(0xd0); // 自动写
/* Set row to 0 and column to 0 */
for (u16Pix = 0; u16Pix < 3840; u16Pix++)
{
check_aw_st();
vSetCDline(0);
port8000 = *pu16Shadow;
pu16Shadow += 1;
}
wr_cmd_0(0xd2); // 自动写结束
//wr_cmd_2(LC_ADD_POS,0x0000); // 重置地址指针
}
/****************************************************************************
*
* NAME: vLcdWriteText
*
* DESCRIPTION:
* Puts text into shadow buffer. Text is aligned to a character row but can
* be at any column. Characters are variable width but 8 pixels high.
*
* PARAMETERS: Name RW Usage
* pcString R Pointer to zero-terminated string
* u16Row R Character row (0-7)
* u16Column R Start column (0-127)
*
* NOTES:
* To see text, perform a refresh
*
****************************************************************************/
void vLcdWriteText( char *pcString, unsigned int u16Row, unsigned int u16Column)
{
unsigned int u16Columns;
unsigned int *pu16CharMap;
unsigned int *pu16Shadow = &au16Shadow[u16Row * 240 + u16Column];
/* Column before first character */
*pu16Shadow = 0;
pu16Shadow++;
while (*pcString != 0)
{
while(1)
{
if ((*pcString >= '0') && (*pcString <= 'z'))
{
pu16CharMap = (unsigned int *)au16LcdFont[*pcString - '0'];
break;
}
if ((*pcString >= '%') && (*pcString <= ','))
{
pu16CharMap = (unsigned int *)au16LcdFontWide[*pcString - '%'];
break;
}
/* Default is to return a space character */
pu16CharMap = (unsigned int *)au16LcdFont[46];
break;
}
u16Columns = *pu16CharMap;
/* Copy character bitmap to shadow memory */
do
{
pu16CharMap++;
*pu16Shadow = *pu16CharMap;
pu16Shadow++;
u16Columns--;
} while (u16Columns > 0);
/* Add a column spacing */
*pu16Shadow = 0;
pu16Shadow++;
pcString++;
}
}
/****************************************************************************
*
* NAME: vLcdWriteInvertedText
*
* DESCRIPTION:
* Puts text into shadow buffer. Text is aligned to a character row but can
* be at any column. Characters are variable width but 8 pixels high. Text is
* inverted (black <-> white).
*
* PARAMETERS: Name RW Usage
* pcString R Pointer to zero-terminated string
* u16Row R Character row (0-7)
* u16Column R Start column (0-127)
*
* NOTES:
* To see text, perform a refresh
*
****************************************************************************/
void vLcdWriteInvertedText(char *pcString, unsigned int u16Row, unsigned int u16Column)
{
unsigned int u16Columns;
unsigned int *pu16CharMap;
unsigned int *pu16Shadow = &au16Shadow[u16Row * 240 + u16Column];
/* Column before first character */
*pu16Shadow = 0xff;
pu16Shadow++;
while (*pcString != 0)
{
while(1)
{
if ((*pcString >= '0') && (*pcString <= 'z'))
{
pu16CharMap = (unsigned int *)au16LcdFont[*pcString - '0'];
break;
}
if ((*pcString >= '%') && (*pcString <= ','))
{
pu16CharMap = (unsigned int *)au16LcdFontWide[*pcString - '%'];
break;
}
/* Default is to return a space character */
pu16CharMap = (unsigned int *)au16LcdFont[46];
break;
}
u16Columns = *pu16CharMap;
/* Copy character bitmap to shadow memory */
do
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -