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

📄 lcd_grf.c

📁 关键字:LCD液晶显示屏 串行 并行 ST7920 RT12864
💻 C
字号:
/***********************************************************************************************
** 文件名称:_LCD_C
** 功能说明:ST7920驱动LCD显示软件包
** 使用说明:软件包用到LPC213x的二个引脚,默认为P1.24,P1.25,如需修改,请修改头文件中的宏定义数据即可
			 (接触一天,时间不足,理解不深,代码有待优化,鉴谅)
***********************************************************************************************/
//#include "config.h"
#include <REG52.H>                /* special function register declarations   */
                    
#include  "LCD.h"
uint8 h=0,l=0;

/***********************************************************************************************
** 函数名称:LCD_Init()
** 函数功能:LCD初始化
** 入口参数:无
** 出口参数:无
***********************************************************************************************/
void LCD_Init(void)	
{
	  //PIN_INITI;
      PSB = 0;
      RST = 0;
	  LCD_Dly(50); 
      RST=1;

	  LCD_Dly(50); 								//启动等待,等LCM讲入工作状态    	 								
	  LCD_Write(0,0x30);  						//8 位介面,基本指令集
	  LCD_Write(0,0x0c);  						//显示打开,光标关,反白关
	  LCD_Write(0,0x01);  						//清屏,将DDRAM的地址计数器归零  
	 
}

void LCD_InitG()	
{
	  //PIN_INITI;
      PSB = 0;
      RST = 0;
	  LCD_Dly(2); 
      RST=1;

	  LCD_Dly(2); 								//启动等待,等LCM讲入工作状态    	 								
	  LCD_Write(0,0x36);  						//8 位介面,基本指令集
	//  LCD_Write(0,0x0c);  						//显示打开,光标关,反白关
	  //LCD_Write(0,0x01);  						//清屏,将DDRAM的地址计数器归零  
	 
}

/***********************************************************************************************
** 函数名称:LCD_WStr()
** 函数功能:显示字符串
** 入口参数:addr	显示的地址
**			 ptr	要显示的字符串的首地址
** 出口参数:无
***********************************************************************************************/
void LCD_WStr(uint8 addr,char *ptr)
{
	LCD_Write(WIR,addr);
	//LCD_Dly(1);
	while(*ptr!=0)
	{
		LCD_Write(WDATA,*ptr++);
	//	LCD_Dly(1);
	}
}
/***********************************************************************************************
** 函数名称:LCD_Write()
** 函数功能:LCD写指令或数据
** 入口参数:control_flow:		数据控制流,0 为写指令 1 为写数据
			 ddata:	数据
** 出口参数:无
***********************************************************************************************/
void LCD_Write(unsigned char control_flow, unsigned char ddata) 
{
	  unsigned char start_data,Hdata,Ldata;
	  if(control_flow==0) start_data=0xf8;	//写指令
	  else                start_data=0xfa;  //写数据
	  
	  CS=1;
	  Hdata=ddata&0xf0;		 				//取高四位
	  Ldata=(ddata<<4)&0xf0;  				//取低四位
	  LCD_SendByte(start_data);	  			//发送起始信号
	  LCD_Dly(2); 							//延时是必须的
	  LCD_SendByte(Hdata);	      			//发送高四位
	  LCD_Dly(2);  						    //延时是必须的
	  LCD_SendByte(Ldata);		  			//发送低四位
	  LCD_Dly(2);  						    //延时是必须的
	  CS=0;
}

/***********************************************************************************************
** 函数名称:LCD_SendByte()
** 函数功能:发送一个字节
** 入口参数:bbyte		字节数据
** 出口参数:无
***********************************************************************************************/
void LCD_SendByte(unsigned char bbyte) 
{
	 unsigned char i;
	 
	 for(i=0;i<8;i++)
	 {
		if( (bbyte&0x80)!=0 )	SID_1;
    	else 
    	{
    		SID_0 ;					//SID=bbyte&0x80;取出最高位
    	}
		SCKL_1;								//SCLK=1;
	    i=i;
	 	SCKL_0;								//SCLK=0;
	 	bbyte<<=1; 							//左移
	 }  
}
/***********************************************************************************************
** 函数名称:LCD_Dly()
** 函数功能://延时
** 入口参数:dly	延时参数,值越大,延时时间越长
** 出口参数:无
***********************************************************************************************/
void LCD_Dly(unsigned int dly) 
{
 	unsigned int i,j;
 	for(i=dly;i>0;i--)
   		for(j=5;j>0;j--);
}

