⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_51.c

📁 这是AVR单片机驱动HD61202_128D64LCD编写的C程序
💻 C
📖 第 1 页 / 共 2 页
字号:
       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 + -