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

📄 lcmdrv.c

📁 在msp430f1611上实现的zlggui,lcm模块采用的是cm19264。
💻 C
📖 第 1 页 / 共 2 页
字号:
{ 
  x = x&0xff;				// 参数过滤
  y = y&0x3f;

  return(gui_disp_buf[x][y/8]);
}

/***********************************************************************
* 名称:LCM_DispFill()
* 功能:向显示缓冲区填充数据
* 入口参数:filldata  	要写入LCM的填充数据
* 注:此函数会设置显示起始行为0,且会自动选中CS1有效
***********************************************************************/
static void LCM_DispFill(uint8 filldata)
{ 
  unsigned char * pdisbuf=&gui_disp_buf[0][0];   /*指向显示缓冲的指针*/
     
   for(;pdisbuf<=&gui_disp_buf[191][7];pdisbuf++) /*指针调整,指向下一个*/
  {                                           /*判断指针是否指向缓冲区尾*/  
       *pdisbuf=filldata;                             /*填充显示缓冲*/
   }

}
/************************************************\
* *      LCMUpScr
* * 说明:  根据显示缓存内容更新显示
* *入口参数:无
* *出口参数:无
\************************************************/
void  LCMUpScr(void)      
{
 unsigned char cntx, cnty;
 LCM_SELECT_LEFT();                       /*选择左半部分*/
 for(cntx=0;cntx<8;cntx ++)
 {
  setX(cntx);                             /*选择第几行*/
  setY(0);                                /*选择第0列开始*/
  for(cnty=0;cnty<64;cnty ++)
  {
  LCM_WrData(gui_disp_buf[cnty][cntx]);      /*刷新显示缓冲*/
  }
 }
 
  LCM_SELECT_MIDDLE();                       /*中间部分,同左半部分*/
  for(cntx=0;cntx<8;cntx ++)
 {
  setX(cntx);
  setY(0);
  for(cnty=64;cnty<128;cnty ++)
 {
  LCM_WrData(gui_disp_buf[cnty][cntx]);
  }
 }
 
  LCM_SELECT_RIGHT();                       /*右半部分,同左半部分*/
  for(cntx=0;cntx<8;cntx ++)
 {
  setX(cntx);
  setY(0);
  for(cnty=128;cnty<192;cnty ++)
 {
  LCM_WrData(gui_disp_buf[cnty][cntx]);
  }
 }
}
    
/***********************************************************************
* 名称:LCM_DispIni()
* 功能:LCM显示初始化
* 入口参数:无
* 出口参数:无
* 注:初化显示后,清屏并设置显示起始行为0
*     会复位LCM_DISPCX,LCM_DISPCY.(并会只选中CS1)
***********************************************************************/
static void LCM_DispIni(void)
{ 
  LCM_RESET();
  LCM_SELECT_LEFT();        /*选择左半部分*/
  setStartLine(0);          /*起始行从第一行开始显示*/
  setOnOff(1);
  LCM_SELECT_MIDDLE();        /*选择左半部分*/
  setStartLine(0);          /*起始行从第一行开始显示*/
  setOnOff(1); 
  LCM_SELECT_RIGHT();        /*选择右半部分*/
  setStartLine(0);         /*起始行从第一行开始显示*/
  setOnOff(1);              /*开显示*/
}


/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat		填充的数据
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void  GUI_FillSCR(TCOLOR dat)
{ 
   LCM_DispFill(dat);
}

/****************************************************************************
* 名称:GUI_Initialize()
* 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_Initialize(void)
{  
   LCM_DispIni();			// 初始化LCM模块工作模式,纯图形模式
   GUI_FillSCR(0x00);		        // 初始化缓冲区为0x00,并输出屏幕(清屏)
   LCMUpScr();                          // 更新屏的显示存储区,把数据从显示缓冲区给显示存储区
}

/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_ClearSCR(void)
{  
   GUI_FillSCR(0x00);		        // 初始化缓冲区为0x00,并输出屏幕(清屏)
   LCMUpScr();                          // 更新屏的显示存储区,把数据从显示缓冲区给显示存储区
}


uint8 const  DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x		指定点所在列的位置
*           y		指定点所在行的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
uint8  GUI_Point(uint8 x, uint8 y, TCOLOR color)
{  
    unsigned char  temp;
    temp=gui_disp_buf[x][y/8];         /*读取时对应的显存*/
    if(color==1)                       /*如果是写入该点*/
   {
    temp|=gu8LCMPtSet[y%8];            /*将缓存对应的位置1*/
   }
   else
   {   
    temp&=gu8LCMPtClr[y%8];            /*否则清楚该位*/
   }
    gui_disp_buf[x][y/8]=temp;         /*保存入缓存*/
    
    LCM_WriteByte(x,y,temp);               /*更新显示存储区*/
    return 1;
}


/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定点的颜色。
* 入口参数:x		指定点所在列的位置
*           y		指定点所在行的位置
*           ret     保存颜色值的指针
* 出口参数:返回0表示指定地址超出缓冲区范围
* 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效,
*      RGB结构则R、G、B变量有效。
* *说明:读指定的点的数据
* *入口参数:X、Y指定点的坐标
* *出口参数:该点的数据,0——白屏;1——有色
****************************************************************************/
uint8  GUI_ReadPoint(uint8 x, uint8 y, TCOLOR *ret)
{ 
    unsigned  char  temp;
    temp=gui_disp_buf[x][y/8];         /*读取该位所在的字节*/
    if(temp&gu8LCMPtSet[y%8])       /*判断该位是否为1*/
   {
       return(1);                  /*为1则返回1*/
   }
    else
   {
       return(0);                   /*否则返回0*/
    }
}

/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0		水平线起点所在列的位置
*           y0		水平线起点所在行的位置
*           x1      水平线终点所在列的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void  GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color) 
{  uint8  bak;

   if(x0>x1) 						// 对x0、x1大小进行排列,以便画图
   {  
     bak = x1;
     x1 = x0;
     x0 = bak;
   }
   do
   {  
     GUI_Point(x0, y0, color);		// 逐点显示,描出垂直线
     x0++;
   }while(x1>=x0);
}


/***********************************************************************
* 名称:GUI_RLine()
* 功能:画竖直线。根据硬件特点,实现加速。
* 入口参数:x0		垂直线起点所在列的位置
*           y0		垂直线起点所在行的位置
*           y1      垂直线终点所在行的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:	无
* 说明:操作失败原因是指定地址超出缓冲区范围。
***********************************************************************/
void  GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color) 
{  
   uint8  bak;
   
   if(y0>y1) 		// 对y0、y1大小进行排列,以便画图
   {  
     bak = y1;
     y1 = y0;
     y0 = bak;
   }
   
   do
   {  
     GUI_Point(x0, y0, color);		// 逐点显示,描出垂直线
     y0++;
   }while(y1>=y0);

}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -