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

📄 lcd.c

📁 PROFIBUS SLAVE PROGRAMS PRO FIBUS SLAVE PROGRAMS
💻 C
字号:
/*****************************  Filename: lcd.c ******************************/
/* ========================================================================= */
/*                                                                           */
/* 0000  000   000  00000 0  000  0   0 0 0000                               */
/* 0   0 0  0 0   0 0     0 0   0 0   0 0 0   0                              */
/* 0   0 0  0 0   0 0     0 0     0   0 0 0   0      Einsteinstra遝 6        */
/* 0000  000  0   0 000   0 0     00000 0 0000       91074 Herzogenaurach    */
/* 0     00   0   0 0     0 0     0   0 0 0                                  */
/* 0     0 0  0   0 0     0 0   0 0   0 0 0          Tel: ++49-9132-744-200  */
/* 0     0  0  000  0     0  000  0   0 0 0    GmbH  Fax: ++49-9132-744-204  */
/*                                                                           */
/* ========================================================================= */
/*                                                                           */
/* Function:       lcd functions                                             */
/*                                                                           */
/* ------------------------------------------------------------------------- */
/*                                                                           */
/* Technical support:       P. Fredehorst                                    */
/*                          Tel. : ++49-9132/744-214                         */
/*                          Fax. :              -204                         */
/*                          eMail: pfredehorst@profichip.com                 */
/*                                                                           */
/*****************************************************************************/


/*****************************************************************************/
/* contents:

  - function prototypes
  - data structures
  - internal functions

*/
/*****************************************************************************/
/* include hierarchy */

#include "..\..\dp_inc\platform.h"
#include "..\..\dp_inc\dp_inc.h"

#ifdef LCD	

/*---------------------------------------------------------------------------*/
/* local function prototypes                                                 */
/*---------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------*/
/* global data definitions                                                   */
/*---------------------------------------------------------------------------*/
code UBYTE ascc[16] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};


/*---------------------------------------------------------------------------*/
/* local data definitions                                                    */
/*---------------------------------------------------------------------------*/
sLCD LCD_PTR	pLCD;	// pointer to LCD structure

/*---------------------------------------------------------------------------*/
/* function: WaitReady                                                       */
/*---------------------------------------------------------------------------*/
void LCDDelay( UBYTE bDelay )
{
UWORD i,j;
  
	//CLR_TEST__;

    for( i = 0; i < bDelay; i++ )
    {
    	for( j = 0; j < 5; j++ )
    	{
       		_nop_();
       	}	
    }
	
	//SET_TEST__;
}//void LCDDelay( UBYTE bDelay )

static UBYTE WaitReady( void )
{
UWORD i;
  
  	LCDDelay(1);
  	
  	i = 0xf000;
  	while( i-- )
  	{
    	if( !( pLCD->ctrl.rd.bBusy & LCD_BUSY_FLAG ) )
    	{ 
      		return TRUE;
      	}	
  	}//while( i-- )
  	
  	return FALSE;
}//static UBYTE WaitReady( void )

/*---------------------------------------------------------------------------*/
/* function: LCDOn                                                        */
/*---------------------------------------------------------------------------*/
void LCDOn( void )
{
  	//pLCD->ctrl.wr.bIR = 0x0E;		//Display,Cursor,
  	pLCD->ctrl.wr.bIR = 0x0C;		//Display
}//void LCDOn( void )

/*---------------------------------------------------------------------------*/
/* function: LCDOff                                                        */
/*---------------------------------------------------------------------------*/
void LCDOff( void )
{
  	pLCD->ctrl.wr.bIR = 0x08;
}//void LCDOff( void )

/*---------------------------------------------------------------------------*/
/* function: LCDClear                                                        */
/*---------------------------------------------------------------------------*/
void LCDClear( void )
{
  	pLCD->ctrl.wr.bIR = 0x01;
}//void LCDClear( void )

/*---------------------------------------------------------------------------*/
/* function: LCDReturnHome                                                   */
/*---------------------------------------------------------------------------*/
static UBYTE LCDReturnHome( void )
{
  	if( !WaitReady() )
  	{
    	return FALSE;
    }
    	
  	pLCD->ctrl.wr.bIR = 0x02;
  	return TRUE;
}//static UBYTE LCDReturnHome( void )

/*---------------------------------------------------------------------------*/
/* function: LCDSetDDRAMAddr                                                 */
/*---------------------------------------------------------------------------*/
static void LCDSetDDRAMAddr( UBYTE bAddr )
{
  	WaitReady();
    	
  	pLCD->ctrl.wr.bIR = (0x80 | bAddr);
}//static void LCDSetDDRAMAddr( UBYTE bAddr )

