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

📄 lpc21_lcd.c

📁 1、arm7芯片2138驱动大液晶 2、ym320240的液晶驱动 3、动态等待图标的显示 4、各种字符的显示。
💻 C
📖 第 1 页 / 共 3 页
字号:
** 功能描述: 
	1、 画右竖数
************************************************************/
void LCD_Write_ROW_Right(Ushort16 x_start, Ushort16 y_start, Ushort16 legth)
{
    Ushort16 temp_row, j, p, m;
	temp_row = ROW;

	if((legth + y_start) > 320)				  //防止数据溢出
	{
		legth = legth - ((legth + y_start) - 240);
	}

	for(m = 0; m < (legth / 8); m++)		//画右竖线
	{
		j= temp_row * ((m * 8) + y_start) + (x_start / 8);
		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(p = 0; p < 8; p++)
		{ 
			LCD_WriteData(0x01);				//写入合成数据
		}
		j++;
	}
	if((legth / 8) != 0)
	{
		j= temp_row * ((m * 8) + y_start) + (x_start / 8);
		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(p = 0; p < (legth % 8); p++)
		{ 
			LCD_WriteData(0x01);				//写入合成数据
		}
	}
}
/*********************************************************************************************************
** 函数名称:void LCD_Write_rectangle(Ushort16 x_start,Ushort16 y_start, Ushort16 x_end,Ushort16 y_end)
** 输 入: x坐标(<320),Y坐标(<240), 对头坐标
** 输 出: 
** 全局变量: ROW 
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 
	1、 画矩形
************************************************************/
void LCD_Write_rectangle(Ushort16 x_start,Ushort16 y_start, Ushort16 x_end,Ushort16 y_end)
{
    Ushort16 x_num, y_num;
	x_num = x_end - x_start;
	y_num = y_end - y_start;
	if(y_num != 0)			//画直线
	{
		LCD_Write_ROW_Left(x_start, y_start, y_num);		  //画左竖线
		LCD_Write_ROW_Right((((x_end / 8) - 1) * 8), y_start, y_num);	  //画右竖线
	}
	if(x_num != 0)						//画横线
	{
		LCD_Write_Line(x_start, y_start, x_num);	  //画上横线
		LCD_Write_Line(x_start, (y_end - 1), x_num);	  //画上横线
	}
}


/*********************************************************************************************************
** 函数名称: void LCD_CLR(void)
** 输 入: x坐标(<320),Y坐标(<240), 所在定值
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述:清屏
********************************************************************************************************/
void LCD_CLR(void)
{
	Ushort16 j;
	Uchar8 i;
	LCD_WriteCMD(CSRDIR_RIGHT);			   //CSRDIR_RIGHT = 0x4c 令规定了光标地址指针自动移动的方向
	LCD_WriteCMD(CSRW);			  		   //CSRW = 0x46 /令设置了光标地址CSR
	LCD_WriteData(0x00);				   //设置参数光标指针低8位
	LCD_WriteData(0x00);				   //设置参数光标指针高8位
	LCD_WriteCMD(MWRTTE);			  		//MWRTTE = 0x42 指令允许MPU连续地把显示数据写入显示区内,在使用指令之前要首先设置好光标地址和光标移动方向的参数
	for(j = 0; j < 2195; j++)    			//清64K的显示存储器*/
	{
		for(i = 0;i < 30; i++)     /*写入一行*/
      	{
        	LCD_WriteData(0x00);     /* 写入数据 */
      	}
	}
}


