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

📄 lpc21_lcd.c

📁 1、arm7芯片2148驱动大液晶 2、ym320240的液晶驱动 3、I2c通信at24c256 4、各种字符的显示
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "LCD.H"
#include "char_16.h"


/*
//--------------240*128点阵液晶 的SYSTEM SET 参数 -----------------------------
const Uchar8 SYSTEMSET_code[8]={0x30,0x87,0x07,0x27,0x2c,0xf0,0x30,0x00};
const Uchar8 SCRTAB_code[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
*/
//--------------320*240点阵液晶 的SYSTEM SET 参数 -----------------------------
//const Uchar8 SYSTEMSET_code[8] = {0x38, 0x87, 0x07, 0x27, 0x42, 0xf0, 0x30, 0x00}; //P1-P8参数
//const Uchar8 SCRTAB_code[10] = {0x00, 0x00, 0xf0, 0x00, 0x40, 0xf0, 0x00, 0x80, 0x00, 0x00};  // P1-P10参数
const Uchar8 SYSTEMSET_code[8] = {0x32, 0x87, 0x07, 0x27, 0x42, 0xef, 0x28, 0x00}; //P1-P8参数
const Uchar8 SCRTAB_code[10] = {0x00, 0x00, 0xef, 0x00, 0x40, 0xef, 0x00, 0x80, 0x00, 0x00};  // P1-P10参数

/* 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Support tel:0571-85121742") */
//unsigned char CTAB1[16]={0x70,0x88,0x88,0x88,0xf8,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char CTAB1[8]={0x70,0x88,0x88,0x88,0xf8,0x88,0x88,0x00};


/******************************************************************************************************************
* 函数名称:LCM12864_Delay()
* 功    能:软件延时函数。用于LCM12864显示输出时序控制。
* 入口参数:无
* 出口参数:无
*******************************************************************************************************************/
void delay_us(Ushort16 time)
{     
	do
	{
		time--;
	}	
	while (time>1);
}

/******************************************************************************************************************
* 函数名称:LCM12864_Delay()
* 功    能:软件延时函数。用于LCM12864显示输出时序控制。
* 入口参数:无
* 出口参数:无
*******************************************************************************************************************/
void delay_ms(Ushort16 time)
{     
	Uint32 TEMP;
	do
	{
		time--;
		for(TEMP = 0; TEMP < 1000; TEMP++)
		{
			;
		}
	}	
	while (time>1);
}		
/*********************************************************************************************************
** 函数名称: void LCD_WriteCMD(Uchar8 command)
** 输 入: 命令command
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写命令 
********************************************************************************************************/
void InputData (Uchar8 dat)
{

	Uint32 temp;
	temp = dat;
	temp = temp << 16;
	temp = temp | (IO1PIN & 0xff00ffff); 
	IO1PIN = temp; 
}	
/*********************************************************************************************************
** 函数名称: void LCD_WriteCMD(Uchar8 command)
** 输 入: 命令command
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写命令 
*******************************************************************************************************/

void LCD_WriteCMD(Uchar8 command) 
{
//	IO1CLR |= LCD245_dir;		//设置245为B-A方向
	LCD_COM_START();
	InputData(command);
	H_LCD_WR();				//LCD进入写的状态
	H_LCD_CS();
}

/*********************************************************************************************************
** 函数名称: void LCD_WritEDAta(Uchar8 dat)
** 输 入: 数据dat
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 向LCD写数据
********************************************************************************************************/
//8080时序
void LCD_WriteData(Uchar8 dat) 
{
//	IO1CLR |= LCD245_dir;		//设置245为B-A方向 
	LCD_DATA_START();
	InputData(dat);
	H_LCD_WR();				//LCD进入写的状态
	H_LCD_CS();
}


/*********************************************************************************************************
** 函数名称: void WR_Num8x8(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num8x8(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, n;
	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 代码
	for(i = 0; i < 8; i++)
	{
		n = *T_data;
		if(type != 0) n = ~n; 
		LCD_WriteData(n);			//写入汉字代码
		T_data++;
	}
}

/*********************************************************************************************************
** 函数名称: void WR_Num16x8(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num16x8(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, n;
	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 代码
	for(i = 0; i < 16; i++)
	{
		n = *T_data;
		if(type != 0) n = ~n; 
		LCD_WriteData(n);			//写入汉字代码
		T_data++;
	}
}

/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num16x16(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, m, n;

	for(m = 0; m < 2; m++)
	{
		LCD_WriteCMD(CSRDIR_DOWN);			   //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向
		LCD_WriteCMD(CSRW);					//CSRW = 0x46 CSRW 代码
//		LCD_WriteData(j&256);				//设置光标地址
		LCD_WriteData(j%256);				//设置光标地址
	    LCD_WriteData(j/256);				//设置光标地址
		LCD_WriteCMD(MWRTTE);				//MWRTTE = 0x42 MWRITE 代码
		for(i = 0; i < 16; i++)
		{
			n = *T_data;
			if(type != 0) n = ~n; 
			LCD_WriteData(n);			//写入汉字代码
			T_data++;
		}
		j++;
	}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num24x24(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, m, n;
	for(m = 0; m < 3; m++)
	{
		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 代码
		for(i = 0; i < 24; i++)
		{
			n = *T_data;
			if(type != 0) n = ~n; 
			LCD_WriteData(n);			//写入汉字代码
			T_data++;
		}
		j++;
	}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num20x40(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, m, n;
	for(m = 0; m < 3; m++)
	{
		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 代码
		for(i = 0; i < 40; i++)
		{
			n = *T_data;
			if(type != 0) n = ~n; 
			LCD_WriteData(n);			//写入汉字代码
			T_data++;
		}
		j++;
	}
}
/*********************************************************************************************************
** 函数名称: void WR_Num16x16(Ushort16 j, Uchar8 *T_data)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:写8*8的字符
********************************************************************************************************/
void WR_Num40x40(Uchar8 type, Ushort16 j, Uchar8 *T_data)
{
	Uchar8 i, m, n;
	for(m = 0; m < 5; m++)
	{
		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 代码
		for(i = 0; i < 40; i++)
		{
			n = *T_data;
			if(type != 0) n = ~n; 
			LCD_WriteData(n);			//写入汉字代码
			T_data++;
		}
		j++;
	}
}
/*********************************************************************
** 函数名称: void LCD_WAIT_16x16(Uchar8 x, Uchar8 y) 
** 输 入: x坐标(<320),Y坐标(<240),
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	显示一个等待的图标                      
************************************************************/
void LCD_WAIT_16x16(Uchar8 x, Uchar8 y) 
{
	Ushort16 j;
	Uchar8 temp_row, n;
	temp_row = ROW;

	n = 0;
	for( ; ;)
	{
			n = n % 4;
			j= temp_row * y + x;
			WR_Num16x16(0, j, (Uchar8 *)&ASCII_BUZY_16[n][0]);
			delay_ms(3000);
			n++;
	}
}

/*********************************************************************
** 函数名称: void LCD_WR_string_16x8(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 在指定的位置中写16*8字符
************************************************************/
void LCD_WR_string_16x8(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_Num16x8(type, j, (Uchar8 *)&ASCII_NUM_16[*font][0]);
		font++;
		j++;
	}
}

/*********************************************************************
** 函数名称: void LCD_WR_char_string_16x8(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 在指定的位置中写16*8字符
************************************************************/
void Account_num(Uchar8 num, Uint32 font)
{
	Uchar8 m;
	Uint32 pp;

	pp = 10;
	for(m = 1; m < num; m++)
	{
		pp = pp * 10;
	}		

	if(num < 10)
	{
		font = font % pp;
	}
	for(m = 0; m < num; m++)
	{
		num_buf[num - m - 1] = font % 10;
		font = font / 10;
	}
}

/*********************************************************************
** 函数名称: Account_rate(Uint32 T_Data1, Uint32 T_Data2, Uint32 T_Data3)
** 输 入: x坐标(<320),Y坐标(<240), 数据长度, 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 计算比列
************************************************************/
void Account_resistance(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[5] = 64;			//显示"."
			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] = num_buf[5];		//移位数据
			Disp_buf[7] = 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] = num_buf[5];		//移位数据
			Disp_buf[7] = 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] = num_buf[5];		//移位数据
			Disp_buf[7] = 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] = num_buf[5];		//移位数据
			Disp_buf[7] = 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] = num_buf[5];		//移位数据
			Disp_buf[7] = CHAR_m;			//显示"m "
		}
		else if(Data1 > 9999)							//十毫欧
		{
			Account_num(5, Data1);
			Disp_buf[0] = 65;				//显示" "
			Disp_buf[1] = num_buf[0];		//移位数据
			Disp_buf[2] = num_buf[1];		//移位数据
			Disp_buf[3] = 64;				//显示". "
			Disp_buf[4] = num_buf[2];		//移位数据
			Disp_buf[5] = num_buf[3];		//移位数据

⌨️ 快捷键说明

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