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

📄 lcd_dis.c

📁 320x240彩色液晶Mz24-1基于430f169的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	Pos_Switch(&left,&top);						// 坐标变换
	Pos_Switch(&right,&bottom);					//坐标变换
	if(left>right)
	{
		uiTemp = left;
		left = right;
		right = uiTemp;
	}
	if(top>bottom)
	{
		uiTemp = top;
		top = bottom;
		bottom = uiTemp;
	}
	if(Mode==0)
	{
		Line(left,top,left,bottom);
		Line(left,top,right,top);
		Line(right,bottom,left+1,bottom);
		Line(right,bottom,right,top+1);
	}
	else
	{
		for(uiTemp=top;uiTemp<=bottom;uiTemp++)
		{
			Line_f(left,uiTemp,right);//,uiTemp);
		}
	}
}
//========================================================================
// 函数: void Writ_Dot(int x,int y,unsigned int Color)
// 描述: 填充以x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      Color  像素颜色 
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Writ_Dot(int x,int y,unsigned int Color)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(x,y,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(LCD_X_MAX - x,y,Color);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(x,LCD_Y_MAX - y,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y,Color);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(y,x,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(y,LCD_Y_MAX - x,Color);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - y,x,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x,Color);
	#endif
#endif	
}
//========================================================================
// 函数: unsigned int Get_Dot(int x,int y)
// 描述: 获取x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: Color  像素颜色 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int Get_Dot(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif	
}

//========================================================================
// 函数: void Clear_Dot(int x,int y)
// 描述: 清除以x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Clear_Dot(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif	
}
//========================================================================
// 函数: void Set_Dot_Addr(int x,int y)
// 描述: 设置当前需要操作的象素地址
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Set_Dot_Addr(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif		
}
//========================================================================
// 函数: void Pos_Switch(unsigned int * x,unsigned int * y)
// 描述: 将画面的坐标变换为实际LCD的坐标体系,以便于快速画圆形以及矩形
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Pos_Switch(unsigned int * x,unsigned int * y)
{
	*x = *x;
	*y = *y;
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		*x = LCD_X_MAX-*x;
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		*y = LCD_Y_MAX-*y;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		*x = LCD_X_MAX-*x;
		*y = LCD_Y_MAX-*y;
	#endif
#endif
#if	LCD_XY_Switch == 1
	unsigned int uiTemp;
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		uiTemp = *x;
		*x = y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		uiTemp = LCD_Y_MAX-*x;
		*x = *y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		uiTemp = *x;
		*x = LCD_X_MAX-*y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		uiTemp = LCD_Y_MAX - *x;
		*x = LCD_X_MAX-*y;
		*y = uiTemp;
	#endif
#endif
}
//========================================================================
// 函数: void W_Line_f(int s_x,int s_y,int e_x,int e_y,int Mode)
// 描述: 以s_x,s_y为起点,e_x,e_y为终点连续填充一条直线上的点.用于画矩形、圆
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 以实际的LCD坐标体系为准
// 版本:
//      2006/10/16      First version
//========================================================================
void Line_f(int s_x,int s_y,int e_x)//,int e_y)
{  
	unsigned int uiTemp;
	if(s_x>e_x) 
	{
		uiTemp = s_x;
		s_x = e_x;
		e_x = uiTemp;
	}
	Write_Dot_LCD(s_x++,s_y,BMP_Color);
	for(;s_x<=e_x;s_x++)
		Fill_Dot_LCD(BMP_Color);
}
//========================================================================
// 函数: void ClrScreen(void)
// 描述: 全屏以初始化屏幕色的颜色进行清屏
// 参数: 无      
// 返回: 无 
// 备注: 无
// 版本:
//      2007/01/16      First version
//========================================================================
void ClrScreen(void)
{  
	Set_Dot_Addr_LCD(0,0);
	LCD_Fill(LCD_INITIAL_COLOR);
}

//========================================================================
// 函数: void ClrScreen(void)
// 描述: 显示一个带pos_point位小数的最长不超过5位数的数字
// 参数: x,y 为显示起点坐标,P[]为汉字串位索引,d为显示的数据,n为显示的总的数据,point为小数位数      
// 返回: 无 
// 备注: 无
// 版本:
//      2008.07.25      First version
//========================================================================
void disp_numeric(unsigned int x , unsigned int  y, unsigned int d , unsigned char n , unsigned char point)
{
  char str[7],i; 
  unsigned int j=1;
  //str[5]=d%10+'0';
  //str[4]=(d/10)%10+'0';
 // str[3]=(d/100)%10+'0';
 // str[2]=(d/1000)%10+'0';
 // str[1]=d/10000+'0';
  for(i=0;i<n;i++)
  {
    str[n-1-i]=(d/j%10)+'0';
    j*=10;
  }
  str[n]=0;
  if(point!=0)
  {
    for(i=n;i>=n-point;i--)
    {
      str[i+1]=str[i];
    }
    str[i+1]='.';
  }
  PutString(x,y,str);
}

void fill_rect(unsigned char left , unsigned char top , unsigned char right , unsigned char bottom , unsigned int color)
{
  SetPaintMode(0,color);
  Rectangle(left, top, right,bottom, 1);
}

//========================================================================
// 函数: write_bank(int x,int y,int color)
// 描述: 写入一个当前字体大小的空格
// 参数: x  X轴坐标     y  Y轴坐标
//		 color 空格颜色
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void write_blank(int x,int y,int color)       
{
	int i,j;//,K;		//数据暂存
	j = 0;
	while((j ++) < Y_Witch)
	{
		if(y > Dis_Y_MAX) break;
		i = 0;
		while(i < X_Witch)
		{
			if((x+i) > Dis_X_MAX) break;
			Writ_Dot(x+i,y,color);
			i++;
		}
		y ++;
	}
}
void write_blanks(int x , int y , int color , unsigned char n)       
{
	int i;//,K;		//数据暂存
	int X;
        for(i=0;i<n;i++)
        {
          X=x+i*X_Witch;
          if(X>DIS_X_MAX)break;
          write_blank(X,y,color);
        }
}
//========================================================================
// 函数: void PutChar(int x,int y,unsigned int a)
// 描述: 写入一个标准字符
// 参数: x  X轴坐标     y  Y轴坐标
//		 a  要显示的字符在字库中的偏移量  
//               mode  1 :背景填上背景色,
//                     0 :背景不填色,这种情况如果文字位置原先有文字,则写上文字后,两文字将重叠,看不清
// 返回: 无
// 备注: ASCII字符可直接输入ASCII码即可
// 版本:
//      2006/10/15      First version
//========================================================================
void PutChar(int x , int y , unsigned int a , unsigned char mode )       
{
	int i,j;//,K;		//数据暂存
	unsigned char *p_data;
	unsigned char Temp;
	p_data = Char_TAB + a*Font_Wrod;	//要写字符的首地址
	j = 0;
	while((j ++) < Y_Witch)
	{
		if(y > Dis_Y_MAX) break;
		i = 0;
		while(i < X_Witch)
		{
			if((i&0x07)==0)
			{
				Temp = *(p_data ++);
			}
			if((x+i) > Dis_X_MAX) break;
			if((Temp & 0x80) > 0) {
                          Writ_Dot(x+i,y,Char_Color);
                        }
                        else if(mode)
                          
			Temp = Temp << 1;
			i++;
		}
		y ++;
	}
}

⌨️ 快捷键说明

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