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

📄 lcd.c

📁 12232的液晶显示程序,是胖胖工作室写的一个范例.我就是用这个程序了解LCD的编程了.相当不错.替胖胖工作室贡献给大家了.
💻 C
📖 第 1 页 / 共 2 页
字号:
	}
	else
	{
		LCD_Write_Set(yPos + i,0);		//Page_LCD[i] i=0 first page i=7 seventh page
	//	LCD_Write_Set((xPos>>4)&0x0F|0x10,0);	//set col address msb
		LCD_Write_Set(xPos,0);				//set col address lsb
	}
}

/*--------------------------------------------------------------
//清除一行子程序
------------------------------------------------------------*/
void Clear_H_LCD(unsigned char H)
{
	unsigned char i,j;
	Set_xyPos_LCD(0, H << 1 );				//set col address lsb
	for( i = 0;i < 2;i++ )
	{
		for( j = 0;j < 61;j++ )
			LCD_Write_Data( 0x55,0 );
		Set_xyPos_LCD(0, (H << 1) + 1);		//set col address lsb
	}
	Set_xyPos_LCD(61, H << 1 );				//set col address lsb
	for( i = 0;i < 2;i++ )
	{
		for( j = 0;j < 61;j++ )
			LCD_Write_Data( 0x55,1 );
		Set_xyPos_LCD(61, (H << 1) + 1);	//set col address lsb
	}
}


/*---------------------------------------------------------------------------------
//延时1MS子程序
---------------------------------------------------------------------------------*/
void Delay_xMs(unsigned int xMs)
{
	unsigned int i,j;
	for(i=0;i<xMs;i++)
	{
		for(j=0;j<500;j++)
		;
	}
}

/*---------------------------------------------------------------------------------
//在X,Y处显示一个16*8的西文sData (0---d)
---------------------------------------------------------------------------------*/
void Show_XW_LCD(unsigned char xPos,unsigned char yPos,unsigned char sData)	
{
	bit F;
	unsigned int nTmp;
	unsigned char j,x,y;
	x = xPos;
	y = yPos;
	nTmp = sData * 16;
	for ( j = 0;j < 16;j+=2 )
	{
		Set_xyPos_LCD(x,y);
		F = 0;
		if ( x > 60 )
			F = 1;
		LCD_Write_Data(Large_DianZen[nTmp + j],F);
		x++;
	}

	y++;
	x = xPos;
	for ( j = 1;j < 16;j+=2 )
	{
		Set_xyPos_LCD(x,y);
		F = 0;
		if ( x > 60 )
			F = 1;
		LCD_Write_Data(Large_DianZen[nTmp + j],F);
		x++;
	}
}

/*---------------------------------------------------------------------------------
//在X,Y处显示一个16*16的汉字
---------------------------------------------------------------------------------*/
void Show_HZ_LCD ( unsigned char xPos, unsigned char yPos,unsigned char sData )
{
	bit F;
	unsigned int nTmp;
	unsigned char j,x,y;
	x = xPos;
	y = yPos;
	nTmp = sData * 32;
	for ( j = 0;j < 32;j+=2 )
	{
		Set_xyPos_LCD(x,y);
		F = 0;
		if ( x > 60 )
			F = 1;
		LCD_Write_Data(HanZi[nTmp + j],F);
		x++;
	}

	y++;
	x = xPos;
	for ( j = 1;j < 32;j+=2 )
	{
		Set_xyPos_LCD(x,y);
		F = 0;
		if ( x > 60 )
			F = 1;
		LCD_Write_Data(HanZi[nTmp + j],F);
		x++;
	}
}

/*-------------------------------------------------------------------------------------
预先定义内容表为LCD_Show_Tab[]
汉字表为HanZi[]
大西文表为Large_DianZen[]
与90H的分界碰到90H则是汉字,否则是西文
--------------------------------------------------------------------------------------*/
void Print_LCD (  unsigned char xPos, unsigned char yPos,int nSentenceID )
{
	unsigned char i,j=0;
	unsigned char Temp;							//存放要显示的数据

	for(i=0;i<16;i++)
	{
		Temp=LCD_Show_Tab[nSentenceID*16+i];  	//128 16个西文
		if(Temp==0x90) 							//汉字
		{
			i++;
			Temp=LCD_Show_Tab[nSentenceID*16+i];
			Show_HZ_LCD(xPos+j,yPos,Temp);  	//write 1个汉字子程序
			j+=16;
		}
		else									//西文
		{
			Temp= LCD_Show_Tab[nSentenceID*16+i];
			Show_XW_LCD(xPos+j,yPos,Temp);  	//write 1个西文子程序
			j+=8;
		}
	}
}


/*-----------------------------------------------
LCD初始化子程序:
------------------------------------------------*/
void LCD_Init( void )
{
	LCD_ENA1 = 0;
	LCD_ENA2 = 0;
//	LCD_Write_Set( 0x00,0 );
	LCD_Write_Set( 0xE2,0 );
//	LCD_Write_Set( 0xAE,0 );
	LCD_Write_Set( 0xC0,0 );
	LCD_Write_Set( 0xB8,0 );
	LCD_Write_Set( 0xA0,0 );
	LCD_Write_Set( 0xA4,0 );
	LCD_Write_Set( 0xA9,0 );
	LCD_Write_Set( 0xEE,0 );
	
	LCD_Write_Set( 0xE2,1);
//	LCD_Write_Set( 0xAE,1 );
	LCD_Write_Set( 0xC0,1 );
	LCD_Write_Set( 0xB8,1 );
	LCD_Write_Set( 0xA0,1 );
	LCD_Write_Set( 0xA4,1 );
	LCD_Write_Set( 0xA9,1 );
	LCD_Write_Set( 0xEE,1 );
	LCD_Write_Set( 0xAF,0 );
	LCD_Write_Set( 0xAF,1 );
	Delay_xMs( 10 );
}

/*----------------------------------------------
主程序
功能:循环显示"欢迎使用单片机开发板祝你早日
	 成为单片机高手沈氏工作室贺"
------------------------------------------------*/
void main()
{
	unsigned char i;
    LCD_Init();
	Clear_H_LCD( 0 );			//清除第一行
	Clear_H_LCD( 1 );			//清除第二行
   	while(1)
	{
		for( i = 0;i < 5 ;i+=2 )
		{
			Print_LCD ( 0,0,i );//在第一行上显示汉字
			Print_LCD ( 0,2,i+1 );//在第二行上显示汉字
       		Delay_xMs(1000);         //延时一段时间
		}
	}
}

⌨️ 快捷键说明

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