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

📄 lcddriver.c

📁 lcd12864驱动程序:lcd控制器st7920
💻 C
📖 第 1 页 / 共 2 页
字号:
				{
					SendLcdDat(FigMode);//写入高8位数据
					SendLcdDat(FigMode);//写入低8位数据
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(0x0);
				}
	
		}
	if(Ghang==2)
		{	LCD_GdramAdd(32);
			LCD_GdramAdd(0x0);
		}
		for(i=0;i<=7;i++) 
		{
			SendLcdDat(FigMode);//写入高8位数据
			SendLcdDat(FigMode);//写入低8位数据
		}		
	}
else
	{		
	   for(j=0;j<=15;j++)
		{
			for(i=0;i<=7;i++) 
				{
					SendLcdDat(FigMode);//写入高8位数据
					SendLcdDat(FigMode);//写入低8位数据
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(0x8);
				}
		}
				
	}	
	LCD_Function2(0x11);
	LCD_Function2(0x01);

}
/*-----------------字反显----------------  */
/*=====形参中的Ghang2和Gteam2为人眼看到的行或列;FigMode为反显模式,1:执行反显模式;0:取消反显模式 */
void LCD_FgByte(unsigned int Ghang2,unsigned int Gteam2,unsigned int num2,unsigned int FigMode)
{
	
	unsigned int i,j,xteam,rlteam;
	
	LCD_Function(1); //选择扩充功能
	LCD_Function2(0x10);
	
	switch (Ghang2)
				{
					case 1: rlteam=Gteam2-1;
							LCD_GdramAdd(0x0);
							LCD_GdramAdd(rlteam);
							
							xteam=1;
							break;
					case 2: rlteam=Gteam2-1;
							LCD_GdramAdd(0x10);
							LCD_GdramAdd(rlteam);
							
							xteam=17;
							break;
					case 3:	rlteam=Gteam2+7;
							LCD_GdramAdd(0x0);
						   LCD_GdramAdd(rlteam);
						   rlteam=Gteam2+7;
							xteam=1;
							break;
					case 4: rlteam=Gteam2+7;
							LCD_GdramAdd(0x10);
						    LCD_GdramAdd(rlteam);
						   
							xteam=17;
							break;
					default:return;
				}
				
	if(FigMode==1)
		FigMode=0x0FF;
if((Ghang2==1)||(Ghang2==2))
	{		
	   
	    for(j=0;j<=15;j++)
		{
			for(i=0;i<num2;i++) 
				{
					SendLcdDat(FigMode);//写入高8位数据
					SendLcdDat(FigMode);//写入低8位数据
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(rlteam);
				}
	
		}
	
	}
else
	{		
	   for(j=0;j<=15;j++)
		{
			for(i=0;i<num2;i++) 
				{
					SendLcdDat(FigMode);//写入高8位数据
					SendLcdDat(FigMode);//写入低8位数据
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(rlteam);
				}
		}
				
	}	
	LCD_Function2(0x11);
	LCD_Function2(0x01);
}
void LCD_FgByte2(unsigned int Ghang2,unsigned int Gteam2,unsigned int num2,unsigned int FigMode)
{
	
	unsigned int i,j,xteam,rlteam,mm;
	
	LCD_Function(1); //选择扩充功能
	LCD_Function2(0x10);
	
	switch (Ghang2)
				{
					case 1: rlteam=(Gteam2-1)/2;	// 16 byte 1.2; 3.4
							LCD_GdramAdd(0x0);
							LCD_GdramAdd(rlteam);
							mm=Gteam2%2;
							xteam=1;
							break;
					case 2: rlteam=(Gteam2-1)/2;
							LCD_GdramAdd(0x10);
							LCD_GdramAdd(rlteam);
							mm=Gteam2%2;
							xteam=17;
							break;
					case 3:	rlteam=(Gteam2+15)/2;
							LCD_GdramAdd(0x0);
						   LCD_GdramAdd(rlteam);
						  
						   mm=Gteam2%2;
							xteam=1;
							break;
					case 4: rlteam=(Gteam2+15)/2;
							LCD_GdramAdd(0x10);
						    LCD_GdramAdd(rlteam);
						    mm=Gteam2%2;
							xteam=17;
							break;
					default:return;
				}
				
	if(FigMode==1)
		FigMode=0x0FF;
if((Ghang2==1)||(Ghang2==2))
	{		
	   
	    for(j=0;j<=15;j++)
		{
			for(i=0;i<num2;i++) 
				{
					if((mm==0)&&(i==0))
					{
						SendLcdDat(0x00);//写入高8位数据
						SendLcdDat(FigMode);//写入低8位数据
					}
					else
					{
						if((rlteam+(i+1)/2)>=8)	break;
						SendLcdDat(FigMode);//写入高8位数据
						if(i<(num2-1))
						{
							SendLcdDat(FigMode);///写入低8位数据
							i=i+1;
						}
						else
						{SendLcdDat(0x00);}//写入低8位数据
					}
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(rlteam);
				}
	
		}
	
	}
else
	{		
	   for(j=0;j<=15;j++)
		{
			for(i=0;i<num2;i++) 
				{
					if((mm==0)&&(i==0))
					{
						SendLcdDat(0x00);//写入高8位数据
						SendLcdDat(FigMode);//写入低8位数据
					}
					else
					{
						if((rlteam+(i+1)/2)>=16)	break;
						SendLcdDat(FigMode);//写入高8位数据
						if(i<(num2-1))
						{
							SendLcdDat(FigMode);
							i=i+1;
						}//写入高8位数据
						else
						{SendLcdDat(0x00);}//写入低8位数据
					}
				}
			if(j<=32)
				{
				  LCD_GdramAdd(j+xteam);
				  LCD_GdramAdd(rlteam);
				}
		}
				
	}	
	LCD_Function2(0x11);
	LCD_Function2(0x01);
}

void LCD_Error(void)
{	
}

void DisplayDD(void)
{
	
	Display(LCDvarb.str[0]+LCDvarb.LCD_Line1*2-2,0x80);
	Display(LCDvarb.str[1]+LCDvarb.LCD_Line2*2-2,0x90);
	Display(LCDvarb.str[2]+LCDvarb.LCD_Line3*2-2,0x88);
	Display(LCDvarb.str[3]+LCDvarb.LCD_Line4*2-2,0x98);

}


void LCD_Renovate(void)
{
	unsigned int i;	
	LCDvarb.lcd_Fault=0;
	if(LCDvarb.lcd_Gconter>=LCD_Gset)//=================
	{
		LCDvarb.lcd_Gconter=0;
		if(LCDvarb.LCD_Change==0)
		{
		  DisplayDD();
		  LCD_CMD(LCDvarb.C_Place);
		  LCD_Cursor(LCDvarb.C_Mode);		  
		}
		else
		{	
			LCDvarb.LCD_Change=0;
			DisplayDD();
			if(LCDvarb.F_Mode!=0)
			{
				
				if((LCDvarb.F_OldNum!=LCDvarb.F_Num)||(LCDvarb.F_OldPlace!=LCDvarb.F_Place))//判断新旧是否一致
				{	if(LCDvarb.F_OldNum!=0)
					{
						for(i=0;i<LCDvarb.F_OldNum;i++)
						{
							if((LCDvarb.F_OldPlace+i)<=4)
							LCD_FgRow((LCDvarb.F_OldPlace+i),0);
						}
						if(LCDvarb.F_Num!=0)
						{
							for(i=0;i<LCDvarb.F_Num;i++)
							{
								if((LCDvarb.F_Place+i)<=4)
								LCD_FgRow((LCDvarb.F_Place+i),1);
								
							}
							LCDvarb.F_OldMode=1;
						}
						else
						LCDvarb.F_OldMode=0;
					}
					else
					{
						if(LCDvarb.F_Num!=0)
						{
							for(i=0;i<LCDvarb.F_Num;i++)
							LCD_FgRow((LCDvarb.F_Place+i),1);
							LCDvarb.F_OldMode=1;
						}
						else
						LCDvarb.F_OldMode=0;
					}
					LCDvarb.F_OldNum=LCDvarb.F_Num;
					LCDvarb.F_OldPlace=LCDvarb.F_Place;
				}
	
			}
			else
			{
				LCD_Function(1);
				LCD_Function2(0x10);
				LCD_Function2(0x00);
			
			}
			
			LCD_CMD(LCDvarb.C_Place);
		  	LCD_Cursor(LCDvarb.C_Mode);	
		}
	}
}

void LCDtest(void)
{
	if(LCDvarb.lcd_Gconter>LCD_Gfult) 
	{
		LCDvarb.lcd_Fault=1;
		LCD_Error();
	}
	LCDvarb.lcd_Gconter=LCDvarb.lcd_Gconter+1;	
}

/*-----------Init Lcd---------------*/ 

void Lcd_Init(void)
{
	EALLOW;
	LCD_MuxCtrl=0x00;
	LCD_DirCtrl=0x0FFFF;/////////////////////////////////////////////////
	GpioMuxRegs.GPGMUX.all=GpioMuxRegs.GPGMUX.all&0x0FFCF;
    GpioMuxRegs.GPGDIR.all=GpioMuxRegs.GPGDIR.all|0x030;
	
	EDIS;
	LCD_Function(0);
	LcdDelay(60);
	LcdDelay(60);
	LCD_CMD(0x30);//8位,基本指令集
	LcdDelay(60);	//100us
	LcdDelay(60);
	LCD_CMD(0x30);
	LcdDelay(50);//37us
	LCD_CMD(0x0F);//B为显示使能
	LcdDelay(60);
	LcdDelay(60);//100us
	LCD_CMD(0x01);//清屏
	
	LcdDelay(5000);//10ms
	LcdDelay(5000);
	LcdDelay(5000);
	LCD_CMD(0x06);//光标右移
	LcdDelay(60);//
}

/*=======================与应用程序接口函数=====================================*/
void Lcd_LoadData(char *str8,char *str9)
{
	unsigned int i;
	for(i=0;i<17;i++)
	{
		*(str8+i)=*(str9+i);
	}
	
}
void LCD_InitY(void)//初始化函数
{
 	Lcd_Init();
	LCD_FgClear();
	LCDvarb.LCD_Line1=1;
	LCDvarb.LCD_Line2=1;
	LCDvarb.LCD_Line3=1;
	LCDvarb.LCD_Line4=1;
	
	LCDvarb.lcd_Fault=0;
	LCDvarb.lcd_Gconter=0;
	LCDvarb.lcd_Gset=LCD_Gset;
	
	LCDvarb.C_Mode=1;
	LCDvarb.C_Place=0x80;
	LCDvarb.F_Place=0;
	LCDvarb.F_Num=0;
	LCDvarb.F_OldPlace=0;
	LCDvarb.F_OldNum=0;
	LCDvarb.F_Mode=0;
	LCDvarb.F_OldMode=1;
	LCDvarb.LCD_Change=0;
Lcd_LoadData(LCDvarb.str[0],"你在他乡还好吗");	
Lcd_LoadData(LCDvarb.str[1],"是否有太多改变");
Lcd_LoadData(LCDvarb.str[2],"你那一往情深的");
Lcd_LoadData(LCDvarb.str[3],"笑容");	

	
}

void LCD_FlagSet(unsigned int  Mode)//改变显存标志函数
{
	LCDvarb.LCD_Change=Mode;	
}

void LCD_Convert(unsigned int Line,unsigned int num5,unsigned int mode5)
{
	LCDvarb.LCD_Change=1;
	LCDvarb.F_Place=Line;
	LCDvarb.F_Num=num5;
	LCDvarb.F_Mode=mode5;
}
void LCD_CursorSet(unsigned int CursorPlace,unsigned int CursorMode)//设置光标位置及状态
{
	LCDvarb.C_Mode=CursorMode;
	LCDvarb.C_Place=CursorPlace;
}
void LCD_CursorPinc(void)//光标位置增1
{
	unsigned int i,j;
	i=(LCDvarb.C_Place>=0x80)&&(LCDvarb.C_Place<0x87);
	j=(LCDvarb.C_Place>=0x88)&&(LCDvarb.C_Place<0x8F);
	i=i||j;
	j=(LCDvarb.C_Place>=0x90)&&(LCDvarb.C_Place<0x97);
	i=i||j;
	j=(LCDvarb.C_Place>=0x98)&&(LCDvarb.C_Place<0x9F);
	i=i||j;
	if(i)
	LCDvarb.C_Place=LCDvarb.C_Place+1;
	else
	{
		if(LCDvarb.C_Place==0x87) LCDvarb.C_Place=0x90;
		if(LCDvarb.C_Place==0x97) LCDvarb.C_Place=0x88;
		if(LCDvarb.C_Place==0x8F) LCDvarb.C_Place=0x98;
		if(LCDvarb.C_Place==0x9F) LCDvarb.C_Place=0x80;
	}
}
void LCD_LightE(unsigned int Modes)
{
	if(Modes==1)
	{LCD_BGI=0;}
	else
	{LCD_BGI=1;}
	
}









⌨️ 快捷键说明

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