/*********************************************************************************************************
** 函数名称:void LCD_Init(void)
** 输 入: 无
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 液晶初始化
********************************************************************************************************/
void LCD_Init(void)
{
	Uchar8 p;
	PINSEL0 &= LCD_CS_A0;				 //引脚定义为I/O口
	PINSEL1 &= LCD_WR_RD;				 //引脚定义为I/O口
	PINSEL2 = 0x00000004;				 //P1口的P1[31:26]用作调试端口,P1[25:16]用作I/0口

	#ifdef	LPC2148	
		SCS = 0x03;			//选择快速I/0口	
		FIO0MASK = 0;		//不屏蔽P1口
		FIO1MASK = 0;		//不屏蔽P1口 
		FIO1DIR2 = 0xff;			//引脚为输出  
		FIO0DIR |= LCD_CTRL;	//设置LCD控制引脚为输出
		FIO1DIR |= LCD245_dir;	//控制245的引脚为输出脚 
		FIO0SET |= LCD_CTRL; 	//输出设置LCD控制引脚为输出
	#else
		IO1DIR |= 0x00ff0000;			//设置引脚为输出 
		IO0DIR |= LCD_CTRL;		  //设置LCD控制引脚为输出
		IO0SET |= LCD_CTRL;		  //输出设置LCD控制引脚为输出 
		IO1DIR |= LCD245_dir;

	#endif
	LCD_WriteCMD(SYSTEMSET);			//SYSTEMSET = 0x40 该指令是SID13305软件初始化指令
	for(p = 0; p < 8; p++)
	{
		LCD_WriteData(SYSTEMSET_code[p]);
	}
	LCD_WriteCMD(SCROLL);			//SCROLL = 0x44 设置了显示RAM区中各显示区的起始地址及所占有的显示行数
	for(p = 0; p < 10; p++)
	{
		LCD_WriteData(SCRTAB_code[p]);
	}
	LCD_WriteCMD(HDOTSET);			//HDOTSET = 0x5a 设置以点为单位的显示画面水平移动量,相当于一个字节内的卷动
	LCD_WriteData(0x00);	
	LCD_WriteCMD(OYLAY);				//OYLAY = 0x5b 令规定画面重叠显示的合成方式及显示一、三区的显示属性
//	LCD_WriteData(0x01);				//文本方式,或显示一三区
	LCD_WriteData(0x0d);				//图行方式,异或显示一三区
	LCD_WriteCMD(CSRW);			  		   //CSRW = 0x46 /令设置了光标地址CSR
	LCD_WriteData(0x00);				   //设置参数光标指针低8位
	LCD_WriteData(0x00);				   //设置参数光标指针高8位
	LCD_WriteCMD(DISP_ON);			//DISP_ON = 0x59 开(59H)/关(58H)显示
	LCD_WriteData(0x54);			//设置参数:显示一~四区开显示
	LCD_CLR();						 //清屏
}
/*********************************************************************************************************
** 函数名称:void WR_Date_16(Uchar8 *Date_time)
** 输 入: 无
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写日期
		typedef struct{					 //时间的结构体
						Ushort16 YE;
						Uchar8	MO;
						Uchar8 	DD;
						Uchar8	HH;
						Uchar8	MI;
						Uchar8	SS;
					}Str_Date;
********************************************************************************************************/
void WR_Date_16(Uchar8 *Date_time)
{
	Uchar8 temp_x, temp_y, m;
	Ushort16 temp_year; 
	Uchar8 temp_month, temp_day, temp_hour, temp_minute, temp_second; 
	Uchar8 temp_time[19];

	m = *Date_time;
	Date_time++;
	temp_year = *Date_time;
	temp_year = temp_year << 8;
	temp_year |= m;
	Date_time++;

	temp_month = *Date_time;
	Date_time++;

	temp_day = *Date_time;
	Date_time++;

	temp_hour = *Date_time;
	Date_time++;
	temp_minute = *Date_time;
	Date_time++;
	temp_second = *Date_time;

	temp_time[0] = temp_year / 1000;
	temp_year = temp_year % 1000;
	temp_time[1] = temp_year / 100;
	temp_year = temp_year % 100;
	temp_time[2] = temp_year / 10;
	temp_time[3] = temp_year % 10;
	temp_time[4] = 11;
	temp_time[5] = (temp_month / 10) & 0x01;	  //防止月份溢出
	temp_time[6] = temp_month % 10;
	temp_time[7] = 11;
	temp_time[8] = (temp_day / 10) & 0x03;		  //防止月份溢出
	temp_time[9] = temp_day % 10;
	temp_time[10] = 10;
	temp_time[11] = temp_hour / 10;
	temp_time[12] = temp_hour % 10;
	temp_time[13] = 12;
	temp_time[14] = temp_minute / 10;
	temp_time[15] = temp_minute % 10;
	temp_time[16] = 12;
	temp_time[17] = temp_second / 10;
	temp_time[18] = temp_second % 10;

	temp_x = Time16_addr_x;
	temp_y = Time16_addr_y;

	LCD_WR_char_string_16(temp_x, temp_y, 19, temp_time);
}

