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

📄 lcm128645zk.c

📁 此文件是LCM12864在LPC2131上的驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
 for (x=0;x<8;x++)
 	{ gui_disp_buf[y][x]=0x00;
 	  gui_disp_buf[y][x+8]=0x00;
 	
 	
 	
 	
 //此处连续写数据,由于y为行号,在本循环内不变,
 //而连续写16个数据时,x位址自动增加,
 //因此实际上可以写入16个汉字的位置。
   LCM128645ZK_data(0x00); //高字节数据
   LCM128645ZK_data(0x00); //低字节数据
 	}
  }
  }
  
  
  
  
 	
 	
 	
 	
  
}
  uint8 const  DEC_HEX_TAB[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};


/***********************************************************************
* 名称:GUI_Point(int x,int y,Tcolor color)
* 功能:读取指定点上的数据。
* 入口参数:x     x坐标值(0-127)
*           y     y坐标值(0-63)
* 出口参数:返回该点上的字节数据。
***********************************************************************/
void GUI_Point(uint8 x,uint8 y,Tcolor color)  

{
	uint8 k,dx,bak,bx,flaglow,m;
	uint8 bak0;
	uint8 bak1;
	uint8 hbyte,lbyte;
	hbyte=(x>>4)*2;
	lbyte=(x>>4)*2+1;
	bak0=gui_disp_buf[y][hbyte];      //bak0是高字节
	bak1=gui_disp_buf[y][lbyte];       // bak1是低字节
	bak=0x00;
	flaglow=1;
	y=y&0x3f;    //过滤数据
   
   
    if(y<32)   //分屏显示 上半屏
   	 
       {    
            dx=x>>4;       //dx=0
                        //x=1
  
   			 	 bx=x-(dx<<4);  //bx=1
   			 	 if(bx>7)    //低字节
   			 	 { flaglow=0;
   			 	   bx-=8;
   			 	   bak=bak1;
      			 }
   			 	 else bak=bak0;
   			 	 if(color) 
   				 bak |= DEC_HEX_TAB[bx&0x07]; 
   				 else  //写零清除
   				 bak &=~DEC_HEX_TAB[bx&0x07]; 
                 k=bak;
                 
                LCM128645ZK_cmd(0x36);  //扩充指令 绘图显打开 
                LCM128645ZK_cmd(y+0x80);    //行地址
                LCM128645ZK_cmd(dx+0x80);    //列地址 
                if(flaglow==1)           
                 { 
                   LCM128645ZK_data(k);
                   gui_disp_buf[y][hbyte]=k; 
                   LCM128645ZK_data(bak1);
                 }
                else
                 {  
                  LCM128645ZK_data(bak0);
                  LCM128645ZK_data(k);
                  gui_disp_buf[y][lbyte]=k; 
                 }
                 LCM128645ZK_cmd(0x30);
           
       }     
   	  
	else  
	   {      
	   		     dx=x>>4;       //dx=0
   			 	 bx=x-(dx<<4);
                 if(bx>7)    //低字节
   			 	 { 
   			 	   flaglow=0;
   			 	   bx-=8;
   			 	   bak=bak1;
      		     }
   			 	 else bak=bak0;
   			 	 
   				 if(color) 
   				 bak |= DEC_HEX_TAB[bx&0x07]; 
   				 else//写零清除
   				 bak &=~DEC_HEX_TAB[bx&0x07]; 
                 k=bak;
                 m=y;
		         y=y-32;
              
                LCM128645ZK_cmd(0x36);  //扩充指令 绘图显示
                LCM128645ZK_cmd(y+0x80);    //行地址
                LCM128645ZK_cmd(dx+0x88);    //列地址  
                if(flaglow==1)           
                {
                  LCM128645ZK_data(k);
                  LCM128645ZK_data(bak1);
                  gui_disp_buf[m][hbyte]=k; 
                }
                else
                { 
                 LCM128645ZK_data(bak0);
                 LCM128645ZK_data(k);
                 gui_disp_buf[m][lbyte]=k; 
                }
            
             
               LCM128645ZK_cmd(0x30);
            
       }     
	  
}

/****************************************************************************
* 名称: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)                        // 对x0、x1大小进行排列,以便画图
   {  bak = y1;
      y1 = y0;
      y0 = bak;
   }
   
   do
   { GUI_Point(x0, y0,color);     // 逐点显示,描出垂直线
      y0++;
   }while(y1>=y0);
  

}


/****************************************************************************
* 名称:GUI_Rectangle()
* 功能:画矩形。
* 入口参数: x0		矩形左上角的x坐标值
*           y0		矩形左上角的y坐标值
*           x1      矩形右下角的x坐标值
*           y1      矩形右下角的y坐标值
*           color	显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void  GUI_Rectangle(uint8 x0, uint8 y0, uint8 x1, uint8 y1,Tcolor color)
{  GUI_HLine(x0, y0, x1,color);
   GUI_HLine(x0, y1, x1,color);
   GUI_RLine(x0, y0, y1,color);
   GUI_RLine(x1, y0, y1,color);
}


/****************************************************************************
* 名称:GUI_RectangleFill()
* 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
* 入口参数: x0     矩形左上角的x坐标值
*           y0      矩形左上角的y坐标值
*           x1      矩形右下角的x坐标值
*           y1      矩形右下角的y坐标值
*           color   填充颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void  GUI_RectangleFill(uint8 x0, uint8 y0, uint8 x1, uint8 y1, Tcolor color)
{  uint8  i;

   /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
   if(x0>x1)                        // 若x0>x1,则x0与x1交换
   {  i = x0;
      x0 = x1;
      x1 = i;
   }
   if(y0>y1)                        // 若y0>y1,则y0与y1交换
   {  i = y0;
      y0 = y1;
      y1 = i;
   }
   
   /* 判断是否只是直线 */
   if(y0==y1) 
   {  GUI_HLine(x0, y0, x1, color);
      return;
   }
   if(x0==x1) 
   {  GUI_RLine(x0, y0, y1, color);
      return;
   }

   while(y0<=y1)        				
   {  GUI_HLine(x0, y0, x1, color); // 当前画水平线
      y0++;                 		// 下一行
   }
}



void Disp_Numbers (void)
{ 
  
   while(1)
   {
    Num1
    LCM128645ZK_Shortdelay(5000000);
    GUI_RectangleFill(110,20,120,50,1);
    Num8
   }  
  
  
}

/****************************************************************************
* 名称: Game_HTest(void)
* 
****************************************************************************/

void Game_HTest(void)
{
    uint8 i,j;
 for(j=0;j<60;j++)
 { 
     for(i=0;i<96;i++)
  { 
   GUI_RectangleFill(2+i, 2+j, 5+i, 3+j,1);
   LCM128645ZK_Shortdelay(100000);
   GUI_RectangleFill(2+i-1, 2+j-1, 5+i-1, 3+j,0);
  }
 }
}


/****************************************************************************
* 名称: Game_STest(void)
* 
****************************************************************************/

void Game_STest(void)
{
    uint8 i,j;
 for(j=0;j<96;j++)
 { 
     for(i=0;i<63;i++)
  { 
   GUI_RectangleFill(2, 2+i, 3, 5+i,1);
   LCM128645ZK_Shortdelay(100000);
   GUI_RectangleFill(2, 2+i-1, 3, 5+i-1,0);
  }
 }
}

/****************************************************************************
* 名称: Game_face(void)

****************************************************************************/


void Game_face(void)
{ 
  GUI_RLine(1, 0, 62,1);
  GUI_RLine(126, 0, 62,1);
  GUI_Rectangle(0, 0, 127, 63,1);
   GUI_HLine(0, 62, 126,1); 
   GUI_HLine(0, 61, 126,1); 
 
}

⌨️ 快捷键说明

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