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

📄 lpc21_lcd.c

📁 1、arm7芯片2138驱动大液晶 2、ym320240的液晶驱动 3、动态等待图标的显示 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);
}		

/*********************************************************************************************************
** 函数名称: Uchar8 RdIOData (void)
** 输 入: 无
** 输 出: ret 读了I/0口的数据
** 全局变量: 无
** 调用模块: 无
** 作 者:	邱志城
** 日 期:	200_08_21
** 功能描述: 读取I/0口的数据
********************************************************************************************************/
Uchar8 LCD_RdIOData (void)
{
	Uchar8 ret;
	Uint32 TEMP;
	IO1CLR |= LCD245_dir;		//设置245为B-A方向
	IO1CLR |= LCD_FOOT;
	IO1SET |= LCD245_dir;		//设置245为A-B方向
	IO1DIR = IO1DIR & 0xff00ffff;			//设置引脚为输入
	LCD_RE_DATA_START();
	delay_us(10);
	TEMP = IO1PIN;
	H_LCD_RE();
	IO0SET |= LCD_CS;
	L_LCD_RE();
	IO1DIR |= 0x00FF0000;			//设置引脚为输出
	IO1CLR |= LCD245_dir;		//设置245为B-A方向
	TEMP = TEMP >> 16;
	ret	= TEMP & 0x000000ff;
	return(ret); 
}

/*********************************************************************************************************
** 函数名称: Uchar8 RdIOData (void)
** 输 入: 无
** 输 出: ret 读了I/0口的数据
** 全局变量: 无
** 调用模块: 无
** 作 者:	邱志城
** 日 期:	200_08_21
** 功能描述: 读取I/0口的数据
********************************************************************************************************/
//8080时序
void LCD_Busy(void)
{
	Uchar8 ret;
	Uint32 TEMP;
	do
	{
		ret = 0x00;
		IO1CLR |= LCD245_dir;		//设置245为B-A方向
		IO1CLR |= LCD_FOOT;
		IO1SET |= LCD245_dir;		//设置245为A-B方向
		IO1DIR = IO1DIR & 0xff00ffff;			//设置引脚为输入
		LCD_RE_BUZY_START();
		delay_us(10);
		TEMP = IO1PIN;
		H_LCD_RE();
		IO0SET |= LCD_CS;
		L_LCD_RE();
		IO1DIR |= 0x00FF0000;			//设置引脚为输出
		IO1CLR |= LCD245_dir;		//设置245为B-A方向
		TEMP = TEMP >> 16;
		ret	= TEMP & 0x000000ff;
		if(ret == 0xff)
		{
			ret = 0x00;
		}
		ret = ret & 0x40;
	}
	while(ret !=0x40);
}

/*********************************************************************************************************
** 函数名称: 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 LCD_Write16_16(Ushort16 x, Uchar8 y, Uchar8 data) 
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 在文本方式下显示汉字, 首先要建立汉字CGRAM,要定义汉字代码
	2、 在文本方式下写汉字需要写入4 个代码以组成一个汉字        
	3、 16*16点阵中文写入函数 CCW1_PR 
	4、汉字写入子程序(文本方式)                           
************************************************************/
void LCD_WAIT_16(Uchar8 x, Uchar8 y) 
{
	Ushort16 i,j;
	Uchar8 m, temp_row, n;
	temp_row = ROW;
	j= temp_row * y + x;
	n = 0;
	for( ; ;)
	{
			n = n % 4;
			j= temp_row * y + x;
			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_WriteCMD(MWRTTE);				//MWRTTE = 0x42 MWRITE 代码
				for(i = 0; i < 16; i++)
				{
					LCD_WriteData(ASCII_BUZY_16[n][ (m * 16) + i]);			//写入汉字代码
				}
				j++;
			}
			LCD_WriteCMD(DISP_ON);			//DISP_ON = 0x59 开(59H)/关(58H)显示
			LCD_WriteData(0x54);			//设置参数:显示一~四区开显示
			delay_ms(2500);
			n++;
	}
}

void LCD_WAIT_48(Uchar8 x, Uchar8 y) 
{
	Ushort16 i,j;
	Uchar8 m, temp_row, n, p;
	temp_row = ROW;
	j= temp_row * y + x;
	n = 0;
	for( ; ;)
	{
			n = n % 4;
			j= temp_row * y + x;
			for(p = 0; p < 6; p++)
			{
				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 < 48; i++)
				{
					LCD_WriteData(ASCII_BUZY_48[n][(p * 48) + i]);			//写入汉字代码
				}
				j++;
			}
			LCD_WriteCMD(DISP_ON);			//DISP_ON = 0x59 开(59H)/关(58H)显示
			LCD_WriteData(0x54);			//设置参数:显示一~四区开显示
			delay_ms(10000);
			n++;

			for(m = 0; m < 3; m++)
			{
				j= temp_row * y + x;
				for(p = 0; p < 6; p++)
				{
					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 < 48; i++)
					{
						LCD_WriteData(ASCII_BUZY_48[n][(p * 48) + i]);			//写入汉字代码
					}
					j++;
				}
				LCD_WriteCMD(DISP_ON);			//DISP_ON = 0x59 开(59H)/关(58H)显示
				LCD_WriteData(0x54);			//设置参数:显示一~四区开显示
				delay_ms(2000);
				n++;
			}
	}
}

/*********************************************************************
** 函数名称: void LCD_Write16_16(Ushort16 x, Uchar8 y, Uchar8 data) 
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	3、 16*16点阵中文写入函数 CCW1_PR 
	4、汉字写入子程序(文本方式)                           
************************************************************/

void LCD_WR_char16(Uchar8 x, Uchar8 y) 
{
	Ushort16 i,j;
	Uchar8 m, temp_x, temp_y, temp_row;
	temp_x = x;
	temp_y = y;
	temp_row = ROW;
	j= temp_row * temp_y + temp_x;
	for(m = 0; m < 28; 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 < 16; i++)
		{
			LCD_WriteData(ASCII_Big_Char_16[m][i]);			//写入汉字代码
		}
		j++;
	}
/*
	temp_y += 16;
	j= temp_row * temp_y + temp_x;
	for(m = 0; m < 28; 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 < 16; i++)
		{
			LCD_WriteData(ASCII_Small_Char[(m)][i]);			//写入汉字代码
		}
		j++;
	}
	temp_y += 16;
	j= temp_row * temp_y + temp_x;
	for(m = 0; m < 34; 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 < 16; i++)
		{
			LCD_WriteData(ASCII_SIGN[m][i]);			//写入汉字代码
		}
		j++;
	}
*/
}


void LCD_WR_char_string_16(Uchar8 x, Uchar8 y, Uchar8 unm, Uchar8 *font)
{
	Ushort16 i,j;
	Uchar8 m, temp_x, temp_y, temp_row;
	temp_x = x;
	temp_y = y;
	temp_row = ROW;
	j= temp_row * temp_y + temp_x;
	for(m = 0; m < unm; m++)
	{
		LCD_WriteCMD(CSRDIR_DOWN);			   //CSRDIR_DOWN = 0x4F 令规定了光标地址指针自动移动的方向

⌨️ 快捷键说明

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