/*********************************************************************************************************
** 函数名称:void WR_Date_16(Uchar8 *Date_time)
** 输 入: 无
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写日期
		typedef struct{					 //时间的结构体
						Ushort16 YE;
						Uchar8	MO;
						Uchar8 	DD;
						Uchar8	HH;
						Uchar8	MI;
						Uchar8	SS;
					}Str_Date;
********************************************************************************************************/
void WR_Date_8(Uchar8 *Date_time)
{
	Uchar8 temp_x, temp_y, m;
	Ushort16 temp_year; 
	Uchar8 temp_month, temp_day, temp_hour, temp_minute, temp_second; 
	Uchar8 temp_time[19];

	m = *Date_time;
	Date_time++;
	temp_year = *Date_time;
	temp_year = temp_year << 8;
	temp_year |= m;
	Date_time++;

	temp_month = *Date_time;
	Date_time++;

	temp_day = *Date_time;
	Date_time++;

	temp_hour = *Date_time;
	Date_time++;
	temp_minute = *Date_time;
	Date_time++;
	temp_second = *Date_time;

	temp_time[0] = temp_year / 1000;
	temp_year = temp_year % 1000;
	temp_time[1] = temp_year / 100;
	temp_year = temp_year % 100;
	temp_time[2] = temp_year / 10;
	temp_time[3] = temp_year % 10;
	temp_time[4] = 11;
	temp_time[5] = (temp_month / 10) & 0x01;	  //防止月份溢出
	temp_time[6] = temp_month % 10;
	temp_time[7] = 11;
	temp_time[8] = (temp_day / 10) & 0x03;		  //防止月份溢出
	temp_time[9] = temp_day % 10;
	temp_time[10] = 10;
	temp_time[11] = temp_hour / 10;
	temp_time[12] = temp_hour % 10;
	temp_time[13] = 12;
	temp_time[14] = temp_minute / 10;
	temp_time[15] = temp_minute % 10;
	temp_time[16] = 12;
	temp_time[17] = temp_second / 10;
	temp_time[18] = temp_second % 10;

	temp_x = Time8_addr_x;
	temp_y = Time8_addr_y;

	LCD_WR_char_string_8(temp_x, temp_y, 19, temp_time);
}

/*********************************************************************************************************
** 函数名称:void WR_temperature_16(Ushort16 TData)
** 输 入: 无
** 输 出: 
** 全局变量: 无
** 调用模块: 无
** 作 者: 邱志城
** 日 期: 2008_08_21
** 功能描述: 写温度
********************************************************************************************************/
void WR_temperature_16(Ushort16 TData)
{
	Uchar8 temp_buf[8], m;
	Uchar8 temp_x, temp_y;
	for(m = 0; m < 5; m++)
	{
		temp_buf[(4 - m)] = TData % 10;
		if((TData == 0) && (m > 2))
		{
			temp_buf[(4 - m)] = 10;		//不显示
		}
		TData = TData / 10;
	}
	temp_buf[5] = temp_buf[4];
	temp_buf[4] = 13;  
	temp_buf[6] = 15;  
	temp_buf[7] = 16;
	  
	temp_x = Tem16_addr_x;
	temp_y = Tem16_addr_y;

	LCD_WR_char_string_16(temp_x, temp_y, 8, temp_buf);
}

void WR_temperature_8(Ushort16 TData)
{
	Uchar8 temp_buf[8], m;
	Uchar8 temp_x, temp_y;
	for(m = 0; m < 5; m++)
	{
		temp_buf[(4 - m)] = TData % 10;
		if((TData == 0) && (m > 2))
		{
			temp_buf[(4 - m)] = 10;		//不显示
		}
		TData = TData / 10;
	}
	temp_buf[5] = temp_buf[4];
	temp_buf[4] = 13;  
	temp_buf[6] = 15;  
	temp_buf[7] = 16;
	  
	temp_x = Tem8_addr_x;
	temp_y = Tem8_addr_y;

	LCD_WR_char_string_8(temp_x, temp_y, 8, temp_buf);
}



		
		




⌨️ 快捷键说明

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