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

📄 lcd.c.svn-base

📁 由MSP430F135做控制器的温度控制详细程序
💻 SVN-BASE
字号:

/****************************************************************************
LCD屏幕分成8行,16列。 图形显示所占内存:1024 byte
						文本显示所占内存:128 byte
LCD显示缓存:8k

LCD显示一屏所占内存1024byte。所以缓存内可以存8屏
		 

***************************************************************************/

#include"..\inc\resources.h"
#include"..\inc\lcdcomm.h"

//////////////////////////////////////////////////////////
//Read LCD State register
//////////////////////////////////////////////////////////
extern unsigned int systimer0;

void sysdelay( unsigned int i)
{
	systimer0 = i;
}


unsigned char ReadST(void)
{
	unsigned char st;
	
        lcd_dt_in_();
	lcd_cmd_();			//select Command
	lcd_en_();

	lcd_rd0_();
	st = LCD_IN_PORT;		//read LCD state
	lcd_rd1_();
	lcd_dis_();

	return(st);
}

/////////////////////////////////////////////////////////
//Data write (1 byte) routine
/////////////////////////////////////////////////////////
void WriteDT(unsigned char ch)
{
	while( (ReadST() & 3) != 3);    //status check

        lcd_dt_out_();
	lcd_dt_();		    	//select Data
	lcd_en_();
	
	LCD_OUT_PORT = ch;
	lcd_wr0_();
	lcd_wr1_();			//write data
	lcd_dis_();
}

///////////////////////////////////////////////////
//auto write byte
//////////////////////////////////////////////////
void AWriteDT(unsigned char ch)
{

	while( ( ReadST() & 8) != 8);  //status check

        lcd_dt_out_();
	lcd_dt_();		    	//select Data
	lcd_en_();
	
	LCD_OUT_PORT = ch;
	lcd_wr0_();
	lcd_wr1_();			//write data
	lcd_dis_();
}

//////////////////////////////////////////////////////////////////////////
//command write routine
//////////////////////////////////////////////////////////////////////////
void WriteCMD(unsigned char ch)
{
	while( (ReadST() & 3) != 3);  //status check
	
        lcd_dt_out_();
	lcd_cmd_();			//select Command
        lcd_en_();

	LCD_OUT_PORT = ch;
	lcd_wr0_();
	lcd_wr1_();			//write data
	lcd_dis_();
}
//Set Screen number
void SetScrNum(unsigned char num)
{
	unsigned int addr;

	//lcd_en_();

	//set text home address
	addr = ADDTXSCR0 + TXSCR * num;

	WriteDT(addr);			//text screen 1
	WriteDT(addr/256);
	WriteCMD(CMD_TXHOME);	

	//set graphic home address
	addr = ADDGRSCR0 + GRSCR * num;
	WriteDT(addr);			//graphic screen 1
	WriteDT(addr/256);
	WriteCMD(CMD_GRHOME);

	//lcd_dis_();
	
}


/////////////////////////////////////////////////////////////////////
//LCD intialise
/////////////////////////////////////////////////////////////////////
void LCDInit(void)
{
	unsigned int i;
	
	//lcd_en_();
	
	//write text blank code  
	WriteDT(0);				    	//set address pointer
	WriteDT(0);
	WriteCMD(CMD_ADPSET);	

	WriteCMD(CMD_AWRON);				//set data auto write
	for(i = 0; i < 0x8000 ;i++ )
		AWriteDT(0x00);
	WriteCMD(CMD_AWROFF);				//reset data auto write

	//set text area
	WriteDT(MAXCOL);					//Text area MAXCOL = 30 columns
	WriteDT(0);
	WriteCMD(CMD_TXAREA);	

	//set graphic area
	WriteDT(MAXCOL);					//Graphic area MAXCOL = 30 columns
	WriteDT(0);
	WriteCMD(CMD_GRAREA);	

	//set character mode
	WriteCMD(CMD_CHRMD);	

	//set external character offset register 
	WriteDT(ECOFFSET);					
	WriteDT(0);
	WriteCMD(CMD_OFFSET);	

	//set display mode 
	WriteCMD(CMD_DISNOM);
	

	//lcd_dis_();
	

}

//////////////////////////////////////////////////////////////////////////
//auto write graphic black
//////////////////////////////////////////////////////////////////////////
void WriteGRBL(unsigned int adp, unsigned char const *p)
{
	unsigned char cl,ln,i,j;

	//lcd_en_();
	
	cl = *(p++);		//列
	ln = *(p++);		//行

	for(i=0;i<ln;i++)
	{
		WriteDT(adp);			//set address pointer
		WriteDT((adp)/256);
		WriteCMD(CMD_ADPSET);	
		adp =adp + MAXCOL;
		
		WriteCMD(CMD_AWRON);		//set data auto write
		for(j=0; j < cl ; j++)
			AWriteDT(*(p++));
		WriteCMD(CMD_AWROFF);		//reset data auto write
	}
	
	//lcd_dis_();
}

//////////////////////////////////////////////////////////////////////////
//auto clear  graphic black
//////////////////////////////////////////////////////////////////////////
void ClearGRBL(unsigned int adp, unsigned char const  *p)
{
	unsigned char cl,ln,i,j;
	
	//lcd_en_();

	cl = *(p++);				//列
	ln = *(p);		    		//行

	for(i=0;i<ln;i++)
	{
		WriteDT(adp);			//set address pointer
		WriteDT((adp)/256);
		WriteCMD(CMD_ADPSET);	
		adp =adp + MAXCOL;
		
		WriteCMD(CMD_AWRON);		//set data auto write
		for(j=0; j < cl ; j++)
			AWriteDT(0);
		WriteCMD(CMD_AWROFF);		//reset data auto write
	}
	//lcd_dis_();
}

//////////////////////////////////////////////////////////////////////////
//auto write graphic black
//////////////////////////////////////////////////////////////////////////
void WriteGRBL_(unsigned int adp, unsigned char const *p)
{
	unsigned char cl,ln,i,j;

	cl = *(p++);		//列
	ln = *(p++);		//行

	for(i=0;i<ln;i++)
	{
		WriteDT(adp);			//set address pointer
		WriteDT((adp)/256);
		WriteCMD(CMD_ADPSET);	
		adp =adp + MAXCOL;
		
		WriteCMD(CMD_AWRON);		//set data auto write
		for(j=0; j < cl ; j++)
			AWriteDT(~(*(p++)));
		WriteCMD(CMD_AWROFF);		//reset data auto write
	}
}
//////////////////////////////////////////////////////////////////////////
//auto horizontal line
//////////////////////////////////////////////////////////////////////////
void WriteHL(unsigned int adp, unsigned char l)
{
	unsigned char i;

	WriteDT(adp);			//set address pointer
	WriteDT((adp)/256);
	WriteCMD(CMD_ADPSET);	
	WriteCMD(CMD_AWRON);		//set data auto write
	AWriteDT(0x0f);
	for(i=2;i<l;i++)
	{
		AWriteDT(0xff);
	}
	AWriteDT(0xf8);
	WriteCMD(CMD_AWROFF);		//reset data auto write
	//lcd_dis_();
}

//////////////////////////////////////////////////////////////////////////
//auto vertical line
//////////////////////////////////////////////////////////////////////////
void WriteVL(unsigned int adp, unsigned char l)
{
	unsigned char i;

	for(i=0;i<l;i++)
	{
		WriteDT(adp);			//set address pointer
		WriteDT((adp)/256);
		WriteCMD(CMD_ADPSET);
		WriteCMD(CMD_AWRON);	
		WriteDT(0x08);	
		WriteCMD(CMD_AWROFF);
		adp =adp + MAXCOL;

	}
}

⌨️ 快捷键说明

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