📄 ocm240128.c
字号:
/******************************************************************************************
** 函数名称: void OCM_bit(uchar bite, uchar byte)
** 功能描述: 位操作 (Bit set reset)
** 输入参数: byte: (0~7有效)显示单元中的数据的任一位写“0”或“1”
bite: 0:byte选择的为置0,非0:byte选择的位置1
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_bit(uchar bite, uchar byte)
{
uchar tmp = byte;
if (bite) //bite转换为位
{
bite = 1;
}
else
{
bite = 0;
}
tmp &= 0X07; //后3位有效
while (!OCM_busy(0)); //单次读写遇忙判断
C_Addr = 0XF0 | (bite << 3) | tmp; //写命令字
}
/******************************************************************************************
** 函数名称: void OCM_onewr(uchar mod,uchar dat)
** 功能描述: 单次写液晶函数
** 输入参数: mod: mod =0: 地址加一
=1:地址减一
=2: 地址不变
其他: 地址不变
dat: 数据
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_onewr(uchar mod, uchar dat)
{
while (!OCM_busy(0));
D_Addr = dat;
while (!OCM_busy(0));
switch (mod)
{
case 0: C_Addr = 0XC0; break;
case 1: C_Addr = 0XC2; break;
case 2: C_Addr = 0XC4; break;
default:C_Addr = 0XC4; break;
}
}
/******************************************************************************************
** 函数名称: uchar OCM_onerd(uchar mod,uchar dat)
** 功能描述: 单次读液晶函数
** 输入参数: mod: mod =0: 地址加一
=1:地址减一
=2: 地址不变
其他: 地址不变
** 输出参数: uchar 读到的数据
** 全局变量: 无
** 调用模块: 无
*******************************************************************************************/
uchar OCM_onerd(uchar mod)
{
uchar dat;
switch (mod)
{
case 0: C_Addr = 0XC1; break;
case 1: C_Addr = 0XC3; break;
case 2: C_Addr = 0XC5; break;
default:C_Addr = 0XC5; break;
}
dat = D_Addr; //读数据
return (dat);
}
/******************************************************************************************
** 函数名称: void OCM_autrd(uchar addr, uchar num, uchar *p)
** 功能描述: 自动读液晶函数
** 输入参数: addr: 液晶开始读的地址
num: 自动读数据的个数
*p: 读到数据的存储区
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_autrd(uint addr, uchar num, uchar *p)
{
uchar i;
OCM_ac(2,addr); //显示地址设置
OCM_autrd_start(); //启动自动读操作
for (i = 0; i < num; i++)
{
while (!OCM_busy(1)); //自动读忙检查
p[i] = D_Addr; //读数据
}
OCM_autrd_stop(); //自动读操作结束
}
/******************************************************************************************
** 函数名称: void OCM_autwr(uint addr, uchar num, uchar *p)
** 功能描述: 自动写液晶函数
** 输入参数: addr: 液晶开始写的地址
num: 自动写数据的个数
*p: 写数据区
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_autwr(uint addr, uchar num, uchar *p)
{
uchar i;
OCM_ac(2,addr); //显示地址设置
OCM_autwr_start(); //启动自动写操作
for (i = 0; i < num; i++)
{
while (!OCM_busy(2)); //自动写忙检查
D_Addr = p[i]; //写数据
}
OCM_autwr_stop(); //自动写操作结束
}
/******************************************************************************************
** 函数名称: void OCM_picture(uint addr, uchar w, uchar h, uchar *tab)
** 功能描述: 图像显示
图形的高和宽必须设置正确
** 输入参数: addr: 显示起始地址
h: 图像高(点单位) 横向取模方式
w: 图像宽(点单位)
*tab: 地址必须是2维数组地址
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_picture(uint addr, uchar w, uchar h, uchar *tab)
{
uchar j;
for (j = 0; j < h; j++)
{
OCM_autwr(addr + (30 * j), w / 8, tab + j * w/8); //j*w/8:计算偏移地址
}
}
/******************************************************************************************
** 函数名称: void OCM_picture_lcr(uint addr, uchar w, uchar h)
** 功能描述: 清图像函数,清除图像
图形的高和宽必须设置正确
** 输入参数: addr: 显示起始地址
h: 图像高(点单位) 横向取模方式
w: 图像宽(点单位)
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_picture_clr(uint addr, uchar w, uchar h)
{
uchar i,j;
for (j = 0; j < h; j++)
{
OCM_ac(2,addr + (30 * j)); //显示地址设置
OCM_autwr_start(); //启动自动写操作
for (i = 0; i < w / 8; i++)
{
while (!OCM_busy(2)); //自动写忙检查
D_Addr = 0x00; //写数据
}
OCM_autwr_stop(); //自动写操作结束
}
}
/******************************************************************************************
** 函数名称: void OCM_line_clr(uint addr,uchar dat)
** 功能描述: 单行清除数据
** 输入参数: dat: 清屏数据
addr: 地址
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_line_clr(uint addr,uchar dat)
{
uchar i;
OCM_ac(2,addr); //文本显示地址设置
OCM_autwr_start(); //启动自动写操作
for (i = 0; i < 30; i++)
{
while (!OCM_busy(2)); //自动写忙检查
D_Addr = dat; //写数据
}
OCM_autwr_stop(); //自动写操作结束
}
/******************************************************************************************
** 函数名称: void OCM_clr(uchar dat)
** 功能描述: 清屏函数
** 输入参数: dat: 清屏数据
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_clr(uchar dat)
{
uint i;
/* 文本清零 */
OCM_ac(2,Text_Addr); //文本显示地址设置
OCM_autwr_start(); //启动自动写操作
for (i = 0; i < 500; i++)
{
while (!OCM_busy(2)); //自动写忙检查
D_Addr = dat; //写数据
}
OCM_autwr_stop(); //自动写操作结束
/* 图形清零 */
OCM_ac(2,Figure_Addr); //图形显示地址设置
OCM_autwr_start(); //启动自动写操作
for (i = 0; i < 0X1000; i++)
{
while (!OCM_busy(2)); //自动写忙检查
D_Addr = dat; //写数据
}
OCM_autwr_stop(); //自动写操作结束
}
/******************************************************************************************
** 函数名称: void OCM_init(void)
** 功能描述: OCM240128初始化函数
初始化内容:文本显示首地址,文本显示宽度,图形显示首地址,图形显示宽度
光标显示行数(0~7行)
文本图形显示方式(或,与,异或,双属性文本),CGROM开关
光标显示,光标闪烁,文字显示,图形显示
** 输入参数: 无
** 输出参数: 无
** 全局变量: 无
** 调用模块: 无
******************************************************************************************/
void OCM_init(void)
{
OCM_area(0, Text_Addr); //文本显示区首地址为0X0000
OCM_area(1, 30); //文本显示区宽度30字节一行
OCM_area(2, Figure_Addr); //图形显示区首地址0X0800
OCM_area(3, 30); //图形显示区宽度30字节一行
OCM_cursor(7); //光标8行
OCM_mode(0,EN_CGROM); //逻辑或方式合成,启用CGRAM
OCM_state((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));//光标显示,图形文字同时显示
OCM_bit(0, 0); //防止编译器警告
OCM_clr(0); //清屏
}
/*-------------------------------------------------------------------------------------------------------------------
Children Function End
液晶显示子程序结束
--------------------------------------------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -