📄 lcddriver_ts136.c
字号:
{
pu16CharMap = (unsigned int *)au16LcdFontWide[*pcString - '%'];
break;
}
/* Default is to return a space character */
pu16CharMap = (unsigned int *)au16LcdFont[46];
break;
}
u16Columns = *pu16CharMap;
/* Copy character bitmap to shadow memory */
do
{
pu16CharMap++;
*pu16Shadow = (*pu16CharMap) ^ 0xff;
pu16Shadow++;
u16Columns--;
} while (u16Columns > 0);
/* Add a column spacing */
*pu16Shadow = 0xff;
pu16Shadow++;
pcString++;
}
}
/****************************************************************************
*
* NAME: vLcdClearLine
*
* DESCRIPTION:
* Clears a specified line on the LCD Display
*
* PARAMETERS: Name RW Usage
* u16Row R Character row (0-7)
*
* NOTES:
* To see text, perform a refresh
*
****************************************************************************/
void vLcdClearLine(unsigned int u16Row)
{
unsigned int i;
unsigned int *pu16Shadow = &au16Shadow[u16Row * 128];
for(i=0; i<128;i++)
{
*pu16Shadow = 0;
pu16Shadow++;
}
}
/****************************************************************************
*
* NAME: vLcdWriteTextToClearLine
*
* DESCRIPTION:
* Puts text into shadow buffer. Text is aligned to a character row but can
* be at any column. Characters are variable width but 8 pixels high.
*
* PARAMETERS: Name RW Usage
* pcString R Pointer to zero-terminated string
* u16Row R Character row (0-7)
* u16Column R Start column (0-127)
*
* NOTES:
* To see text, perform a refresh
*
****************************************************************************/
void vLcdWriteTextToClearLine(char *pcString, unsigned int u16Row, unsigned int u16Column)
{
vLcdClearLine(u16Row);
vLcdWriteText(pcString, u16Row, u16Column);
}
/****************************************************************************
*
* NAME: vLcdWriteBitmap
*
* DESCRIPTION:
* Copies a bitmap to shadow memory
*
* PARAMETERS: Name RW Usage
* ps8Bitmap R Bitmap image: see .h file for details
****************************************************************************/
void vLcdWriteMenu(unsigned int *pu16Bitmap)
{
unsigned int i;
unsigned int *pu16Shadow;
pu16Shadow = &au16Shadow[0];
pu16Bitmap = &pu16Bitmap[0];
/* Copy bitmap */
for (i = 0; i < 1024; i++)
{
*pu16Shadow = *pu16Bitmap;
pu16Shadow++;
pu16Bitmap++;
}
}
void vLcdSwithMenu(unsigned int u16MenuItem)
{
unsigned int i;
unsigned int u16P;
unsigned int *pu16Shadow;
/* Copy bitmap */
for (i = 0; i < 27; i++)
{
pu16Shadow = &au16Shadow[i + u16MenuItem * 30];
u16P = *pu16Shadow ^ 0x00FE;
*pu16Shadow = u16P;
}
for (i = 128; i < 155; i++)
{
pu16Shadow = &au16Shadow[i + u16MenuItem * 30];
u16P = *pu16Shadow ^ 0x003F;
*pu16Shadow = u16P;
}
}
/****************************************************************************/
/*** Local Functions ***/
/****************************************************************************/
/****************************************************************************
*
* NAME: vGrabSpiBus
*
* DESCRIPTION:
* Sets up the SPI bus for use by this driver. It sets it to automatic
* slave select and then selects the correct slave, and also sets the clock
* divider to give 4MHz
*
****************************************************************************/
void vGrabSpiBus(void)
{
/* Set slave select */
PBDATDIR=PBDATDIR & 0xFFF7; //IOPB3=0
}
/****************************************************************************
*
* NAME: vFreeSpiBus
*
* DESCRIPTION:
* Performs any clear-up after LCD accesses. Currently a null function.
*
****************************************************************************/
void vFreeSpiBus(void)
{
PBDATDIR=PBDATDIR | 0x0008; //IOPB3=1
}
/****************************************************************************
*
* NAME: vSetCDline
*
* DESCRIPTION:
* Sets the CD line to either high or low, as desired. This is used by the
* LCD controller to distinguish between commands and pixel data.
*
* PARAMETERS: Name RW Usage
* u16OnOff R Whether line should be high or low
*
****************************************************************************/
void vSetCDline(unsigned int u16OnOff)
{
if (u16OnOff)
{
PBDATDIR=PBDATDIR | 0x0004; //IOPB2=1
}
else
{
PBDATDIR=PBDATDIR & 0xFFFB; //IOPB2=0
}
}
/****************************************************************************
*
* NAME: vSendCommand
*
* DESCRIPTION:
* Sends a command to the LCD controller. Commands are the same as data but
* are differentiated by the CD line being low.
*
* PARAMETERS: Name RW Usage
* u16Command R 8-bit command (includes parameters)
*
****************************************************************************/
void vSendCommand(unsigned int u16Command)
{
vSetCDline(0);
vSendData(u16Command);
}
/****************************************************************************
*
* NAME: vSendData
*
* DESCRIPTION:
* Sends 8 bits of data to LCD controller and waits for it to finish.
*
* PARAMETERS: Name RW Usage
* u16Data R 8 bits of data
*
****************************************************************************/
void vSendData(unsigned int SPI_DATA)
{
unsigned char flag=0;
SPITXBUF=(SPI_DATA<<8) ;
while(1)
{
flag=SPISTS&0x40;
if(flag==0x40) break;
}
SPIRXBUF=SPIRXBUF;/*虚读寄存器以清除中断标志*/
}
void vValToDec(char *pcOutString, unsigned int u8Value, char *pcLabel)
{
static const unsigned int au8Digits[5] = {10000, 1000, 100, 10, 1};
unsigned int u8Digit;
unsigned int u8DigitIndex;
unsigned int u8Count;
unsigned int boPreviousDigitPrinted = 0;
for (u8DigitIndex = 0; u8DigitIndex < 5; u8DigitIndex++)
{
u8Count = 0;
u8Digit = au8Digits[u8DigitIndex];
while (u8Value >= u8Digit)
{
u8Value -= u8Digit;
u8Count++;
}
if ( (u8Count != 0) ||(boPreviousDigitPrinted == 1)
|| (u8DigitIndex == 4))
{
*pcOutString = '0' + u8Count;
boPreviousDigitPrinted = 1;
pcOutString++;
}
}
vStringCopy(pcLabel, pcOutString);
}
void vStringCopy(char *pcFrom, char *pcTo)
{
while (*pcFrom != '\0')
{
*pcTo = *pcFrom;
pcTo++;
pcFrom++;
}
*pcTo = '\0';
}
/****************************************************************************/
/*** END OF FILE ***/
/****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -