📄 12864.txt
字号:
/*----------------------------------------------------------------------------
函数功能: 本函数用于在液晶屏幕上在指定坐标位置(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(unsigned char x, /* X轴坐标 */
unsigned char y, /* Y轴坐标 */
const unsigned char flash *pdc_address, /* 字符点阵数据存储地址 */
const unsigned char dc_row_num, /* 显示字符行点数 */
const unsigned char dc_column_num) /* 显示字符列点数 */
{
register unsigned char i_counter; /* 行循环计数器变量 */
register unsigned char j_counter; /* 列循环计数器变量 */
register unsigned char temp; /* 临时寄存器变量 */
register unsigned char temp_LCD_PORT; /* 临时数据寄存器变量 */
LCDM_Display_Open(); /* 打开液晶显示屏幕 */
LCDM_SetStartLine(0); /* 设置显示开始行为第一行 */
j_counter = dc_column_num/LCDM_LCD_PORTBits; /* 列循环次数=字符列点数÷字符位长 */
temp = x + dc_row_num; /* 字符行宽范围=X轴坐标+显示字符行点数 */
if (temp 0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循环次数=字符行点数 */
{
temp_LCD_PORT = *(pdc_address++); /* 输入显示字符点阵数据 */
LCD_WriteData(temp_LCD_PORT, LCD_CS1); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
LCD_WriteCommand(x, LCD_CS1); /* X轴坐标退回到设置点 */
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCD_WriteCommand(y, LCD_CS1);
j_counter--;
}
}
else /* 否则字符行宽范围即在芯片2和芯片1之间 */
{
if (x >= LCDM_MaxRowDot) /* 字符行宽范围是否全部在芯片2内? */
{
x = x - LCDM_MaxRowDot; /* X轴坐标=X轴坐标-芯片1的最大行点阵数 */
x = x + LCDM_Yaddress_1; /* 设置X轴坐标 */
LCD_WriteCommand(x, LCD_CS2);
y = y + LCDM_LCD_PORTPage_1; /* 设置Y轴坐标 */
LCD_WriteCommand(y, LCD_CS2);
while (j_counter>0)
{
for (i_counter=dc_row_num; i_counter>0; i_counter--)
/* 行循环次数=字符行点数 */
{
temp_LCD_PORT = *(pdc_address++); /* 输入显示字符点阵数据 */
LCD_WriteData(temp_LCD_PORT, LCD_CS2); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
LCD_WriteCommand(x, LCD_CS2); /* X轴坐标退回到设置点 */
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCommand(y, LCD_CS2);
j_counter--;
}
}
else
{
temp = x + LCDM_Yaddress_1; /* 设置X轴坐标 */
LCD_WriteCommand(temp, LCD_CS1);
y = y + LCDM_LCD_PORTPage_1; /* 设置Y轴坐标 */
LCD_WriteCommand(y, LCD_CS1);
while (j_counter>0)
{
for (i_counter=(LCDM_MaxRowDot-x); i_counter>0; i_counter--)
/* 芯片1行循环次数=芯片1的最大行点阵数-X轴坐标 */
{
temp_LCD_PORT = *(pdc_address++); /* 输入显示字符点阵数据 */
LCD_WriteData(temp_LCD_PORT, LCD_CS1); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
temp = 0 + LCDM_Yaddress_1; /* 设置芯片2的X轴坐标为起点 */
LCD_WriteCommand(temp, LCD_CS2);
LCD_WriteCommand(y, LCD_CS2); /* 设置芯片2的Y轴坐标 */
for (i_counter=(x + dc_row_num - LCDM_MaxRowDot); i_counter>0; i_counter--)
/* 芯片2行循环次数=X轴坐标+显示字符行点数-芯片1的最大行点阵数 */
{
temp_LCD_PORT = *(pdc_address++); /* 输入显示字符点阵数据 */
LCD_WriteData(temp_LCD_PORT, LCD_CS2); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
temp = x + LCDM_Yaddress_1; /* 芯片1的X轴坐标退回到设置点 */
LCD_WriteCommand(temp, LCD_CS1);
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCD_WriteCommand(y, LCD_CS1);
j_counter--;
}
}
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于在液晶屏幕上显示欢迎和警告页的操作。运行完本函数将显示:
“欢迎”------------------ 第一页,64×64点阵。
“郑重警告”-------------- 第二页,32×32点阵。
“本产品和嵌入的软 ------- 第三页,16×16点阵。
件受著作权法及国
际著作权条约和其
它知识产权法和条
约的保护,未经其
所有者的书面授权
不得擅自复制或传
播,否则将受到在
法律许可的范围内
最大可能的起诉。”
“欢迎使用”-------------- 第四页,32×32点阵。
备注: 本函数也是演示对上面函数如何使用的范例。
----------------------------------------------------------------------------*/
void Welcome_Advise_Show(void)
{
register Uchar8 i; /* 循环计数器变量 */
register Uchar8 j; /* 循环计数器变量 */
register Uchar8 k; /* 循环计数器变量 */
LCDM_initialization(); /* 初始化操作 */
LCDM_BackgroundLight(ON); /* 打开液晶模块背景灯 */
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 显示“欢”字符 */
LCDM_Display_Character(0,0,&Welcome_64_64[0][0],64,64);
delay_ms(500);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 显示“欢迎”字符 */
LCDM_Display_Character(64,0,&Welcome_64_64[1][0],64,64);
delay_ms(500);
LCDM_Display_Character(0,0,&Welcome_64_64[0][0],64,64);
delay_ms(2000);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 显示“郑重警告”字符 */
LCDM_Display_Character(0,2,&SeriousAdvise_32_32[0][0],32,32);
LCDM_Display_Character(32,2,&SeriousAdvise_32_32[1][0],32,32);
LCDM_Display_Character(64,2,&SeriousAdvise_32_32[2][0],32,32);
LCDM_Display_Character(96,2,&SeriousAdvise_32_32[3][0],32,32);
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 向上一行滚动显示“郑重警告”字符 */
LCDM_Display_Character(0,1,&SeriousAdvise_32_32[0][0],32,32);
LCDM_Display_Character(32,1,&SeriousAdvise_32_32[1][0],32,32);
LCDM_Display_Character(64,1,&SeriousAdvise_32_32[2][0],32,32);
LCDM_Display_Character(96,1,&SeriousAdvise_32_32[3][0],32,32);
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 再向上一行滚动显示“郑重警告”及第三页第一行字符 */
LCDM_Display_Character(0,0,&SeriousAdvise_32_32[0][0],32,32);
LCDM_Display_Character(32,0,&SeriousAdvise_32_32[1][0],32,32);
LCDM_Display_Character(64,0,&SeriousAdvise_32_32[2][0],32,32);
LCDM_Display_Character(96,0,&SeriousAdvise_32_32[3][0],32,32);
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,6,&AdviseContLCD_ENt_16_16[0],16,16);
}
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 再向上一行滚动显示“郑重警告”及第三页第一行和第二行字符 */
LCDM_Display_Character(0,0,&SeriousAdvise_32_32[0][32],32,24);
LCDM_Display_Character(32,0,&SeriousAdvise_32_32[1][32],32,24);
LCDM_Display_Character(64,0,&SeriousAdvise_32_32[2][32],32,24);
LCDM_Display_Character(96,0,&SeriousAdvise_32_32[3][32],32,24);
for (j=0; j<2;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2+4,&AdviseContLCD_ENt_16_16[i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 显示第三页第一行、第二行和第三行字符 */
for (j=0; j<3;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2+2,&AdviseContLCD_ENt_16_16[i+j*8][0],16,16);
}
}
delay_ms(1800);
/* 滚动显示第三页字符 */
for (k=0; k<7;k++)
{
for (j=0; j<4;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2,&AdviseContLCD_ENt_16_16[k*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
}
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后三行字符 */
for (j=0; j<3;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2,&AdviseContLCD_ENt_16_16[7*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后二行字符 */
for (j=0; j<2;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2,&AdviseContLCD_ENt_16_16[8*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后一行字符 */
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,0,&AdviseContLCD_ENt_16_16[9*8+i][0],16,16);
}
delay_ms(1800);
LCDM_AllScreLCD_ENLCD_PORT(0x00,64,64); /* 清屏 */
/* 显示“欢迎使用”字符 */
LCDM_Display_Character(0,2,&WelcomeUse_32_32[0][0],32,32);
LCDM_Display_Character(32,2,&WelcomeUse_32_32[1][0],32,32);
LCDM_Display_Character(64,2,&WelcomeUse_32_32[2][0],32,32);
LCDM_Display_Character(96,2,&WelcomeUse_32_32[3][0],32,32);
delay_ms(4000);
LCDM_BackgroundLight(OFF); /* 关闭液晶模块背景灯 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -