📄 lcd_51.c
字号:
LCDM_WriteCode(y, 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, CS2); /* 将显示字符点阵数据写入液晶显示屏幕 */
}
temp = x + LCDM_Yaddress_1; /* 芯片1的X轴坐标退回到设置点 */
LCDM_WriteCode(temp, CS1);
y = y + 1; /* 显示页数(Y轴坐标)+1 */
LCDM_WriteCode(y, 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; /* 片选数值变量,仅可取 CS1 或 CS2 中的一个 */
LCDM_Display(ON); /* 打开液晶显示屏幕 */
LCDM_SetStartLine(0); /* 设置显示开始行为第一行 */
for (DC_CSNum=1; DC_CSNum<=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);
}
}
}
/*----------------------------------------------------------------------------
函数功能: 本函数用于在液晶屏幕上显示欢迎和警告页的操作。运行完本函数将显示:
“欢迎”------------------ 第一页,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_AllScreenData(0x00,64,64); /* 清屏 */
/* 显示“欢”字符 */
LCDM_Display_Character(0,0,&Welcome_64_64[0][0],64,64);
delay_ms(500);
LCDM_AllScreenData(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_AllScreenData(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_AllScreenData(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_AllScreenData(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,&AdviseContent_16_16[i][0],16,16);
}
delay_ms(1800);
LCDM_AllScreenData(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,&AdviseContent_16_16[i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreenData(0x00,64,64); /* 清屏 */
/* 显示第三页第一行、第二行和第三行字符 */
for (j=0; j<3;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2+2,&AdviseContent_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,&AdviseContent_16_16[k*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
}
LCDM_AllScreenData(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后三行字符 */
for (j=0; j<3;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2,&AdviseContent_16_16[7*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreenData(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后二行字符 */
for (j=0; j<2;j++)
{
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,j*2,&AdviseContent_16_16[8*8+i+j*8][0],16,16);
}
}
delay_ms(1800);
LCDM_AllScreenData(0x00,64,64); /* 清屏 */
/* 滚动显示第三页最后一行字符 */
for (i=0; i<8;i++)
{
LCDM_Display_Character(i*16,0,&AdviseContent_16_16[9*8+i][0],16,16);
}
delay_ms(1800);
LCDM_AllScreenData(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); /* 关闭液晶模块背景灯 */
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
register Uchar8 i;
register Uchar8 j;
register Uchar8 k;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
LCDM_initialization();
while (1)
{
Welcome_Advise_Show();
// Place your code here
}
}
/*
****************************************************************************************
本C语言源程序文件到此结束
****************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -