📄 lcmdrive.c
字号:
break;//退出switch语句.
default:Lcm_LocateXY(X,Y);//坐标定位.
for(i=0;i<8;i++)//写入8个"-".
Lcm_WriteData(Lcm_ASCIITable[11]);//写"-".
break;//退出switch语句.
}//switch{}.
Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
}//子函数Lcm_DisplayIntVar结束.
/**************************************************************************************************
函数名称: Lcm_DisplayString.
功能描述: 在指定坐标处开始显示字符串.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand,
在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
坐标定位子函数Lcm_LocateXY,
设定字体或图案的正相(正常)/反相(反白)显示子函数Lcm_Reverse,
字体或图案缩放设定子函数Lcm_Zoom,
在文字模式下设定中/英文字对齐子函数Lcm_FontTidiness,
在文字模式下设定正常字型或粗体字型子函数Lcm_FontThick,
在文字模式下设定行距子函数Lcm_RowSpacing.
全局变量: 无.
输 入: 无符号字符型:坐标点X,Y;
无符号字符型:反白设定Reverse;0为反白,非0为正常;
无符号字符型:字型水平放大倍数XZoom(1-4),字型垂直放大倍数YZoom(1-4);
无符号字符型:中/英文字对齐命令FontTidiness;0为不对齐,非0为对齐;
无符号字符型:文字加粗命令FontThick;0为正常字型,非0为粗体字型;
无符号字符型:行距值RowSpacing(0-15);
无符号字符型指针:*string.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_DisplayString(unsigned char X,unsigned char Y,
unsigned char Reverse,
unsigned char XZoom,unsigned char YZoom,
unsigned char FontTidiness,
unsigned char FontThick,
unsigned char RowSpacing,
unsigned char *String)
{ unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
unsigned char CommandReg11;//定义11号指令寄存器的辅助存储器.
unsigned char CommandRegF1;//定义F1号指令寄存器的辅助存储器.
CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
CommandRegF1=Lcm_ReadCommand(0xf1);//保存F1号指令寄存器的值.
Lcm_WriteCommand(0x00,CommandReg0|0x08);//选择文字模式,其余参数不变.
Lcm_Reverse(Reverse);//调用字体或图案的正相(正常)/反相(反白)显示设定子函数.
Lcm_Zoom(XZoom,YZoom);//调用字体或图案的缩放设定子函数.
Lcm_FontTidiness(FontTidiness);//调用中/英文字对齐子函数.
Lcm_FontThick(FontThick);//调用字型的正常或粗体显示子函数.
Lcm_RowSpacing(RowSpacing);//调用行距设定子函数.
Lcm_LocateXY(X,Y);//调用坐标定位子函数.
while(*String!='\0')//循环写入字符串.
{ Lcm_WriteData(*String);
++String;
}//while(1){}.
Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
Lcm_WriteCommand(0x10,CommandReg10);//返回10号指令寄存器的原值.
Lcm_WriteCommand(0x11,CommandReg11);//返回11号指令寄存器的原值.
Lcm_WriteCommand(0xf1,CommandRegF1);//返回F1号指令寄存器的原值.
}//子函数Lcm_DisplayString结束.
/**************************************************************************************************
函数名称: Lcm_Button.
功能描述: 完成文字显示的软按钮绘制.
函数说明: 按钮按下与弹起有不同的显示效果.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand.
读取某指令寄存器状态子函数Lcm_ReadCommand,
在当前坐标下将单字节数据写入显存子函数Lcm_WriteData,
坐标定位子函数Lcm_LocateXY,
字符串显示字函数Lcm_DisplayString.
全局变量: 无.
输 入: 无符号字符型:坐标起始点X0,Y0,
无符号字符型:弹起或按下标志Press;0为弹起状态,1为按下状态.
无符号字符型指针:String.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Button(unsigned char X0,Y0,unsigned char Press,unsigned char *String)
{ unsigned char i,j;//定义辅助计数变量.
unsigned char XTemp,YTemp;//定义辅助坐标变量.
unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
Lcm_WriteCommand(0x00,CommandReg0&0xf7);//选择绘图模式,其余参数不变.
if(Press==0)//表示件弹起状态.
{ Lcm_WriteCommand(0x10,CommandReg10|0x30);//设定加粗但不反白显示,其余参数不变.
Lcm_LocateXY(X0,Y0);//定位左边第1列从上往下第1个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0,Y0+1);//定位左边第1列从上往下第2个数据点.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+2);//定位左边第1列从上往下第3个数据点.
Lcm_WriteData(0x80);//写数据.
for(i=Y0+3;i<=Y0+26;i++)//写左边第1列从上往下第4-27个数据.
{ Lcm_LocateXY(X0,i);//定位.
Lcm_WriteData(0x90);//写数据.
}//for{}.
Lcm_LocateXY(X0,Y0+27);//定位左边第1列从上往下第28个数据点.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+28);//定位左边第1列从上往下第29个数据点.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+29);//定位左边第1列从上往下第30个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_DisplayString(X0+1,Y0+7,1,1,1,0,1,2,String);//写文字.
XTemp=Lcm_ReadCommand(0x60);//读取写文字后的X轴坐标.
YTemp=Lcm_ReadCommand(0x70);//读取写文字后的Y轴坐标.
Lcm_LocateXY(XTemp,YTemp-7);//定位最右边列从上往下第1个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(XTemp,YTemp-6);//定位最右边列从上往下第2个数据点.
Lcm_WriteData(0x03);//写数据.
Lcm_LocateXY(XTemp,YTemp-5);//定位最右边列从上往下第3个数据点.
Lcm_WriteData(0x07);//写数据.
for(i=YTemp-4;i<=YTemp+22;i++)//写最右边列从上往下第4-22个数据点.
{ Lcm_LocateXY(XTemp,i);//定位.
Lcm_WriteData(0x0F);//写数据.
}//for{}.
Lcm_LocateXY(X0,Y0);//定位第1根水平线的起始点.
for(i=X0;i<XTemp+1;i++)
Lcm_WriteData(0xff);//写第1根水平线.
Lcm_LocateXY(X0+1,Y0+1);//定位第2根水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写第2根水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0+1,Y0+2);//定位第3根水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写第3根水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0,Y0+3);//定位第4根水平线的起始点.
Lcm_WriteData(0x9f);//写第4根水平线的第1个数据.
for(i=X0+1;i<=XTemp;i++)//写第4根水平线的其余数据.
Lcm_WriteData(0xff);//写数据.
for(j=Y0+4;j<Y0+7;j++)//填充文字上边使之空白.
{ Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
}//for{}.
for(j=Y0+23;j<Y0+26;j++)//填充文字下边使之空白.
{ Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
}//for{}.
Lcm_LocateXY(X0,Y0+26);//定位第5根水平线的起始点.
Lcm_WriteData(0x9f);//写第5根水平线的第1个数据.
for(i=X0+1;i<=XTemp;i++)//写第5根水平线的其余数据.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0,Y0+27);//定位第6根水平线的起始点.
Lcm_WriteData(0xbf);//写第6根水平线的第1个数据.
for(i=X0+1;i<=XTemp;i++)//写第6根水平线的其余数据.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0,Y0+28);//定位第7根水平线的起始点.
for(i=X0;i<=XTemp;i++)//写第7根水平线的其余数据.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0,Y0+29);//定位第8根水平线的起始点.
for(i=X0;i<=XTemp;i++)//写第8根水平线.
Lcm_WriteData(0xff);//写数据.
}//if{}.
else//表示键按下状态.
{ Lcm_WriteCommand(0x10,CommandReg10|0x30);//设定加粗但不反白显示,其余参数不变.
Lcm_LocateXY(X0,Y0);//定位.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0,Y0+1);//定位.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+2);//定位.
Lcm_WriteData(0x80);//写数据.
for(i=Y0+3;i<Y0+27;i++)//写左边第1列从上往下第1-27个数据.
{ Lcm_LocateXY(X0,i);//定位.
Lcm_WriteData(0x9f);//写数据.
}//for{}.
Lcm_LocateXY(X0,Y0+27);//定位左边第1列从上往下第28个数据点.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+28);//定位左边第1列从上往下第29个数据点.
Lcm_WriteData(0x80);//写数据.
Lcm_LocateXY(X0,Y0+29);//定位左边第1列从上往下第30个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_DisplayString(X0+1,Y0+7,0,1,1,0,1,2,String);//写反白文字.
XTemp=Lcm_ReadCommand(0x60);//读取写文字后的X轴坐标.
YTemp=Lcm_ReadCommand(0x70);//读取写文字后的Y轴坐标.
Lcm_LocateXY(XTemp,YTemp-7);//定位最右边列从上往下第1个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(XTemp,YTemp-6);//定位最右边列从上往下第2个数据点.
Lcm_WriteData(0x01);//写数据.
Lcm_LocateXY(XTemp,YTemp-5);//定位最右边列从上往下第3个数据点.
Lcm_WriteData(0x01);//写数据.
Lcm_LocateXY(XTemp,YTemp-4);//定位最右边列从上往下第4个数据点.
Lcm_WriteData(0xf9);//写数据.
for(i=YTemp-3;i<=YTemp+19;i++)//写最右边列从上往下第5-27个数据点.
{ Lcm_LocateXY(XTemp,i);//定位.
Lcm_WriteData(0xf9);//写数据.
}//for{}.
Lcm_LocateXY(XTemp,YTemp+20);//定位最右边列从上往下第28个数据点.
Lcm_WriteData(0x01);//写数据.
Lcm_LocateXY(XTemp,YTemp+21);//定位最右边列从上往下第29个数据点.
Lcm_WriteData(0x01);//写数据.
Lcm_LocateXY(XTemp,YTemp+22);//定位最右边列从上往下第30个数据点.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0+1,Y0);//写框架上边第1条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
Lcm_LocateXY(X0+1,Y0+1);//写框架上边第2条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0+1,Y0+2);//写框架上边第3条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0+1,Y0+3);//写框架上边第4条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
for(j=Y0+4;j<Y0+7;j++)//填充文字上边使之全黑.
{ Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
}//for{}.
for(j=Y0+23;j<Y0+26;j++)//填充文字下边使之全黑.
{ Lcm_LocateXY(X0+1,j);//定位水平线的起始点.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
}//for{}.
Lcm_LocateXY(X0+1,Y0+26);//写框架下边第1条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
Lcm_WriteData(0xf9);//写框架下边第1条水平线的最后一个数据.
Lcm_LocateXY(X0+1,Y0+27);//写框架下边第2条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0+1,Y0+28);//写框架下边第3条水平线.
for(i=X0+1;i<XTemp;i++)//写水平线.
Lcm_WriteData(0x00);//写数据.
Lcm_LocateXY(X0,Y0+29);//写框架下边第4条水平线.
for(i=X0+1;i<=XTemp+1;i++)//写水平线.
Lcm_WriteData(0xff);//写数据.
}//else{}.
Lcm_WriteCommand(0x00,CommandReg0);//返回0号指令寄存器的原值.
Lcm_WriteCommand(0x10,CommandReg0);//返回10号指令寄存器的原值.
}//子函数Lcm_Button结束.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -