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

📄 lcdm_hd61202_128d64.lib

📁 基于AVR开发系统的DS12887操作程序
💻 LIB
📖 第 1 页 / 共 2 页
字号:
  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 + -