📄 lcdm_hd61202_128d64.lib
字号:
/*
****************************************************************************************
源程序文件名: LCDM_HD61202_128D64.C
源程序名称: 128×64液晶模块(控制芯片:HD61202/3)的源程序文件
程序版本: 1.0
程序功能:
本程序是用 ATmega16 控制128×64液晶模块(控制芯片:HD61202/3)显示
的源程序文件。
程序说明:
函数入口参数:
函数出口参数:
编译工具软件: CodeVision AVR C 版本:1.24.6 以上
链接子程序文件: 目标器件芯片的头部文件
编作者: 磊元
编作者 E-Mail: PTZSW@163.COM
编制日期: 2005年5月18日
------------------------------------------------------------------------------
适用器件芯片类型: Atmel 公司生产的8位 RISC 单片机
器件芯片时钟频率:
存储器模式: 小存储器模式
外部扩展存储器大小:0 【字节】
数据堆栈大小: 256 【字节】
------------------------------------------------------------------------------
源程序版本历史:
2005年5月18日 -------- 版本 1.0 :发行版本
****************************************************************************************
*/
/*======================================================================================
本源程序包括的头部文件
======================================================================================*/
#include "LCDM_HD61202_128D64.h" /* 本程序的头部文件 */
#include "Delay.H" /* 包含延时函数的头部文件 */
/*======================================================================================
程序指令代码清单
======================================================================================*/
/*----------------------------------------------------------------------------
函数功能: 本函数用于控制液晶模块的MCU输入/输出引脚的初始化操作。
备注: 本函数仅在主函数中调用一次即可,除非释放各控制引脚作为其他用途,
如要再使用这些控制引脚来控制液晶模块则需在主函数中再调用一次本函数。
----------------------------------------------------------------------------*/
void LCDM_initialization(void)
{
/* 下面这些语句用于设置液晶模块的各控制引脚与MCU的连接定义 */
LCDM_BL_DDR |= LCDM_BL_PINNum; /* 设置液晶的背景灯控制端口为输出引脚 */
LCDM_BL_PORT &= ~LCDM_BL_PINNum;
LCDM_DI_DDR |= LCDM_DI_PINNum; /* 设置液晶的寄存器选择控制端口为输出引脚 */
LCDM_DI_PORT &= ~LCDM_DI_PINNum;
LCDM_RW_DDR |= LCDM_RW_PINNum; /* 设置液晶的读/写选择控制端口为输出引脚 */
LCDM_RW_PORT &= ~LCDM_RW_PINNum;
LCDM_EN_DDR |= LCDM_EN_PINNum; /* 设置液晶的使能信号控制端口为输出引脚 */
LCDM_EN_PORT &= ~LCDM_EN_PINNum;
LCDM_CS1_DDR |= LCDM_CS1_PINNum; /* 设置液晶的片选1控制端口为输出引脚 */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum;
LCDM_CS2_DDR |= LCDM_CS2_PINNum; /* 设置液晶的片选2控制端口为输出引脚 */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum;
LCDM_DATA_DDR = 0xFF; /* 设置液晶模块的数据端口为输出引脚 */
LCDM_DATA_PORT = 0x00;
#ifdef LCDM_Use_ResetPin /* 系统使用液晶复位控制引脚的条件编译 */
LCDM_RST_DDR |= LCDM_RST_PINNum; /* 设置液晶的复位信号控制端口为输出引脚 */
LCDM_RST_PORT &= ~LCDM_RST_PINNum;
/* 下面这些语句用于液晶模块的初始化复位 */
LCDM_RST_PORT &= ~LCDM_RST_PINNum; /* 置复位信号为低电平 */
delay_ms(2);
LCDM_RST_PORT |= LCDM_RST_PINNum; /* 置复位信号为高电平 */
delay_ms(2);
#endif /* "LCDM_Use_ResetPin" 条件编译结束 */
LCDM_AllScreenData(0x00,64,64); /* 清屏 */
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于控制液晶模块背景灯打开/关闭的操作。
函数入口参数:BL_status ------ 仅可取二个值 ON 或 OFF 中的一个。
----------------------------------------------------------------------------*/
void LCDM_BackgroundLight(Uchar8 BL_status)
{
if (BL_status == ON)
{
LCDM_BL_DDR |= LCDM_BL_PINNum; /* 设置液晶的背景灯控制端口为输出引脚 */
LCDM_BL_PORT |= LCDM_BL_PINNum; /* 打开液晶的背景灯 */
// delay_us(2); /* 延时2us */
}
if (BL_status == OFF)
{
LCDM_BL_DDR |= LCDM_BL_PINNum; /* 设置液晶的背景灯控制端口为输出引脚 */
LCDM_BL_PORT &= ~LCDM_BL_PINNum; /* 关闭液晶的背景灯 */
// delay_us(2); /* 延时2us */
}
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于控制液晶模块显示打开/关闭的操作。
函数入口参数:Dpy_status ------ 仅可取二个值 ON 或 OFF 中的一个。
----------------------------------------------------------------------------*/
void LCDM_Display(Uchar8 Dpy_status)
{
#ifdef LCDM_DI_RW_EN_PinShare /* "LCDM_DI_RW_EN_PinShare" 条件编译开始 */
LCDM_DI_DDR |= LCDM_DI_PINNum; /* 设置液晶的寄存器选择控制端口为输出引脚 */
LCDM_RW_DDR |= LCDM_RW_PINNum; /* 设置液晶的读/写选择控制端口为输出引脚 */
LCDM_EN_DDR |= LCDM_EN_PINNum; /* 设置液晶的使能信号控制端口为输出引脚 */
#endif /* "LCDM_DI_RW_EN_PinShare" 条件编译结束 */
LCDM_DATA_DDR = 0xFF; /* 设置液晶模块的数据端口为输出引脚 */
if (Dpy_status == ON)
{
LCDM_DI_PORT &= ~LCDM_DI_PINNum; /* 置寄存器选择为L */
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置读/写选择为L */
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片选1为H */
/* 将打开液晶显示的控制指令字输出到片1的数据端口 */
LCDM_DATA_PORT = LCDM_ON_Display;
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum; /* 置片选1为L */
LCDM_CS2_PORT |= LCDM_CS2_PINNum; /* 置片选2为H */
/* 将打开液晶显示的控制指令字输出到片2的数据端口 */
LCDM_DATA_PORT = LCDM_ON_Display;
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum; /* 置片选2为L */
}
if (Dpy_status == OFF)
{
LCDM_DI_PORT &= ~LCDM_DI_PINNum; /* 置寄存器选择为L */
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置读/写选择为L */
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片选1为H */
/* 将关闭液晶显示的控制指令字输出到片1的数据端口 */
LCDM_DATA_PORT = LCDM_OFF_Display;
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum; /* 置片选1为L */
LCDM_CS2_PORT |= LCDM_CS2_PINNum; /* 置片选2为H */
/* 将关闭液晶显示的控制指令字输出到片2的数据端口 */
LCDM_DATA_PORT = LCDM_OFF_Display;
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum; /* 置片选2为L */
}
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于控制液晶模块设置显示开始行的操作。
函数入口参数:line_num ------ 开始行数值。(数值范围:line_num ≤63)
----------------------------------------------------------------------------*/
void LCDM_SetStartLine(Uchar8 line_num)
{
#ifdef LCDM_DI_RW_EN_PinShare /* "LCDM_DI_RW_EN_PinShare" 条件编译开始 */
LCDM_DI_DDR |= LCDM_DI_PINNum; /* 设置液晶的寄存器选择控制端口为输出引脚 */
LCDM_RW_DDR |= LCDM_RW_PINNum; /* 设置液晶的读/写选择控制端口为输出引脚 */
LCDM_EN_DDR |= LCDM_EN_PINNum; /* 设置液晶的使能信号控制端口为输出引脚 */
#endif /* "LCDM_DI_RW_EN_PinShare" 条件编译结束 */
LCDM_DATA_DDR = 0xFF; /* 设置液晶模块的数据端口为输出引脚 */
LCDM_DI_PORT &= ~LCDM_DI_PINNum; /* 置寄存器选择为L */
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置读/写选择为L */
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片选1为H */
/* 将设置的开始显示行数值与控制指令字一同输出到片1的数据端口 */
LCDM_DATA_PORT = LCDM_StartLine_1 + line_num;
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS1_PORT &= ~LCDM_CS1_PINNum; /* 置片选1为L */
LCDM_CS2_PORT |= LCDM_CS2_PINNum; /* 置片选2为H */
/* 将设置的开始显示行数值与控制指令字一同输出到片2的数据端口 */
LCDM_DATA_PORT = LCDM_StartLine_1 + line_num;
// delay_us(2); /* 延时2us */
LCDM_EN_PORT |= LCDM_EN_PINNum; /* 使能信号为H */
// delay_us(2); /* 延时2us */
LCDM_EN_PORT &= ~LCDM_EN_PINNum; /* 使能信号为L */
LCDM_CS2_PORT &= ~LCDM_CS2_PINNum; /* 置片选2为L */
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于向液晶模块写入控制指令代码。
函数入口参数:WriteCode ------ 向液晶模块写入的控制指令代码 。
WC_CSNum ------- 片选数值,仅取值 LCDM_CS1 或 LCDM_CS2 中的一个。
----------------------------------------------------------------------------*/
void LCDM_WriteCode(Uchar8 WriteCode, Uchar8 WC_CSNum)
{
#ifdef LCDM_DI_RW_EN_PinShare /* "LCDM_DI_RW_EN_PinShare" 条件编译开始 */
LCDM_DI_DDR |= LCDM_DI_PINNum; /* 设置液晶的寄存器选择控制端口为输出引脚 */
LCDM_RW_DDR |= LCDM_RW_PINNum; /* 设置液晶的读/写选择控制端口为输出引脚 */
LCDM_EN_DDR |= LCDM_EN_PINNum; /* 设置液晶的使能信号控制端口为输出引脚 */
#endif /* "LCDM_DI_RW_EN_PinShare" 条件编译结束 */
LCDM_DATA_DDR = 0xFF; /* 设置液晶模块的数据端口为输出引脚 */
LCDM_DI_PORT &= ~LCDM_DI_PINNum; /* 置寄存器选择为L */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -