📄 lcd.h
字号:
}
}
}
//*******************************************************************
void Red(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<128;i++)
{
for (j=0;j<128;j++)
{
send_data(0xf8);
send_data(0x00);
}
}
delay_nms(500);
}
void Green(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<128;i++)
{
for (j=0;j<128;j++)
{
send_data(0x07);
send_data(0xe0);
}
}
delay_nms(500);
}
void Blue(void)
{ uint8_t Xs=0,Ys=0;
send_command(COLUMN_ADDRESS_SET); //XS,XE
send_data(Xs); //0~128
send_data(0x7f);
send_command(ROW_ADDRESS_SET); //YS,YE
send_data(Ys); //0~128
send_data(0x7f);
send_command(MEMORY_WRITE);
for (i= 0; i<128;i++)
{
for (j=0;j<128;j++)
{
send_data(0x00);
send_data(0x1f);
}
}
delay_nms(500);
}
void BlackBar(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<16;i++)
{
for (j=0;j<128;j++)
{
send_data(0x00);
send_data(0x00);
}
}
delay_nms(500);
}
void ThreeColourBar(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<42;i++)
{
for (j=0;j<128;j++)
{
send_data(0xf8);
send_data(0x00);
}
}
for (i= 0; i<43;i++)
{
for (j=0;j<128;j++)
{
send_data(0x07);
send_data(0xe0);
}
}
for (i= 0; i<43;i++)
{
for (j=0;j<128;j++)
{
send_data(0x00);
send_data(0x1f);
}
}
delay_nms(500);
}
void ThreeColourBar1(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<128;i++)
{
for (j=0;j<42;j++)
{
send_data(0xf8);
send_data(0x00);
}
for (j=0;j<43;j++)
{
send_data(0x07);
send_data(0xe0);
}
for (j=0;j<43;j++)
{
send_data(0x00);
send_data(0x1f);
}
}
delay_nms(500);
}
void B_Grey_W(void)
{
send_command(MEMORY_WRITE);
for (i= 0; i<42;i++)
{
for (j=0;j<128;j++)
{
send_data(0xff);
send_data(0xff);
}
}
for (i= 0; i<43;i++)
{
for (j=0;j<128;j++)
{
send_data(0x84);
send_data(0x10);
}
}
for (i= 0; i<43;i++)
{
for (j=0;j<128;j++)
{
send_data(0x00);
send_data(0x00);
}
}
delay_nms(500);
}
void writeData16(unsigned int usData) /* 写16位数据函数 */
{
send_data((char)((usData>>8)&0xff));
send_data((char)(usData&0xff));
}
/*********************************************************************************************************
** 函数名称: setCoordinate
** 功能描述: 写绘图坐标
** 输 入: x 起点所在列的位置
** y 起点所在行的位置
** 输 出: 无
** 全局变量: 无
** 返 回:无
**------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void setCoordinate(unsigned short Xs, unsigned short Ys)
{
send_command(COLUMN_ADDRESS_SET); //XS,XE
send_data(Xs); //0~128
send_data(0x7f);
send_command(ROW_ADDRESS_SET); //YS,YE
send_data(Ys); //0~128
send_data(Ys+n-1);
send_command(MEMORY_WRITE);
}
/*********************************************************************************************************
** 函数名称: writeOneHzChar
** 功能描述: 在指定的起始坐标处写一个汉字
** 输 入: pucMsk 指向汉字字模存放的起始地址
** x0 起始坐标所在列的位置
** y0 起始坐标所在行的位置
** color 字符显示的颜色
** 输 出: 无
** 全局变量: 无
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned long writeOneHzChar(unsigned char *pucMsk,
unsigned short x0,
unsigned short y0,
unsigned short color)
{
unsigned long i,j;
unsigned short mod[16]; /* 当前字模 */
unsigned short *pusMsk; /* 当前字库地址 */
unsigned short y;
pusMsk = (unsigned short *)pucMsk;
for(i=0; i<16; i++) /* 保存当前汉字点阵式字模 */
{
mod[i] = *pusMsk++; /* 取得当前字模,半字对齐访问 */
mod[i] = ((mod[i] & 0xff00) >> 8) | ((mod[i] & 0x00ff) << 8); /* 字模交换高低字节(为了显示 */
/* 需要) */
}
y = y0;
for(i=0; i<16; i++) { /* 16行 */
#ifdef __DISPLAY_BUFFER /* 使用显存显示 */
for(j=0; j<16; j++) { /* 16列 */
if((mod[i] << j)& 0x8000) { /* 显示字模 */
DispBuf[128*(y0+i) + x0+j] = color;
}
}
#else /* 直接显示 */
setCoordinate(x0, y); /* 设置写数据地址指针 */
send_command(MEMORY_WRITE); //data write command
for(j=0; j<16; j++) { /* 16列 */
if((mod[i] << j) & 0x8000) { /* 显示字模 */
writeData16(color);
} else {
writeData16(WHITE); /* 用读方式跳过写空白点的像素 */
}
}
y++;
#endif
}
return (16); /* 返回16位列宽 */
}
/*********************************************************************************************************
** 函数名称: writeOneASCII
** 功能描述: 在指定的起始坐标处写一个ASCII码字符
** 输 入: pucMsk 指向ASCII码字符字模存放的起始地址
** x0 起始坐标所在列的位置
** y0 起始坐标所在行的位置
** color 字符显示的颜色
** 输 出: 无
** 全局变量: 无
** 调用模块: setCoordinate()、__writeData16()、__readData16()
** 返 回:所写字符的列宽8
**------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned long writeOneASCII(unsigned char *pucMsk,
unsigned int x0,
unsigned int y0,
unsigned int color)
{
unsigned int i,j;
unsigned int y;
unsigned char ucChar;
y = y0;
for(i=0; i<16; i++) { /* 16行 */
ucChar = *pucMsk++;
#ifdef __DISPLAY_BUFFER /* 使用显存显示 */
for(j=0; j<8; j++) { /* 8列 */
if((ucChar << j)& 0x80) { /* 显示字模 */
DispBuf[128*(y0+i) + x0+j] = color;
}
}
#else /* 直接显示 */
setCoordinate(x0, y); /* 设置写数据地址指针 */
send_command(MEMORY_WRITE); //data write command
for(j=0; j<8; j++) { /* 8列 */
if((ucChar << j) & 0x80) { /* 显示字模 */
writeData16(color);
} else {
writeData16(WHITE);
}
}
y++;
#endif
}
return (8); /* 返回16位列宽 */
}
/*********************************************************************************************************
** 函数名称: writeString
** 功能描述: 在指定的坐标处开始显示字符串
** 输 入: pcStr 字符串存放首地址
** x0 起始坐标所在列的位置
** y0 起始坐标所在行的位置
** color 字符串的显示颜色
** 输 出: 无
** 全局变量: GBHZ_16 自定义汉字库字模数表
** ASCII 自定义的ASCII码字库字模数表
** 调用模块: findHzIndex()、__writeOneHzChar()、__writeOneASCII()
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void writeString(uint8_t *pcStr, unsigned short x0, unsigned short y0, unsigned short color)
{
unsigned short usIndex;
unsigned short usWidth = 0;
FNT_GB16 *ptGb16 = 0;
ptGb16 = (FNT_GB16 *)GBHZ_16; /* */
while(1)
{
if(*pcStr == 0) {
break; /* 字符串结束 */
}
x0 = x0 + (usWidth); /* 调节字符串显示松紧度 */
if(*pcStr > 0x80) { /* 判断为汉字 */
if((x0 + 16) >= Gus_LCM_XMAX) { /* 检查剩余空间是否足够 */
x0 = 0;
y0 = y0 + 16; /* 改变显示坐标 */
if(y0 >= Gus_LCM_YMAX) { /* 纵坐标超出 */
y0 = 0;
}
}
usIndex = findHzIndex(pcStr);
usWidth = writeOneHzChar((unsigned char *)&(ptGb16[usIndex].Msk[0]), x0, y0, color);
/* 显示字符 */
pcStr += 2;
} else { /* 判断为非汉字 */
if (*pcStr == '\r') { /* 换行 */
y0 = y0 + 16; /* 改变显示坐标 */
if(y0 >= Gus_LCM_YMAX) { /* 纵坐标超出 */
y0 = 0;
}
pcStr++;
usWidth = 0;
continue;
} else if (*pcStr == '\n') { /* 对齐到起点 */
x0 = 0;
pcStr++;
usWidth = 0;
continue;
} else {
if((x0 + 8) >= Gus_LCM_XMAX) { /* 检查剩余空间是否足够 */
x0 = 0;
y0 = y0 + 16; /* 改变显示坐标 */
if(y0 >= Gus_LCM_YMAX) { /* 纵坐标超出 */
y0 = 0;
}
}
usWidth = writeOneASCII((unsigned char *)&ASCII[(*pcStr - 0x20)][0], x0, y0, color); /* ASCII码表21H的值对应区位码3区*/
pcStr += 1;
}
}
}
}
//画横线,定义起始X坐标,长度,高度,颜色和宽度提前定义
void Xline(unsigned char Xs,unsigned char Ys,unsigned char len,unsigned int color)
{
/* send_command(COLUMN_ADDRESS_SET); //XS,XE
send_data(Xs); //0~128
send_data(0x7f);
send_command(ROW_ADDRESS_SET); //YS,YE
send_data(Ys); //0~128
send_data(Ys+n-1);
send_command(MEMORY_WRITE); */
setCoordinate(Xs,Ys);
for (j=0;j<len;j++)
{
// send_data(0x00);
// send_data(0x00);
writeData16(color);
}
}
//画横线,定义起始Y坐标,长度,高度,颜色和宽度提前定义
void Yline(unsigned char Xs,unsigned char Ys,unsigned char len,unsigned int color)
{
// setCoordinate(Xs,Ys);
for (j=0;j<len;j++)
{
// send_data(0x00);
// send_data(0x00);
setCoordinate(Xs,Ys+j);
writeData16(color);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -