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

📄 lcddriver_ts136.c

📁 uc/os运行在tms320lf2407a上
💻 C
📖 第 1 页 / 共 2 页
字号:
		    {
		        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 + -