/***********************************************************************************************
** 函数名称:LCD_Test()
** 函数功能:图形方式下屏幕全黑
** 入口参数:无
** 出口参数:无
***********************************************************************************************/
/*void LCD_Test(void)	
{ 
	unsigned char i,j;
	for(i=0;i<32;i++)
	{ 
		LCD_Write(0,0x80+i);
			LCD_Write(0,0x80);
	    for(j=0;j<16;j++) 
	    	LCD_Write(1,0xff);
	 }

	 for(i=0;i<32;i++)
	 { 
	 	LCD_Write(0,0x80+i);
	 	LCD_Write(0,0x88);
	    for(j=0;j<16;j++) 
	    	LCD_Write(1,0xff);
	 }
}

/***********************************************************************************************
** 函数名称:LCD_GPCLS()
** 函数功能:图形方式下清屏
** 入口参数:无
** 出口参数:无
***********************************************************************************************/
void LCD_GPCLS(void)  
{ 
	unsigned char i,j;
     LCD_Write(0,0x36);
   
	for(i=0;i<32;i++)
	{ 
	  	LCD_Write(0,0x80+i);
	  	LCD_Write(0,0x80);
	    for(j=0;j<16;j++) 
		    	LCD_Write(1,0x00);
	}

	for(i=0;i<32;i++)
	{ 
		LCD_Write(0,0x80+i);
		
		LCD_Write(0,0x88);
		
	    for(j=0;j<16;j++) 
		   	LCD_Write(1,0x00);
	}
}

/***********************************************************************************************
** 函数名称:Draw_point()
** 函数功能:图形方式下画点函数
** 入口参数:x:横坐标(0-127)
             y:纵坐标(0-63)
** 出口参数:无
***********************************************************************************************/
void Draw_point(uint8 x,uint8 y)
{
	uint8 i,j,z,k,L,H;
    uint16 temp=0x8000;
    i=x/16;
    j=x%16;
    
	z=y/32;
    k=y%32;
    
    temp>>=j;
    L=(uint8)temp;
    H=(uint8)(temp>>8);
    
	LCD_Write(0,0x80+k);
	LCD_Write(0,0x80+z*8+i);
	LCD_Write(1,H);
	LCD_Write(1,L);

}

/***********************************************************************************************
** 函数名称:Draw_x()
** 函数功能:图形方式下画横坐标线函数
** 入口参数:y:纵坐标(0-63)
** 出口参数:无
** 特别说明:要先画纵坐标轴,再画横坐标轴
***********************************************************************************************/
void Draw_x(uint8 y)
{
	uint8 z,k,m;
	z=y/32;
    k=y%32;
	
	for(m=0;m<8;m++)
    { 
		LCD_Write(0,0x80+k);
		LCD_Write(0,0x80+z*8+m);
		LCD_Write(1,0xff);
		LCD_Write(1,0xff);
    }
}

/***********************************************************************************************
** 函数名称:Draw_y()
** 函数功能:图形方式下画横坐标线函数
** 入口参数:x:横坐标(0-127)
** 出口参数:无
** 特别说明:要先画纵坐标轴,再画横坐标轴
***********************************************************************************************/
void Draw_y(uint8 x)
{
	uint8 i,m;
    
	i=x/16;
    
	for(m=0;m<32;m++)
    { 
		LCD_Write(0,0x80+m);
        LCD_Write(0,0x80+i);
	//	LCD_Write(1,0x00);
 		LCD_Write(1,0x80);
    }
	   	
	for(m=0;m<32;m++)
    { 
		LCD_Write(0,0x80+m);
		LCD_Write(0,0x88+i);
	//	LCD_Write(1,0x00);
		LCD_Write(1,0x80);
    }
}


/***********************************************************************************************
** 函数名称:Draw_letter()
** 函数功能:图形方式下写数字字母函数
** 入口参数:x:横坐标(0-127)
             y:纵坐标(0-63)
			 databuf1:需要写的第一个字
			 databuf2:需要写的第二个字
** 出口参数:无
***********************************************************************************************/
void Draw_letter(uint8 x,uint8 y,uint8 *databuf1,uint8 *databuf2)
{
	uint8 m,i,z,k;
	i=x/16;  
	z=y/32;
    k=y%32;

	for(m=0;m<8;m++)
    { 
		LCD_Write(0,0x80+k+m);
		LCD_Write(0,0x80+z*8+i);
		LCD_Write(1,databuf1[m]);
        LCD_Write(1,databuf2[m]);
    }
}













































/*先不要用该函数*/
void Draw_pointxy(uint8 x,uint8 y)
{
	uint8 i,j,z,k,L,H;
    uint16 temp=0x8000;
    i=x/16;
    j=x%16;
    
	z=y/32;
    k=y%32;
   // l=h=0x00;
    temp>>=j;
    L=(uint8)temp;
    H=(uint8)(temp>>8);
    L|=l;
	H|=h;

	LCD_Write(0,0x80+k);
	LCD_Write(0,0x80+z*8+i);
	LCD_Write(1,H);
	LCD_Write(1,L);
	l=L;
	h=H;


}



⌨️ 快捷键说明

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