📄 lcddisp_drv.c
字号:
/*
******************************************************************
* FileName : Lcddisp_drv.C
* Programmer(s): Cyb
* Description : DRIVE THE LCD CHIP:ST7920
******************************************************************
*/
/*
*****************************************************************
REVISION HISTORY
*****************************************************************
*/
#define LCDDRV_GLOBALS
#define FONTSLIB_GLOBALS
#include "Lcddisp_drv.h"
#include "includes.h"
#include "public.H"
#include "Lcd.h"
#include "UART_Drv.h"
#include "SWconfig.h"
void DplyOffLCD(void)
{
Send_Command(EXTFUNC);
Send_Command(GRAPDISP_CLOSE);
Send_Command(BASICFUNC);
Send_Command(DPLYOFF);
}
void DplyOnLCD(void)
{
Send_Command(EXTFUNC);
Send_Command(GRAPDISP_ON);
Send_Command(BASICFUNC);
Send_Command(DPLYON);
}
void Delay_ms(INT8U time)
{
INT8U i;
INT8U j;
for(i=0;i<time;i++)
{
for(j=0;j<10;j++)
{
}
}
}
void LCDWriteChinese(INT8U addr,INT8U *ptr)
{
Send_Command(BASICFUNC);
Send_Command(CLEAR);
Send_Command(DDRAM_ADDR|addr);
while(*ptr != 0)
{
Send_Data(*ptr++);
Send_Data(*ptr++);
}
}
void LCDWriteCharacter(INT8U addr,INT8U *ptr)
{
Send_Command(BASICFUNC);
Send_Command(CLEAR);
Send_Command(DDRAM_ADDR|addr);
while(*ptr !=0)
{
Send_Data(*ptr++);
}
}
void LCDWriteGraphicData(INT8U data1,INT8U data2)
{
Send_Data(data1);
Send_Data(data2);
}
void Print_LCD(INT8U line,INT8U charpos,INT8U *str, INT8U len)
{
INT8U i;
INT8U offset;
INT8U addr;
offset = (line-1)*8;
addr = offset + charpos;
Send_Command(BASICFUNC);
Send_Command(CLEAR);
Send_Command(DDRAM_ADDR|addr);
for(i=0;i<len;)
{
if((*str >= 0x02) && (*str <= 0x7f))
{
Send_Data(*str++);
i++;
}
else
{
Send_Data(*str++);
i++;
Send_Data(*str++);
i++;
}
}
}
void InitLcd(void)
{
Delay_ms(100);
Send_Command(BASICFUNC);
Send_Command(ENTRY_MOD | 0x02);
Send_Command(DPLYON | CUSORSHOW | BLINKOPEN);
Send_Command(CLEAR);
Send_Command(HOME);
Send_Command(DDRAM_ADDR | 0x00);
DplyOnLCD();
ClearLcd();
}
//写全屏0来清屏
void ClearLcd(void)
{
INT8U i;
INT8U j;
Send_Command(BASICFUNC);
Send_Command(CLEAR);
Send_Command(EXTFUNC);
Send_Command(GRAPDISP_CLOSE);
for(i = 0; i < DOTSIZEY; i++)
{
Send_Command(Y_ADDR|i);
Send_Command(X_ADDR|0);
for (j = 0; j < COLSIZE/2; j++)
{
LCDWriteGraphicData(0,0);
}
}
Send_Command(GRAPDISP_ON);
}
BOOLEAN CheckPixelValid(INT8U row_dot,INT8U col_dot)
{
if ((row_dot >= DOTSIZEY) || (col_dot >= DOTSIZEX))
{
return FALSE;
}
else
{
return TRUE;
}
}
void LcdUpdate_dots(INT8U row1,INT8U col1, INT8U rowlen, INT8U collen)
{
INT8U i;
INT8U j;
INT8U byte1;
INT8U byte2;
INT8U leftcol;
INT8U rightcol;
leftcol = col1/16; // col1 / 16;
rightcol = (col1 + collen - 1)/16; // (col1 + collen - 1) / 16;
Send_Command(EXTFUNC);
Send_Command(GRAPDISP_CLOSE);
for(i = row1; i < row1 + rowlen; i++)
{
Send_Command(Y_ADDR|i);
Send_Command(X_ADDR|leftcol);
for (j = leftcol; j <= rightcol; j++)
{
byte1 = i*COLSIZE + 2*j;
byte2 = i*COLSIZE + 2*j + 1;
LCDWriteGraphicData(DplyImagMem[byte1],DplyImagMem[byte2]);
}
}
Send_Command(GRAPDISP_ON);
}
void LcdUpdate_Block(INT8U row_dot,INT8U col_dot,INT8U lenrow_dot,INT8U lencol)
{
LcdUpdate_dots(row_dot,col_dot,lenrow_dot,lencol << 3);
}
void LcdUpdate_Full(void)
{
LcdUpdate_dots(0, 0, DOTSIZEY, DOTSIZEX);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -