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

📄 t6963c.c

📁 51单片机游戏程序包括图纸
💻 C
📖 第 1 页 / 共 2 页
字号:
//************************************************************************
void image_addr_Pointer_Set(uchar x, uchar y)
{ 
    uint iPos;
	uint temp;
    iPos =y * 16 + x + grshome;
	temp=iPos;
	x=iPos>>8;
	y=temp&0x00ff;
    WRCommandTwo(y,x,0x24);
}

//**************************************************************************
//= 函数原型: void Point(uchar x,uchar y, bit Mode)
//= 功    能: 在指定坐标位置显示一个点
//= 参    数: 坐标,显示点或清除点				
//= 返 回 值:
//= 函数性质:私有函数
//= Mode 1:显示 0:清除该点
//**************************************************************************
void Point(uchar x,uchar y, bit Mode)
{
    uint Address;
	uint temp;
    uchar dat;
    Address=(uint)y*16 + (x>>3) + grshome;	  //地址转化
    dat=0xF0+7-x%8;        //产生位操作命令画点的数据
    if(Mode) dat=dat|0x08;
	temp=Address;
	x=Address>>8;
	y=temp&0x00ff;
	WRCommandTwo(y,x,0x24);  //设置该点所在单元地址
    WRCommand(dat);         // 利用位操作命令画点
}

//*****************************************************************************
//= 函数原型: void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
//= 功    能: 连续写入一个或多个字符
//= 参    数: 坐标,要显示的字符数组,显示的单个字符,要显示的字符个数				
//= 返 回 值:
//= 函数性质:私有函数
//当n=0一次性写入一个字符,否则一次性写入多个字符
//*****************************************************************************

void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
{
    uchar i;
  	char_addr_Pointer_Set(x,y);	//写入地址
	if(n==0)
	  WRCommandOne(dataa,0xc0);	  //一次写入数据
  	else
	  {
	    WRCommand(0xb0);//进入自动写
  		for(i=0;i<n;i++)
		  WRData(p[i]);	 
		  WRCommand(0xb2);   //退出自动写
	  }
}


//******************************************************************************
//= 函数原型: void hanzhi(uchar x,uchar y, uchar m,uchar n)
//= 功    能: 连续写入一个或多个汉字
//= 参    数: 坐标,要显示的第一个汉字的位置,连续显示汉字的个数。				
//= 返 回 值:
//= 函数性质:私有函数
//当n=1一次性写入一个字符,否则一次性写入多个字符
//*****************************************************************************

void hanzhi(uchar x,uchar y, uchar m,uchar n)
{
    uchar i;
    uchar CGRam;
	CGRam=0x80+4*m;	 //第m个字符
	for(i=0;i<n;i++)
	{
	  char_addr_Pointer_Set(x,y); //汉字左上角写入
	  WRCommandOne(CGRam,0xc0);	  //一次写入数据;
	  CGRam++;
	  y++;
	  char_addr_Pointer_Set(x,y); //汉字左下角写入
	  WRCommandOne(CGRam,0xc0);
	  CGRam++;
	  x++;
	  y--;
	  char_addr_Pointer_Set(x,y); //汉字右上角写入
	  WRCommandOne(CGRam,0xc0);
	  CGRam++;
	  y++;
	  char_addr_Pointer_Set(x,y); //汉字右下角写入
	  WRCommandOne(CGRam,0xc0);
	  CGRam++;
	  x++;
	  y--;
	  if(x==16)
	  {
	    x=0;		//写满一行,从第二行开始
		y++;
		y++;
	  }
	}
}

//******************************************************************************
//= 函数原型: void fill_CGRAM(uchar *p,uchar m,uinit n)
//= 功    能: 填充CGRAM数据
//= 参    数: 字符数组,写入第m个汉字,循环写入的汉字个数
//= 返 回 值:
//= 函数性质:私有函数
//*//**************************************************************************

void fill_CGRAM(uchar *p,uchar m,uint n)
{
  uchar xx;
  uchar yy;
  uint i;
  uint ADCGram;
  uint temp;
  ADCGram=0x1c00+32*m;	//确定CGRAM地址
  temp=ADCGram;
  xx=ADCGram>>8;
  yy=temp&0x00ff;
  WRCommandTwo(yy,xx,0x24);

  n=n*32;
  WRCommand(0xb0);
  for(i=0;i<n;i++)
	WRData(p[i]);
  WRCommand(0xb2);   //退出自动写
}

//*******************************************************************************
//= 函数原型: void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode)
//= 功    能: 画一条横线或一条竖线
//= 参    数: type=1为横线,否则为竖线,(x1,y1)为起始点,Long为长度,mode=1为显示				
//= 返 回 值:
//= 函数性质:公有函数
//*******************************************************************************  

void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode){
 uchar i;
if(type==1)
 {
   for(i=0;i<Long;i++)	 //画横线
	{ 
	   if(mode==1)
		  Point(x1+i,y1,1);
	   else  
		  Point(x1+i,y1,0);
	 }
	 return;
  }
  
else
 {
    for(i=0;i<Long;i++)		//画竖线
	{ 
	   if(mode==1)
		  Point(x1,y1+i,1);
	   else  
		  Point(x1,y1+i,0);
	}
	 return; 
  }
}

//*****************************************************************************
//= 函数原型: void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
//= 功    能: 填充区域(x1,y1) (x2,y2)
//= 参    数: (x1,y1)为起始点,(x2,y2)为终点  mode=1显示				
//= 返 回 值:
//= 函数性质:私有函数
//= 注    意:以点为单位
//*****************************************************************************  	 

void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
{
  char temp=x1;
  if(mode)   
   {
	 for(;y1<=y2;y1++)
	   for(x1=temp;x1<=x2;x1++)
	     Point(x1,y1,1);
   }
   else
   {
	 for(;y1<=y2;y1++)
	   for(x1=temp;x1<=x2;x1++)
	     Point(x1,y1,0);
   }
}

//**********************************************************************************
//= 函数原型: void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
//= 功    能: 在设定的区域连续写入多个字节,作图形显示用
//= 参    数: (x1,y1)为起始点,(x2,y2)为终点  *po为图形数组,mode=1显示 mode=0清除			
//= 返 回 值:
//= 函数性质:私有函数
//= 操作方法:当p=0,mode=1时,连续输入0xff,作反显用,当p=0,mode=0时,连续输入0x00,作 
//=            消除反显用,当p!=0时,作输入图像用,此时mode无效
//= 注    意:参数的数据范围
//**********************************************************************************  
void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
{
   uchar temp=x1;
   uint i=0;
   for(;y1<=y2;y1++)
   {
    x1=temp;	 
    image_addr_Pointer_Set(x1,y1);	//写入地址
	WRCommand(0xb0); //进入自动写
	for(;x1<=x2;x1++)
	{
	  if(p==0&&mode==1)
	  {
	     WRData(0xff);
	  }
	  else if(p==0&&mode==0)
	  {
	     WRData(0x00);
	  }
	  else 
	  {
	     WRData(p[i]);
	     i++;		 //下一个字节
	  }
	}
    WRCommand(0xb2);   //退出自动写 
    }
}

//******************************************************************************
//= 函数原型: void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
//= 功    能: 反显区域(x1,y1) (x2,y2)
//= 参    数: (x1,y1)为起始点,(x2,y2)为终点  mode=1反显				
//= 返 回 值:
//= 函数性质:私有函数
//= 注    意:以字节为单位
//******************************************************************************  	 
void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
{
   if(mode)
   {
     WRCommand(0x81);	 	//启用内部字符发生器,显示方式是文本与图形逻辑异或
  	 image(x1,y1,x2,y2,0,1);

	}
   else
    {
	  WRCommand(0x80);	 	//启用内部字符发生器,显示方式是文本与图形逻辑或
	  image(x1,y1,x2,y2,0,0);
	 }
}

//******************************************************************************
//= 函数原型: void Show_num(uchar x1,uchar y1,uchar num)
//= 功    能: 在设定的位置显示一个数字
//= 参    数: (x1,y1)为位置,num为数字			
//= 返 回 值:
//= 函数性质:公有函数
//= 注    意:以字节为单位
//*****************************************************************************  
void Show_num(uchar x1,uchar y1,uchar num)
{
   uchar number[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
   char_addr_Pointer_Set(x1,y1);
   WRCommandOne(number[num],0xc0);	  //一次写入数据
}

///////////////////////////初始化LCD////////////////////////////////////////////
void Init_LCD()
{
   Init_LCD_Graphic();
   ClrGraphic();
   fill_CGRAM(CCTable,0,22);	 //将汉字写入CGRAM
}

⌨️ 快捷键说明

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