📄 lcdm_hd61202_128d64.lib
字号:
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置读/写选择为L */
if (WC_CSNum == LCDM_CS1)
{
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片选1为H */
}
if (WC_CSNum == LCDM_CS2)
{
LCDM_CS1_PORT |= LCDM_CS2_PINNum; /* 置片选2为H */
}
LCDM_DATA_PORT = WriteCode; /* 将控制指令代码输出到的数据端口 */
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为L */
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于向液晶模块写入显示数据。
函数入口参数:WriteData ------ 向液晶模块写入的显示数据 。
WD_CSNum ------- 片选数值,仅取值 LCDM_CS1 或 LCDM_CS2 中的一个。
----------------------------------------------------------------------------*/
void LCDM_WriteData(Uchar8 WriteData, Uchar8 WD_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; /* 置寄存器选择为H */
LCDM_RW_PORT &= ~LCDM_RW_PINNum; /* 置读/写选择为L */
if (WD_CSNum == LCDM_CS1)
{
LCDM_CS1_PORT |= LCDM_CS1_PINNum; /* 置片选1为H */
}
if (WD_CSNum == LCDM_CS2)
{
LCDM_CS1_PORT |= LCDM_CS2_PINNum; /* 置片选2为H */
}
LCDM_DATA_PORT = WriteData; /* 将显示数据输出到的数据端口 */
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为L */
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于在液晶屏幕上在指定坐标位置(x,y)显示单个点阵字符的操作。
函数入口参数:x ----------------- X轴坐标,其数值范围:x ≤63。
y ----------------- Y轴坐标,其数值范围:y ≤7。
*pdc_address ------ 显示字符点阵数据存储地址,即指向存储点阵数据的指针。
dc_row_num -------- 显示字符行点数,其数值范围:x ≤127。
dc_column_num ----- 显示字符列点数,其数值范围:x ≤63。
备注: ①.参数 y(Y轴坐标)的数值范围:y ≤7。
②.在移植程序时,请注意 *pdc_address 参数前的 flash 关键字,此关键字
为 CodeVision AVR C 所扩充,在移植时要做相应修改。
----------------------------------------------------------------------------*/
void LCDM_Display_Character(Uchar8 x, /* X轴坐标 */
Uchar8 y, /* Y轴坐标 */
const Uchar8 flash *pdc_address, /* 字符点阵数据存储地址 */
const Uchar8 dc_row_num, /* 显示字符行点数 */
const Uchar8 dc_column_num) /* 显示字符列点数 */
{
register Uchar8 i_counter; /* 行循环计数器变量 */
register Uchar8 j_counter; /* 列循环计数器变量 */
register Uchar8 temp; /* 临时寄存器变量 */
register Uchar8 temp_data; /* 临时数据寄存器变量 */
LCDM_Display(ON); /* 打开液晶显示屏幕 */
LCDM_SetStartLine(0); /* 设置显示开始行为第一行 */
j_counter = dc_column_num/LCDM_DataBits; /* 列循环次数=字符列点数÷字符位长 */
temp = x + dc_row_num; /* 字符行宽范围=X轴坐标+显示字符行点数 */
if (temp < LCDM_MaxRowDot) /* 字符行宽范围是否全部在芯片1内? */
{
x = x + LCDM_Yaddress_1; /* 设置X轴坐标 */
LCDM_WriteCode(x, LCDM_CS1);
y = y + LCDM_DataPage_1; /* 设置Y轴坐标 */
LCDM_WriteCode(y, LCDM_CS1);
while (j_counter>0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循环次数=字符行点数 */
{
temp_data = *(pdc_address++); /* 输入显示字符点阵数据 */
LCDM_WriteData(temp_data, LCDM_CS1); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
LCDM_WriteCode(x, LCDM_CS1); /* X轴坐标退回到设置点 */
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCode(y, LCDM_CS1);
j_counter--;
}
}
else /* 否则字符行宽范围即在芯片2和芯片1之间 */
{
if (x >= LCDM_MaxRowDot) /* 字符行宽范围是否全部在芯片2内? */
{
x = x - LCDM_MaxRowDot; /* X轴坐标=X轴坐标-芯片1的最大行点阵数 */
x = x + LCDM_Yaddress_1; /* 设置X轴坐标 */
LCDM_WriteCode(x, LCDM_CS2);
y = y + LCDM_DataPage_1; /* 设置Y轴坐标 */
LCDM_WriteCode(y, LCDM_CS2);
while (j_counter>0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循环次数=字符行点数 */
{
temp_data = *(pdc_address++); /* 输入显示字符点阵数据 */
LCDM_WriteData(temp_data, LCDM_CS2); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
LCDM_WriteCode(x, LCDM_CS2); /* X轴坐标退回到设置点 */
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCode(y, LCDM_CS2);
j_counter--;
}
}
else
{
temp = x + LCDM_Yaddress_1; /* 设置X轴坐标 */
LCDM_WriteCode(temp, LCDM_CS1);
y = y + LCDM_DataPage_1; /* 设置Y轴坐标 */
LCDM_WriteCode(y, LCDM_CS1);
while (j_counter>0)
{
for (i_counter=(LCDM_MaxRowDot-x); i_counter>0; i_counter--)
/* 芯片1行循环次数=芯片1的最大行点阵数-X轴坐标 */
{
temp_data = *(pdc_address++); /* 输入显示字符点阵数据 */
LCDM_WriteData(temp_data, LCDM_CS1); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
temp = 0 + LCDM_Yaddress_1; /* 设置芯片2的X轴坐标为起点 */
LCDM_WriteCode(temp, LCDM_CS2);
LCDM_WriteCode(y, LCDM_CS2); /* 设置芯片2的Y轴坐标 */
for (i_counter=(x + dc_row_num - LCDM_MaxRowDot); i_counter>0; i_counter--)
/* 芯片2行循环次数=X轴坐标+显示字符行点数-芯片1的最大行点阵数 */
{
temp_data = *(pdc_address++); /* 输入显示字符点阵数据 */
LCDM_WriteData(temp_data, LCDM_CS2); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
temp = x + LCDM_Yaddress_1; /* 芯片1的X轴坐标退回到设置点 */
LCDM_WriteCode(temp, LCDM_CS1);
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCode(y, LCDM_CS1);
j_counter--;
}
}
}
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于在液晶屏幕上全屏幕填充单一字符数据的操作。
函数入口参数:all_data ------------ 填充的字符数据,例:清屏操作的字符数据可能为 0x00 。
max_row_num --------- 最大行点数值,为63。
max_column_num ------ 最大列点数值,为63。
备注: 对于片选数值的定义必须从 1 到 n 连续排列,如下所示 1,2,3,……,n-1,n 。
----------------------------------------------------------------------------*/
void LCDM_AllScreenData(const Uchar8 all_data, /* 填充的字符数据 */
const Uchar8 max_row_num, /* 最大行点数 */
const Uchar8 max_column_num) /* 最大列点数 */
{
register Uchar8 i_counter; /* 行循环计数器变量 */
register Uchar8 j_counter; /* 列循环计数器变量 */
register Uchar8 temp; /* 临时寄存器变量 */
register Uchar8 DC_CSNum; /* 片选数值变量,取 LCDM_CS1 或 LCDM_CS2 中的一个 */
LCDM_Display(ON); /* 打开液晶显示屏幕 */
LCDM_SetStartLine(0); /* 设置显示开始行为第一行 */
for (DC_CSNum=1; DC_CSNum<=LCDM_CS2; DC_CSNum++)
/* 片选循环次数=最大列片选数值 */
{
LCDM_WriteCode(LCDM_Yaddress_1, DC_CSNum); /* 设置X轴坐标为起点 */
temp = 0x00;
temp = temp + LCDM_DataPage_1; /* 设置Y轴坐标为起点 */
LCDM_WriteCode(LCDM_DataPage_1, DC_CSNum);
for (j_counter=(max_column_num/LCDM_DataBits); j_counter>0; j_counter--)
/* 列循环次数=最大列点数÷字符位长 */
{
for (i_counter=max_row_num; i_counter>0; i_counter--)
/* 行循环次数=最大行点数 */
{
LCDM_WriteData(all_data, DC_CSNum); /* 将填充的字符数据写入液晶显示屏幕 */
}
LCDM_WriteCode(LCDM_Yaddress_1, DC_CSNum); /* X轴坐标退回到起点 */
temp = temp + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCode(temp, DC_CSNum);
}
}
}
/*
****************************************************************************************
本C语言源程序文件到此结束
****************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -