📄 lcmdrive.c
字号:
Lcm_WriteCommand(0x81,0x00);//N_line inverse start Common = 0.
Lcm_WriteCommand(0x91,0x00);//N_line inverse end Common = 0 (Disable).
Lcm_WriteCommand(0x90,0x06);//XCK (8MHz*4)/(240*320*70)= 6.
Lcm_WriteCommand(0xA0,0x11);//Interrupt Setup & Status (Disable all INT).
Lcm_WriteCommand(0xA1,0x00);//Key Scan Disable.
Lcm_WriteCommand(0xA2,0x00);//Key Scan Data Register.
Lcm_WriteCommand(0xA3,0x00);//Key Scan Data Expand Register.
Lcm_WriteCommand(0xB0,0x27);//Interrupt Column = 39 (disabled).
Lcm_WriteCommand(0xB1,0xef);//Interrupt Row = 239 (disabled).
Lcm_WriteCommand(0xC0,0x00);//Touch Panel Disable.
Lcm_WriteCommand(0xC1,0x0A);//ADC Status.
Lcm_WriteCommand(0xC8,0x80);//Touch Panel Segment High Byte Data Register(TPXR).
Lcm_WriteCommand(0xC9,0x80);//Touch Panel Common High Byte Data Register(TPYR).
Lcm_WriteCommand(0xCA,0x00);//Touch Panel Segment/Common Low Byte Data Register(TPZR).
Lcm_WriteCommand(0xD0,0x10);//LCD Contrast Control = 16.
Lcm_WriteCommand(0xE0,0x00);//Fill Data = 00H.
Lcm_WriteCommand(0xF0,0xA0);//Font ROM Control.
Lcm_WriteCommand(0xF1,0x0F);//Font Size = x1.
}//子程序Lcm_Initial结束.
/**************************************************************************************************
函数名称: Lcm_DisplaySW.
功能描述: 完成屏幕的开关操作.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 无符号字符型显示开关命令:0为关,非0为开.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_DisplaySW(unsigned char DisplaySW)
{ unsigned char CommandReg0;//定义0号指令寄存器的辅助存储器.
CommandReg0=Lcm_ReadCommand(0x00);//保存0号指令寄存器的值.
if(DisplaySW==0) Lcm_WriteCommand(0x00,CommandReg0&0xfb);//如果DisplaySW命令为0则关显示器.
else Lcm_WriteCommand(0x00,CommandReg0|0x04);//否则开显示器.
}//子函数Lcm_DisplaySW结束.
/**************************************************************************************************
函数名称: Lcm_DisplayLayer.
功能描述: 设定LCM的当前显示图层.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
显示开关子函数Lcm_DisplaySW.
全局变量: 无.
输 入: 无符号字符型:图层号DisplayLayer;0为灰阶显示模式,1为单一上层显示模式,
2为单一下层显示模式,3为双层显示模式.
无符号字符型:Page1与Page2图层逻辑关系LayerLogic;0为OR,1为XOR,2为NOR,3为AND.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_DisplayLayer(unsigned char DisplayLayer,unsigned char LayerLogic)
{ unsigned char CommandReg12;//定义12号指令寄存器的辅助存储器.
CommandReg12=Lcm_ReadCommand(0x12);//保存12号指令寄存器的值.
switch(DisplayLayer)//设置显示模式.
{ case 0: Lcm_WriteCommand(0x12,CommandReg12&0x8f);//选择灰阶显示模式.
break;//退出开关语句.
case 1: Lcm_WriteCommand(0x12,(CommandReg12&0x8f)|0x10);//选择单一上层显示模式.
break;//退出开关语句.
case 2: Lcm_WriteCommand(0x12,(CommandReg12&0x8f)|0x20);//选择单一下层显示模式.
break;//退出开关语句.
case 3: Lcm_WriteCommand(0x12,(CommandReg12&0x8f)|0x30);//选择双层显示模式.
break;//退出开关语句.
default:break;//退出开关语句.
}//第一个switch{}.
CommandReg12=Lcm_ReadCommand(0x12);//更新12号指令寄存器的值.
switch(LayerLogic)//设置图层逻辑关系.
{ case 0: Lcm_WriteCommand(0x12,CommandReg12&0xf3);//设置图层逻辑为OR.
break;//退出开关语句.
case 1: Lcm_WriteCommand(0x12,(CommandReg12&0xf3)|0x04);//设置图层逻辑为XOR.
break;//退出开关语句.
case 2: Lcm_WriteCommand(0x12,(CommandReg12&0xf3)|0x08);//设置图层逻辑为NOR.
break;//退出开关语句.
case 3: Lcm_WriteCommand(0x12,(CommandReg12&0xf3)|0x0C);//设置图层逻辑为AND.
break;//退出开关语句.
default:break;//退出开关语句.
}//第二个switch{}.
Lcm_DisplaySW(0);//关闭显示。
Lcm_DisplaySW(1);//重开显示。
}//子函数Lcm_DisplayLayer结束.
/**************************************************************************************************
函数名称: Lcm_FrameRate.
功能描述: 完成Frame速度的设定.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand.
全局变量: 无.
输 入: 无符号字符型:FrameRate;灰度显示时可以设置为0x05,其它模式时建议设置为0x06.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_FrameRate(unsigned char FrameRate)
{ Lcm_WriteCommand(0x90,FrameRate);//设置Frame速度.
}//子函数Lcm_FrameRate结束.
/**************************************************************************************************
函数名称: Lcm_ReadWriteLayer.
功能描述: 完成LCM读写图层的设定.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 无符号字符型:读写图层号ReadWriteLayer;0为读写Page0,1为读写Page1,
2为读写Page2,3为同时读写Page1和Page2.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_ReadWriteLayer(unsigned char ReadWriteLayer)
{ unsigned char CommandReg12;//定义12号指令寄存器的辅助存储器.
CommandReg12=Lcm_ReadCommand(0x12);//保存12号指令寄存器的值.
switch(ReadWriteLayer)//设置读写图层号.
{ case 0: Lcm_WriteCommand(0x12,CommandReg12&0xfc);//选择读写图层0.
break;//退出开关语句.
case 1: Lcm_WriteCommand(0x12,(CommandReg12&0xfc)|0x01);//选择读写图层1.
break;//退出开关语句.
case 2: Lcm_WriteCommand(0x12,(CommandReg12&0xfc)|0x02);//选择读写图层2.
break;//退出开关语句.
case 3: Lcm_WriteCommand(0x12,(CommandReg12&0xfc)|0x03);//选择同时读写图层1和图层2.
break;//退出开关语句.
default:break;//退出开关语句.
}//switch{}.
}//子函数Lcm_ReadWriteLayer结束.
/**************************************************************************************************
函数名称: Lcm_Contrast.
功能描述: 完成LCM对比度的软件调节.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 无符号字符型对比度值Contrast(0-31).
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Contrast(unsigned char Contrast)
{ unsigned char CommandRegD0;//定义D0号指令寄存器的辅助存储器.
if((Contrast>=0)&&(Contrast<=31))//如果输入的对比度值未超出范围则进行对比度设定.
{ CommandRegD0=Lcm_ReadCommand(0xD0);//保存D0号指令寄存器的值.
Lcm_WriteCommand(0xD0,(CommandRegD0&0xe0)|Contrast);//设定对比度,其余参数不变.
}//if{}.
}//子函数Lcm_Contrast结束.
/**************************************************************************************************
函数名称: Lcm_Grey.
功能描述: 完成LCM灰度显示设定.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand,
设定当前显示图层子函数Lcm_DisplayLayer.
全局变量: 无.
输 入: 无符号字符型:灰度对比值Grey(建议设为0x3f).
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Grey(unsigned char Grey)
{ unsigned char CommandReg12;//定义12号指令寄存器的辅助存储器.
CommandReg12=Lcm_ReadCommand(0x12);//保存12号指令寄存器的值.
Lcm_WriteCommand(0xE0,Grey);//设置灰度对比值.
Lcm_DisplayLayer(0x00,(CommandReg12&&0x0c)>>2);//设置灰度显示模式(并保持图层逻辑关系设置不变).
}//子函数Lcm_Grey结束.
/**************************************************************************************************
函数名称: Lcm_Fill.
功能描述: 对LCM进行全屏填充.
函数说明: 将填充的数据FillDate设置为0则清屏,将填充的数据FillDate设置为255则黑屏,
将填充的数据FillDate设置为其它值则可以得到其它方式的填充.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand;
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 需要填充的数据FillDate.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Fill(unsigned char FillDate)
{ unsigned char CommandReg12;//定义12号指令寄存器的辅助存储器.
unsigned char CommandRegE0;//定义E0号指令寄存器的辅助存储器.
unsigned char CommandRegF0;//定义F0号指令寄存器的辅助存储器.
CommandReg12=Lcm_ReadCommand(0x12);//保存12号指令寄存器的值.
CommandRegE0=Lcm_ReadCommand(0xe0);//保存E0号指令寄存器的值.
CommandRegF0=Lcm_ReadCommand(0xf0);//保存F0号指令寄存器的值.
Lcm_WriteCommand(0x12,CommandReg12|0x03);//设定12号指令寄存器的第0-1位值为11,
//表示同时存取Page1及Page2;其余位保持不变.
Lcm_WriteCommand(0xe0,FillDate);//将需要填充的数据写到指令寄存器中.
Lcm_WriteCommand(0xf0,CommandRegF0|0x08);//设定F0号指令寄存器的第3位值为1,
//表示开始全屏填充.
Lcm_Delay(500);//500毫秒延时以保证足够的时间供清屏操作.
Lcm_WriteCommand(0x12,CommandReg12);//返回12号指令寄存器的原值.
Lcm_WriteCommand(0xe0,CommandRegE0);//返回E0号指令寄存器的原值.
}//子程序Lcm_Fill结束.
/**************************************************************************************************
函数名称: Lcm_Zoom.
功能描述: 完成字体或图案的水平及垂直缩放比例的设定.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 无符号字符型水平及垂直缩放倍数XZoom(1-4),YZoom(1-4).
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Zoom(unsigned char XZoom,unsigned char YZoom)
{ unsigned char CommandRegF1;//定义F1号指令寄存器的辅助存储器.
if((XZoom>=1)&&(XZoom<=4)&&(YZoom>=1)&&(YZoom<=4))//如果输入的放大倍数未超出范围则继续.
{ CommandRegF1=Lcm_ReadCommand(0xf1);//保存F1号指令寄存器的值.
Lcm_WriteCommand(0xf1,(CommandRegF1&0x3f)|((XZoom-1)<<6));//设定字体或图案的水平放大倍数.
CommandRegF1=Lcm_ReadCommand(0xf1);//保存F1号指令寄存器的值.
Lcm_WriteCommand(0xf1,(CommandRegF1&0xcf)|((YZoom-1)<<4));//设定字体或图案的垂直放大倍数.
}//if{}.
}//子函数Lcm_Zoom结束.
/**************************************************************************************************
函数名称: Lcm_Reverse.
功能描述: 设定字体或图案的正相(正常)/反相(反白)显示.
函数说明: 无.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand,
读取某指令寄存器状态子函数Lcm_ReadCommand.
全局变量: 无.
输 入: 无符号字符型正反相显示命令Reverse;0为反白显示,非0为正相显示.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Reverse(unsigned char Reverse)
{ unsigned char CommandReg10;//定义10号指令寄存器的辅助存储器.
CommandReg10=Lcm_ReadCommand(0x10);//保存10号指令寄存器的值.
if(Reverse==0)//如果命令为0则表示设定反相显示.
Lcm_WriteCommand(0x10,CommandReg10&0xdf);//设定反白显示,其余参数不变.
else Lcm_WriteCommand(0x10,CommandReg10|0x20);//设定正向显示,其余参数不变.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -