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

📄 lcm.c

📁 ARM7,LPC2214下液晶19264驱动驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
*调用函数:无
*全局变量:
*输入:无
*返回:Data_from_Lcd
*设计者:潘江长                              日期:2006.1.11
*修改者:潘妙青                              日期:2008.2.23
*版本:
***********************************************************************************************************/
uint8 Rd_Data_LCD_Middle(void)
{
	
	uint8 Data_from_Lcd;
	volatile uint32  *ip;
	
	ip = ( uint32  *)Middle_Read_Com_ADDR;				//设置读状态字的指针值(中间)
	while(((*ip)&0x80)==0x80);							//当"忙"标志位为1时继续读端口的数据。(中间)
	ip = ( uint32  *)Middle_Read_Data_ADDR;	
	Data_from_Lcd=*ip;									//从lcd读数据到变量.Data_from_Lcd(中间)
	return(Data_from_Lcd);
}
/****************************R******************************************************************************
*函数名:Wr_Com_LCD_Right
*功能描述:向右边的lcd写入命令
*调用函数:无
*全局变量:lcd_tmp
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:                                    日期:
*版本:
***********************************************************************************************************/
void Wr_Com_LCD_Right(uint8  Com_to_LCD)
{
	
	volatile uint32  *ip;
	
	ip = ( uint32  *)Right_Read_Com_ADDR;			//设置读状态字的指针值(右边)
    while(((*ip)&0x80)==0x80);							//当"忙"标志位为1时继续读端口的数据。(右边)							
	ip = ( uint32  *)Right_Write_Com_ADDR;					
	*ip = Com_to_LCD;	
}
/**********************************************************************************************************
*函数名:Wr_Data_LCD_Right
*功能描述:向右边的lcd写入数据
*调用函数:无
*全局变量:lcd_tmp
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:                                    日期:
*版本:
***********************************************************************************************************/
void Wr_Data_LCD_Right(uint8  Data_to_Lcd)
{
	
	volatile uint32  *ip;
	
	ip = ( uint32  *)Right_Read_Com_ADDR;				//设置读状态字的指针值(右边)
	while(((*ip)&0x80)==0x80);								//当"忙"标志位为1时继续读端口的数据。(右边)
	ip = ( uint32  *)Right_Write_Data_ADDR;										
	*ip = Data_to_Lcd;										//发送数据到lcd.(右边)
}
/**********************************************************************************************************
*函数名:Rd_Data_LCM_Right
*功能描述:在右边的lcd读出数据
*调用函数:无
*全局变量:lcd_tmp
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:                                    日期:
*版本:
***********************************************************************************************************/
uint8 Rd_Data_LCD_Right(void)
{
	
	uint8 Data_from_Lcd;
	volatile uint32  *ip;
	
	ip = ( uint32  *)Right_Read_Com_ADDR;				//设置读状态字的指针值(右边)
	while(((*ip)&0x80)==0x80);								//当"忙"标志位为1时继续读端口的数据。(右边)
	ip = ( uint32  *)Right_Read_Data_ADDR;	
	Data_from_Lcd=*ip;											//从lcd读数据到变量.Data_from_Lcd(右边)
	return(Data_from_Lcd);
}
/**********************************************************************************************************
*函数名: LCD_Delay_1ms_unit()
*功能描述:用于lcd中需要延时的时候用
*调用函数:无
*全局变量:无
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:                                    日期:
*版本:
***********************************************************************************************************/
void LCD_Delay_1ms_unit(uint8 n)
 {
 	uint8 j;
	while(n--)
	{
		j=73;
		while(j--);
	}
 }
/**********************************************************************************************************
*函数名:lcdinit
*功能描述:对液晶初始化
*调用函数:无
*全局变量:无
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:                                    日期:
*版本:
***********************************************************************************************************/
void InitLCM19264D(void)
{
	uint8 i;												

	i=0xC0;					//设置第一行为起始行
	Wr_Com_LCD_Left(i);
	Wr_Com_LCD_Middle(i);
	Wr_Com_LCD_Right(i);

	i=0xB8;
	Wr_Com_LCD_Left(i);		//设置页面地址为第一页
	Wr_Com_LCD_Middle(i);
	Wr_Com_LCD_Right(i);

	i=0x40;
	Wr_Com_LCD_Left(i);		//设置列地址为第一列
	Wr_Com_LCD_Middle(i);
	Wr_Com_LCD_Right(i);

	i=0x3F;					//开显示开关
	Wr_Com_LCD_Left(i);
	Wr_Com_LCD_Middle(i);
	Wr_Com_LCD_Right(i);
}
/**********************************************************************************************************
*函数名:lcdclear
*功能描述:对液晶清屏
*调用函数:无
*全局变量:无
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:潘妙青                              日期:2008.2.23
*版本:
***********************************************************************************************************/
void ClearLCM19264D(void)
{
	uint8 i,j;										
	uint8 c;											//局部变量c用于存放命令字
	c=0;
	for(i=0;i<=7;i++)
	{	
		c=i|0xb8;												//得到对应的页面地址
		Wr_Com_LCD_Left(c);										//设置对应的页面地址(左)
		Wr_Com_LCD_Middle(c);									//设置对应的页面地址(中)
		Wr_Com_LCD_Right(c);									//设置对应的页面地址(右)
		
		Wr_Com_LCD_Left(0x40);									//设置对应的列地址(左)
		Wr_Com_LCD_Middle(0x40);								//设置对应的列地址(中)
		Wr_Com_LCD_Right(0x40);									//设置对应的列地址(右)
		
		for(j=0;j<=63;j++)										//写入数据0
		{
			Wr_Data_LCD_Left(0x00);
			Wr_Data_LCD_Middle(0x00);
			Wr_Data_LCD_Right(0x00);
		}
	}
}

void SetLCM19264D(void)
{
	uint8 i,j;										
	uint8 c;											//局部变量c用于存放命令字
	c=0;
	for(i=0;i<=7;i++)
	{	
		c=i|0xb8;												//得到对应的页面地址
		Wr_Com_LCD_Left(c);										//设置对应的页面地址(左)
		Wr_Com_LCD_Middle(c);									//设置对应的页面地址(中)
		Wr_Com_LCD_Right(c);									//设置对应的页面地址(右)
		
		Wr_Com_LCD_Left(0x40);									//设置对应的列地址(左)
		Wr_Com_LCD_Middle(0x40);								//设置对应的列地址(中)
		Wr_Com_LCD_Right(0x40);									//设置对应的列地址(右)
		
		for(j=0;j<=63;j++)										//写入数据0
		{
			Wr_Data_LCD_Left(0xFF);
			Wr_Data_LCD_Middle(0xFF);
			Wr_Data_LCD_Right(0xFF);
		}
	}
}
/**********************************************************************************************************
*函数名:wrzw16x16
*功能描述:写16x16中文字
*调用函数:无
*全局变量:无
*输入:无
*返回:无
*设计者:潘江长                              日期:2006.1.11
*修改者:潘妙青                              日期:2008.2.23
*版本:
***********************************************************************************************************/

void Wrzw16x16(uint8 x,uint8 y,char *z)	 		//x为列地址范围为0~11。y为行地址范围为0~3.
{
	uint8 i,j,k;
	uint8 x2,x3,y2;
	uint8 d;
	uint8 findflag;												//此位为在字库的搜索结果标志位,0为没有找到,1为找到
	findflag=0;
	x2=0;
	y2=0;
	d=0;
	x=x*16;
	y=y*2;
	x3=x;														//下面的循环体实现在字库中搜索对应的点阵
	k=0;
	while(k<ZWZKZS16X16)										//@@@@@@@@@@这里k不能超过字库的(总字数)@@@@@@@@@@@/ 									
	{
		if((((*z)*256)+*(z+1)) == zwzk[k].index[0]*256+zwzk[k].index[1])
		{	
			findflag=1;
			for(i=0;i<=1;i++)
			{
			
				x=x3;
				for(j=0;j<=15;j++)
				{
					if(x<64)
					{
					y2=(y+i)|0xb8;								  	//y2为写入到lcd的命令字,用来设置行号
					Wr_Com_LCD_Left(y2);
					x2=x|0x40;										//x2为写入到lcd的命令字,用来设置列号
					Wr_Com_LCD_Left(x2);
					d = zwzk[k].zwdot[16*!i+j];
					Wr_Data_LCD_Left(d);
					
					}

					if(x >= 64 && x < 128)
					{
					y2=(y+i)|0xb8;								  	//y2为写入到lcd的命令字,用来设置行号
					Wr_Com_LCD_Middle(y2);
					x2 = (x - 64)|0x40;										//x2为写入到lcd的命令字,用来设置列号
					Wr_Com_LCD_Middle(x2);
					d = zwzk[k].zwdot[16*!i+j];
					Wr_Data_LCD_Middle(d);	
					}

					if(x >= 128)
					{
					y2=(y+i)|0xb8;								  	//y2为写入到lcd的命令字,用来设置行号
					Wr_Com_LCD_Right(y2);

					x2=(x - 128)|0x40;
					Wr_Com_LCD_Right(x2);
					d=zwzk[k].zwdot[16*!i+j];
					Wr_Data_LCD_Right(d);
											
					}
					x++;

				}
			}
			
		}

	k++;
	}  
	if(findflag==0)
	{
																	//如果找不到这个字模则会显示黑框
		for(i=0;i<=1;i++)
		{
			
			x=x3;
			for(j=0;j<=15;j++)
			{
				if(x<64)
				{
				y2=(y+i)|0xb8;								 	 	//y2为写入到lcd的命令字,用来设置行号
				Wr_Com_LCD_Left(y2);
				x2=x|0x40;											//x2为写入到lcd的命令字,用来设置列号
				Wr_Com_LCD_Left(x2);
				Wr_Data_LCD_Left(0xff);
				
				}
	
				if(x >= 64 && x < 128)
				{
				y2 = (y+i)|0xb8;								 	 	//y2为写入到lcd的命令字,用来设置行号
				Wr_Com_LCD_Middle(y2);
				x2 = (x - 64) | 0x40;											//x2为写入到lcd的命令字,用来设置列号
				Wr_Com_LCD_Middle(x2);
				Wr_Data_LCD_Middle(0xff);
				
				}

⌨️ 快捷键说明

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