/*---------------------------------------------------------------------------*/
/* functions                                                                 */
/*---------------------------------------------------------------------------*/
void LCDFunctionSet( void )
{
  	pLCD->ctrl.wr.bIR = 0x38;	// Function Set (8 bits, 2 lines, 5x7 dots)
}//void LCDFunctionSet( void )

/*---------------------------------------------------------------------------*/
/* functions                                                                 */
/*---------------------------------------------------------------------------*/
void LCDModeSet( void )
{
  	pLCD->ctrl.wr.bIR = 0x06;	// Entry Mode Set ( Moving cursor - increase; No LCD scrolling )
}//void LCDModeSet( void )

/*---------------------------------------------------------------------------*/
/* functions                                                                 */
/*---------------------------------------------------------------------------*/
UBYTE LCDInitDisplay( void )
{
	pLCD = (sLCD LCD_PTR)LCD_ADDRESS;
	
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);
  	LCDDelay(255);

	LCDFunctionSet();
	LCDDelay(5);
	LCDFunctionSet();
	LCDDelay(5);
  	WaitReady();
  	LCDOn();
	LCDDelay(5);
  	LCDClear();
  	LCDDelay(100);
  	LCDModeSet();
	LCDDelay(5);

    return TRUE;	
}//

void LCDUpdateProfichip( UBYTE bMainInterface, UBYTE bFunction, UBYTE bBugfix )
{
	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = 0x80;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x52;//R	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x4F;//O	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x46;//F	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x49;//I	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x43;//C	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x48;//H	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x49;//I	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x47;//G	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x6D;//m	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x62;//b	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x48;//H	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x56;//V	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = ascc[(bMainInterface & 0x0F)];
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x2E;//.	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = ascc[(bFunction & 0x0F)];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = ascc[(bBugfix & 0x0F)];	
	LCDDelay(2);
}//void LCDUpdateProfichip( void )

void LCDUpdate( UBYTE *pChar )
{
	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = 0xC0;	

	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[0];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[1];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[2];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[3];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[4];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[5];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[6];	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = pChar[7];	

	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	

	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x56;//V	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x43;//C	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x33;//3	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x2B;//+	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x2F;///	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x43;//C	
	LCDDelay(2);
}//void LCDUpdate( UBYTE *pChar )

/*---------------------------------------------------------------------------*/
/* functions                                                                 */
/*---------------------------------------------------------------------------*/
UBYTE LCDUpdateDisplay( void )
{
	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = 0x80;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x52;//R	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x4F;//O	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x46;//F	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x49;//I	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x43;//C	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x48;//H	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x49;//I	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x20;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x47;//G	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x6D;//m	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x62;//b	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x48;//H	

	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = 0xC0;	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x4D;//M	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x50;//P	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x49;//I	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x31;//1	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x32;//2	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x78;//x	
	LCDDelay(2);

	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = (0x80 | 0x4B);	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x4D;//M	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x57;//W	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x31;//1	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x30;//0	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x3A;//:	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x30;//0	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x30;//0	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x30;//0	
	LCDDelay(2);
  	pLCD->ctrl.wr.bDR = 0x30;//0	
	LCDDelay(2);

    return TRUE;	
}//

void LCDUpdateWord( UBYTE bAddress, UWORD wValue )
{
	bAddress = bAddress;
	wValue = wValue;
}//void LCDUpdateWord( UBYTE bAddress, UWORD wValue )

void LCDUpdateTime( UBYTE bAddress, UBYTE bHour, UBYTE bMinute )
{
	LCDDelay(2);
  	pLCD->ctrl.wr.bIR = (0x80 | bAddress);	
	LCDDelay(2);
    pLCD->ctrl.wr.bDR = ascc[(UBYTE)((bHour >> 4) & 0x0F)];
	LCDDelay(2);
    pLCD->ctrl.wr.bDR = ascc[(UBYTE)(bHour & 0x0F)];
	LCDDelay(2);
    pLCD->ctrl.wr.bDR = 0x3A;//:
	LCDDelay(2);
    pLCD->ctrl.wr.bDR = ascc[(UBYTE)((bMinute >> 4) & 0x0F)];
	LCDDelay(2);
    pLCD->ctrl.wr.bDR = ascc[(UBYTE)(bMinute & 0x0F)];
	LCDDelay(2);
}//void LCDUpdateWord( UBYTE bAddress, UWORD wValue )

#endif//#ifdef LCD	

/*****************************************************************************/
/*  Copyright (C) profichip GmbH 2004. Confidential.                         */
/*****************************************************************************/

⌨️ 快捷键说明

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