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

📄 test.c

📁 基于LPC2220和SMG240128的液晶驱动程序。
💻 C
字号:
/****************************************************************************************
* 文件名:TEST.C
* 功能:在图形液晶模块SMG240128A上显示均匀的黑白方格。
****************************************************************************************/
#include "config.h"

#define  TCOLOR		uint8

extern uint8  gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];


/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat		填充的数据(对于黑白色LCM,为0的点灭,为1的点显示)
* 出口参数:无
****************************************************************************/
void  GUI_FillSCR(uint8 dat)
{  uint32  i, j;

   for(i=0; i<GUI_LCM_YMAX; i++)		// 历遍所有行
   {  for(j=0; j<GUI_LCM_XMAX/8; j++)	// 历遍所有行
      {  gui_disp_buf[i][j] = dat;		// 填充数据
	  }
   }
   
   /* 填充LCM */
   LCD_FillAll(dat);
}


uint8 const  DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数: x		指定点所在列的位置
*           y		指定点所在行的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
*          效范围)
****************************************************************************/
uint8  GUI_Point(uint32 x, uint32 y, TCOLOR color)
{  /* 参数过滤 */
   if(x>=GUI_LCM_XMAX) return(0);
   if(y>=GUI_LCM_YMAX) return(0);
   
   /* 设置缓冲区相应的点 */
   if( (color&0x01) != 0 ) gui_disp_buf[y][x>>3] |= DCB_HEX_TAB[x&0x07];
      else  gui_disp_buf[y][x>>3] &= (~DCB_HEX_TAB[x&0x07]);

   /* 刷新显示 */
   LCD_UpdatePoint(x, y);
   return(1);
}


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

   if(x0>x1) 						// 对x0、x1大小进行排列,以便画图
   {  bak = x1;
      x1 = x0;
      x0 = bak;
   }
   if(x0==x1)
   {  GUI_Point(x0, y0, color);
      return;
   }
   
   do
   {  /* 设置相应的点为1 */
      if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
         else  gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
      /* 刷新显示(一次刷新一字节) */
      if( (x0&0x07)==0x07 ) LCD_UpdatePoint(x0, y0);
      
      x0++;
   }while(x1>x0);
   
   /* 对最后一点显示操作 */
   if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
      else  gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
   LCD_UpdatePoint(x0, y0);
}



/****************************************************************************
* 名称:main()
* 功能:主函数,SMG240128A显示测试。
****************************************************************************/
int  main(void)
{  uint8  x, y;
   uint8  color;
   uint8  i, j;

   LCD_Initialize();				// 初始化LCM模块工作模式,纯图形模式  
   GUI_FillSCR(0x00);				// 初始化缓冲区为0x00,并输出屏幕(清屏)

   x=0; 
   y=0;
   color = 1;
   
   // 在液晶屏上显示均匀的黑白方格  
   for(j=0; j<7; j++)
   {  // 显示20行x_x_,从上至下,即形成黑白块
      for(i=0; i<20; i++)
	  {  // 显示一行 x_x_ (x表示画线,_表示空白)
	     for(x=0; x<240; x+=24)
         {  GUI_HLine(x, y, x+23, color);
            if(0==color) color = 1;
              else color = 0;
         }
         y++;			// 指向下一行
      } 
        
      // 下一个20行x_x_要切换起始色
      if(0==color) color = 1;
         else color = 0;     
   }  
   
   while(1);
   return(0);
}

⌨️ 快捷键说明

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