📄 lcd_driver.c
字号:
┃参数意义┃ 第3显示区 ┃第2、4显示区┃ 第1显示区 ┃ 光标 ┃
┗━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
“各组合参数位”设置值意义如下:
┏━━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓
┃参数位值┃ 0 ┃ 1 ┃ 0 ┃ 1 ┃ 0 ┃ 1 ┃ 0 ┃ 0 ┃ = 0x54
┣━━━━╋━━━┻━━━╋━━━┻━━━╋━━━┻━━━╋━━━┻━━━┫
┃ 值意义 ┃显示但关闭闪烁┃显示但关闭闪烁┃显示但关闭闪烁┃ 不显示 ┃
┗━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
备注:这些参数位都是控制着各显示区的显示状态。该状态的实现需要在总开关为打开状态时有效。
*/
#define CsrDirR 0x4c // 光标向右移动Reg操作
#define CsrDirL 0x4d // 光标向左移动Reg操作
#define CsrDirU 0x4e // 光标向上移动Reg操作
#define CsrDirD 0x4f // 光标向下移动Reg操作
#define CsrW 0x46 // “光标地址 CSR 设置”的控制命令代码
/*
“光标地址 CSR 设置”的命令参数具体定义如下:
┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 参数1 ┃ CSRL ┃
┣━━━━╋━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┫
┃ 设置值 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃
┗━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 参数2 ┃ CSRH ┃
┣━━━━╋━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┫
┃ 设置值 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃
┗━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
CSR ----- 设置的光标指针地址 CSR。本指针地址有两个功能:①.作为显示屏幕上光标显示的当前位
置;②.作为显示存储器的当前地址指针。
CSR 为双字节参数,CSRH 为高8位,CSRL 为低8位。
备注:如果光标地址超出显示屏幕有效的地址范围,光标将自动消失,但不影响显示数据的
读写。光标地址在计算机的每次读写显示数据操作后,将根据“SED1335_CSRDIR”命
令设置的光标的移动方向而自动修正。光标指针不受画面滚动操作的影响。
*/
#define CsrForm 0x5d
/*
“光标的显示形状设置”的命令参数表,共有2个字节具体定义如下:
SED1335_CsrF_Para[2] = {0x07, 0x07}
┏━━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━━━━━━━━━┓
┃ 参数1 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ CRX ┃
┣━━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━┳━━━┳━━━┫
┃ 设置值 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 1 ┃ 1 ┃ 1 ┃ = 0x07
┗━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
CRX ----- 光标的水平显示宽度(点列数)。
CRX 取值在 0x00~0x07 范围内,代表1~8列/字符点阵。
┏━━━━┳━━━┳━━━┳━━━┳━━━┳━━━━━━━━━━━━━━━┓
┃ 参数2 ┃ CM ┃ 0 ┃ 0 ┃ 0 ┃ CRY ┃
┣━━━━╋━━━╋━━━╋━━━╋━━━╋━━━┳━━━┳━━━┳━━━┫
┃ 设置值 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 0 ┃ 1 ┃ 1 ┃ 1 ┃ = 0x07
┗━━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛
CRY ----- 光标的垂直显示高度(点行数)。
FX=0:字高度+字间距;FX=0x00~0x0F。
CRY 取值在 0x00~0x0F 范围内,代表1~16行/字符点阵。
CM ------ 选择光标的显示形状。
CM=0:线状光标显示,由 CRY 确定其宽度;
CM=1:块状光标显示,由 CRX×CRY 确定其形状的宽度和高度。
备注:光标显示仅在文本方式下有效。
*/
#define mWrite 0x42 // “允许计算机连续地把写入显示数据到显示存储 器内”的控制命令代码
/*--------------------------------------------------------------------------------------
13.“允许计算机连续地从显示存储器内读取显示数据”的控制命令代码字符化常数定义:
本命令代码写入后,将允许计算机连续地从显示存储器内读取显示数据。读取的存储单元地址由光标地
址 CSR 提供,读操作完成后光标指针将自动根据“SED1335_CSRDIR”命令设置的光标的移动方向进行
修改。本命令代码操作功能将在计算机写入下一指令代码后终止。
▲.注意:在使用本命令代码之前,要首先设置好下面两个参数:
①.光标地址 CSR 值;
②.光标的移动方向。
--------------------------------------------------------------------------------------*/
#define mRead 0x43 // “允许计算机连续地把显示数据写入显示存储器内”的控制命令代码
/*--------------------------------------------------------------------------------------
13.“允许计算机连续地从显示存储器内读取显示数据”的控制命令代码字符化常数定义:
本命令代码写入后,将允许计算机连续地从显示存储器内读取显示数据。读取的存储单元地址由光标地
址 CSR 提供,读操作完成后光标指针将自动根据“SED1335_CSRDIR”命令设置的光标的移动方向进行
修改。本命令代码操作功能将在计算机写入下一指令代码后终止。
▲.注意:在使用本命令代码之前,要首先设置好下面两个参数:
①.光标地址 CSR 值;
②.光标的移动方向。
--------------------------------------------------------------------------------------*/
void LocateXY(U8 x, U8 y);
/***************************************************************************************************
** 函数名称: RS_OP
** 功能描述: RS管脚输出赋值
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
** 函数说明:RS==1时,向LCD模块寄存器写指令;RS==0时,向LCD模块显示内存写数据
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void RS_OP(BOOLEAN op)
{
if ( op == LOW) P0Reg.IOCLR.all = 1<<9;
else P0Reg.IOSET.all = 1<<9;
}
/***************************************************************************************************
** 函数名称: WR_OP
** 功能描述: 写LCD模块控制引脚
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
** 函数说明:WR为LOW时,势能写模式
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void WR_OP(BOOLEAN op)
{
if (op == LOW) P1Reg.IOCLR.all = 1<<17;
else P1Reg.IOSET.all = 1<<17;
}
/***************************************************************************************************
** 函数名称: RD_OP
** 功能描述: 读LCD模块控制引脚
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
** 函数说明:RD为LOW时,势能读模式
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void RD_OP(BOOLEAN op)
{
if (op == LOW) P1Reg.IOCLR.all = 1<<16;
else P1Reg.IOSET.all = 1<<16;
}
/***************************************************************************************************
** 函数名称: CS_OP
** 功能描述: 片选LCD模块控制引脚
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
** 函数说明:CS为LOW时,LCD使能读写状态
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void CS_OP(BOOLEAN op)
{
if (op == LOW) P0Reg.IOCLR.all = 1<<8;
else P0Reg.IOSET.all = 1<<8;
}
/***************************************************************************************************
** 函数名称: WriteCommand
** 功能描述: 写命令到LCD模块寄存器
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void LCM_WrCommand(U8 command)
{
RS_OP(HIGH);
P1Reg.IOCLR.all = 0x03fc0000;
P1Reg.IOSET.all = (U32) (command<<18);
CS_OP(LOW);
WR_OP(LOW);
;
;
;
;
;
;
;
WR_OP(HIGH);
CS_OP(HIGH);
}
/***************************************************************************************************
** 函数名称: WriteData
** 功能描述: 写数据到LCD模块显示内存
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void LCM_WrData(U8 wrdata)
{
RS_OP(LOW);
P1Reg.IOCLR.all = 0x03fc0000;
P1Reg.IOSET.all = (U32) (wrdata<<18);
CS_OP(LOW);
WR_OP(LOW);
;
;
;
;
;
;
;
WR_OP(HIGH);
CS_OP(HIGH);
}
/***************************************************************************************************
** 函数名称: LCM_WriteByte
** 功能描述: 向指定点写数据(一字节)
** 输入参数: x x坐标值(0-320)
** y y坐标值(0-240)
** wrdata 所要写的数据
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:
**--------------------------------------------------------------------------------------------------
** 作 者: Happy Xu
** 日 期: 2007/11/27
***************************************************************************************************/
void LCM_WriteByte(U8 x, U8 y, U8 wrdata)
{
LocateXY(x, y); // 光标移动到指定位置
LCM_WrCommand(mWrite); // 写数据到显示内存指令
LCM_WrData(wrdata); // 写数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -