📄 lcd.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 + -