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

📄 lpc21_lcd.c

📁 1、arm7芯片2148驱动大液晶 2、ym320240的液晶驱动 3、I2c通信at24c256 4、各种字符的显示
💻 C
📖 第 1 页 / 共 3 页
字号:
			Disp_buf[6] = num_buf[4];		//移位数据
			Disp_buf[7] = CHAR_m;			//显示"m "
		}
		else						 //毫欧
		{
			Account_num(4, Data1);
			Disp_buf[0] = 65;				//显示" "
			Disp_buf[1] = 65;				//显示" "
			Disp_buf[2] = num_buf[0];		//移位数据
			Disp_buf[3] = 64;				//显示". "
			Disp_buf[4] = num_buf[1];		//移位数据
			Disp_buf[5] = num_buf[2];		//移位数据
			Disp_buf[6] = num_buf[3];		//移位数据
			Disp_buf[7] = CHAR_m;			//显示"m "
		}
		Disp_buf[8] = 66;				//显示"电阻(欧) "	
	}
	else 
	{
		for(m = 0; m < 9; m++)
		{
			Disp_buf[m] = 65;				//显示" "
		}
	}
}

/*********************************************************************
** 函数名称: Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 计算实时电压
************************************************************/
void Account_R_V_A_RATE(Uchar8 Tpte, Uint32 Data1)
{
	Uchar8 m;
	if(Data1 != 0xffffffff)
	{
		if(Data1 > 0xee6b2800)
		{
			Disp_buf[0] = 68;		//显示">"	
			Disp_buf[1] = CHAR_4;
			for(m = 2; m < 8; m++)
			{
				Disp_buf[m] = CHAR_0;
			}
			Disp_buf[7] = 65;			//显示" "
		}													
		else if(Data1 > 999999999)						//千欧
		{
			Account_num(10, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = num_buf[1];		//移位数据
			Disp_buf[2] = num_buf[2];		//移位数据
			Disp_buf[3] = num_buf[3];		//移位数据
			Disp_buf[4] = 64;				//显示". "
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = 65;				//显示" "
		}
		else if(Data1 > 99999999)						//百欧
		{
			Account_num(9, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = num_buf[1];		//移位数据
			Disp_buf[2] = num_buf[2];		//移位数据
			Disp_buf[3] = 64;				//显示". "
			Disp_buf[4] = num_buf[3];		//移位数据
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = 65;				//显示" "
		}
		else if(Data1 > 9999999)					   //十欧
		{
			Account_num(8, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = num_buf[1];		//移位数据
			Disp_buf[2] = 64;				//显示". "
			Disp_buf[3] = num_buf[2];		//移位数据
			Disp_buf[4] = num_buf[3];		//移位数据
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = 65;				//显示" "
		}
		else if(Data1 > 999999)							  //欧
		{
			Account_num(7, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = 64;				//显示". "
			Disp_buf[2] = num_buf[1];		//移位数据
			Disp_buf[3] = num_buf[2];		//移位数据
			Disp_buf[4] = num_buf[3];		//移位数据
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = 65;				//显示" "
		}
		else if(Data1 > 99999)						   //百毫欧
		{
			Account_num(6, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = num_buf[1];		//移位数据
			Disp_buf[2] = num_buf[2];		//移位数据
			Disp_buf[3] = 64;				//显示". "
			Disp_buf[4] = num_buf[3];		//移位数据
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = CHAR_m;			//显示"m "
		}
		else if(Data1 > 9999)							//十毫欧
		{
			Account_num(5, Data1);
			Disp_buf[0] = num_buf[0];		//移位数据
			Disp_buf[1] = num_buf[1];		//移位数据
			Disp_buf[2] = 64;				//显示". "
			Disp_buf[3] = num_buf[2];		//移位数据
			Disp_buf[4] = num_buf[3];		//移位数据
			Disp_buf[5] = num_buf[4];		//移位数据
			Disp_buf[6] = CHAR_m;			//显示"m "
		}
		else						 //毫欧
		{
			Account_num(4, Data1);
			Disp_buf[0] = 65;				//显示" "
			Disp_buf[1] = num_buf[0];		//移位数据
			Disp_buf[2] = 64;				//显示". "
			Disp_buf[3] = num_buf[1];		//移位数据
			Disp_buf[4] = num_buf[2];		//移位数据
			Disp_buf[5] = num_buf[3];		//移位数据
			Disp_buf[6] = CHAR_m;			//显示"m "
		}
		if(Tpte == 0)		//表示电阻计算
		{
			Disp_buf[7] = 66;		//显示"电阻(欧) "	
		}
		else if(Tpte == 1)		//表示电压计算
		{
			Disp_buf[7] = CHAR_V;				//显示"电压 "
		}
		else if(Tpte == 2)		//表示电流计算
		{
			Disp_buf[7] = CHAR_A;				//显示"电压 "
		}
		else if(Tpte == 3)		//表示比率计算
		{
			Disp_buf[6] = 72;				//显示"% "
			Disp_buf[7] = 64;				//显示". "

			if(Data1 > 99999999)						//百欧
			{
				Account_num(9, Data1);
				Disp_buf[0] = 68;		//显示">"
				Disp_buf[1] = CHAR_9;		//移位数据
				Disp_buf[2] = CHAR_9;		//移位数据
				Disp_buf[3] = CHAR_9;		//移位数据
				Disp_buf[4] = CHAR_9;		//移位数据
				Disp_buf[5] = CHAR_9;		//移位数据
			}
			else if(Data1 > 9999999)					   //十欧
			{
				Account_num(8, Data1);
				Disp_buf[0] = 65;			//显示" "
				Disp_buf[1] = num_buf[0];		//移位数据
				Disp_buf[2] = num_buf[1];		//移位数据
				Disp_buf[3] = num_buf[2];		//移位数据
				Disp_buf[4] = num_buf[3];		//移位数据
				Disp_buf[5] = num_buf[4];		//移位数据
			}
			else if(Data1 > 999999)							  //欧
			{
				Account_num(7, Data1);
				Disp_buf[0] = num_buf[0];		//移位数据
				Disp_buf[1] = num_buf[1];		//移位数据
				Disp_buf[2] = num_buf[2];		//移位数据
				Disp_buf[3] = num_buf[3];		//移位数据
				Disp_buf[4] = 64;				//显示". "
				Disp_buf[5] = num_buf[4];		//移位数据
			}
		}	
	}
	else 
	{
		for(m = 0; m < 9; m++)
		{
			Disp_buf[m] = 65;				//显示" "
		}
	}
}		

	
/*********************************************************************
** 函数名称: Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 计算比列
************************************************************/
Uint32 Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
{
	Uint32 max, min, average;
	if(T_Data1 > T_Data2)
	{
		max = T_Data1;
		min = T_Data2;
	}
	else
	{
		max = T_Data2;
		min = T_Data1;
	}

	if(T_Data3 > max)
	{
		max = T_Data3;
	}
	else if(T_Data3 < min)
	{
		min = T_Data3;
	}
	average = (T_Data1 + T_Data2 +T_Data3) / 3;
	max = (max - min);
	max = (max * 100000) / average; 

	if(max > 100000)
	{
		Disp_buf[0] = 65;				//显示" "
		Disp_buf[1] = 68;		//显示">"	
		Disp_buf[2] = CHAR_1;
		Disp_buf[3] = CHAR_0;
		Disp_buf[4] = CHAR_0;
	}
	else if(max > 9999)
	{
		Account_num(5, max);
		Disp_buf[0] = num_buf[0];			//显示"0"
		Disp_buf[1] = num_buf[1];			//显示"0"
		Disp_buf[2] = 64;				//显示". "
		Disp_buf[3] = num_buf[2];			//显示"0"
		Disp_buf[4] = num_buf[3];			//显示"0"
	}
	else 
	{
		Account_num(4, max);
		Disp_buf[0] = num_buf[0];			//显示"0"
		Disp_buf[1] = 64;				//显示". "
		Disp_buf[2] = num_buf[1];			//显示"0"
		Disp_buf[3] = num_buf[2];			//显示"0"
		Disp_buf[4] = num_buf[3];			//显示"0"
	}
    return max;
}
	
/*********************************************************************
** 函数名称: Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 计算误差
************************************************************/
Uint32 Account_error(Uint32 T_Data1, Uint32 T_Data2)
{
	Uint32 max, min;
	if(T_Data1 > T_Data2)
	{
		max = T_Data1;
		min = T_Data2;
	}
	else
	{
		max = T_Data2;
		min = T_Data1;
	}
	max = max - min;
	max = (max * 1000000) / T_Data1; 
	return max;
}
	

/*********************************************************************
** 函数名称: void LCD_WR_string_16x16(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 在指定的位置中写16*8字符
************************************************************/
void LCD_WR_string_16x16(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
{
	Ushort16 j;
	Uchar8 m, temp_x, temp_row;
	Uchar8 *temp_font;
	temp_x = x;
	temp_row = ROW;
	
	temp_font = font;
	for(m = 0; m < unm; m++)
	{
		j= temp_row * y + temp_x;
		WR_Num16x16(type, j, temp_font);
		temp_x+= 2;		   				//字与字之间间隔8个点
		temp_font += 32;
	}
}
/*********************************************************************
** 函数名称: void LCD_WR_char_string_8x8(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 在指定的位置中写8*8字符
************************************************************/
void LCD_WR_string_8x8(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
{
	Ushort16 j;
	Uchar8 m, temp_row;
	temp_row = ROW;
	j= temp_row * y + x;
    
	for(m = 0; m < unm; m++)
	{
		WR_Num8x8(type, j, (Uchar8 *)&ASCII_NUM_8[*font][0]);
		font++;
		j++;
	}
}
/*********************************************************************
** 函数名称: void LCD_Write16_16(Ushort16 x, Uchar8 y, Uchar8 data) 
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	3、 24*24点阵中文写入
************************************************************/
void LCD_WR_Singer_24x24(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 num, Uchar8 *font) 
{
	Ushort16 j;
	Uchar8 temp_row, temp_x, m;
	Uchar8 *temp_font;
	temp_row = ROW;

	temp_font = font;
	temp_x = x;
	for(m = 0; m < num; m++)
	{
		j= temp_row * y + temp_x;
		WR_Num24x24(type, j, temp_font);
		temp_x+= 3;		   //字与字之间间隔8个点
		temp_font += 72;
	}
}



/*********************************************************************
** 函数名称: void LCD_WR_String20_40(Ushort16 x, Uchar8 y, Uchar8 data) 
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 40*40点阵中文写入函数字符串                       
************************************************************/
void LCD_WR_String_20x40(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 num, Uchar8 *font) 
{
	Uchar8 temp_x, m;
	Uchar8 *temp_font;
	Uchar8 temp_row;
	Ushort16 j;
	temp_row = ROW;

	temp_x = x;
	temp_font = font;
	for(m = 0; m < num; m++)
	{
		j= temp_row * y + temp_x;
		WR_Num20x40(type, j, temp_font);
		temp_x+= 4;		   //字与字之间间隔8个点
		temp_font += 120;
	}
}

/*********************************************************************
** 函数名称: void LCD_Write16_16(Ushort16 x, Uchar8 y, Uchar8 data) 
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 40*40点阵中文写入函数字符串                       
************************************************************/
void LCD_WR_String_40x40(Uchar8 type, Uchar8 x, Uchar8 y, Uchar8 num, Uchar8 *font) 
{
	Uchar8 temp_x, m;
	Uchar8 *temp_font;
	Uchar8 temp_row;
	Ushort16 j;
	temp_row = ROW;

	temp_x = x;
	temp_font = font;
	for(m = 0; m < num; m++)
	{
		j= temp_row * y + temp_x;
		WR_Num40x40(type, j, temp_font);
		temp_x+= 6;		   //字与字之间间隔8个点
		temp_font += 200;
	}
}
/*********************************************************************************************************
** 函数名称: void LCD_Write_Line(Ushort16 x_start, Ushort16 y_start, Ushort16 legth)
** 输 入: x坐标(<320),Y坐标(<240), 对头坐标
** 输 出: 
** 全局变量: ROW 
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 画直线. 长度为8的部数关系
************************************************************/
void LCD_Write_Line(Uchar8 x_start, Uchar8 y_start, Uchar8 legth)
{
    Ushort16 j;
	Uchar8 temp_row, p;
	temp_row = ROW;

	j= temp_row * y_start + x_start;
  	if((legth + x_start) > 40)				    //防止数据溢出
	{
		legth = legth - ((legth + x_start) - 40);
	}   	
	for(p = 0; p < legth; p++)
	{
		j= temp_row * y_start + x_start;
		LCD_WriteCMD(CSRDIR_DOWN);			   //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
		LCD_WriteCMD(CSRW);					//CSRW = 0x46 CSRW 代码
		LCD_WriteData(j%256);				//设置光标地址
	    LCD_WriteData(j/256);				//设置光标地址
		LCD_WriteCMD(MWRTTE);				//MWRTTE = 0x42 MWRITE 代码
		LCD_WriteData(0xff);				//写入合成数据
		x_start++;
	}
}
/*********************************************************************************************************
** 函数名称:void LCD_Write_ROW_Left(Ushort16 x_start, Ushort16 y_start, Ushort16 legth)
** 输 入: x坐标(<320),Y坐标(<240), 对头坐标
** 输 出: 
** 全局变量: ROW 
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
		1、 画左竖数
************************************************************/
void LCD_Write_ROW_Left(Uchar8 x_start, Uchar8 y_start, Uchar8 legth)

⌨️ 快捷键说明

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