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

📄 lcddriver.c

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

    for(i=0; i<240;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 < 3840; 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                                               ***/
/****************************************************************************/
/**********************************
//= 函数原型: uchar check_cmd_st()
//= 功    能: 查询是否可读写命令和数据的状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
unsigned int check_cmd_st(void) // 状态位STA1,STA0 判断(读写指令和读写数据)
{
    unsigned int i;
    vSetCDline(1);
	
    for(i=100;i>0;i--)
    {
		lcdsta=port8000;
        if((lcdsta & 0x03) == 0x03)
        break;
    }
	
    return i; // 若返回零,说明错误
}
/**********************************
//= 函数原型: uchar check_aw_st
//= 功    能: 查询是否可数据自动写状态
//= 参    数:
//= 返 回 值: 非0不忙,否则忙
//= 函数性质:私有函数
**********************************/
unsigned int check_aw_st(void) // 状态位ST3 判断(数据自动写状态)
{
    unsigned int i;
    vSetCDline(1);
	
    for(i=100;i>0;i--)
    {
		lcdsta=port8000;
        if((lcdsta & 0x08) == 0x08)
        break;
    }
	
    return i; // 若返回零,说明错误
}
/**********************************
//= 函数原型: uchar wr_cmd_2(uchar uCmd,uint uPar)
//= 功    能: 给T6963C写带双参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
unsigned int wr_cmd_2(unsigned int uCmd,unsigned int uPar) // 写双参数的指令
{
    if(check_cmd_st() == 0)    return 1;
    port8000 = uPar & 0xFF;	//先写低字节,再写高字节
    if(check_cmd_st() == 0)    return 2;
    port8000 = uPar >> 8;
    if(check_cmd_st() == 0)    return 3;
    port8000 = uCmd;
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar wr_cmd_1(uchar uCmd,uchar uPar1)
//= 功    能: 给T6963C写带单参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
unsigned int wr_cmd_1(unsigned int uCmd,unsigned int uPar) // 写单参数的指令
{
    if(check_cmd_st() == 0)    return 1;
    port8000 = uPar;
    if(check_cmd_st() == 0)    return 2;
    port8000 = uCmd;
    return 0; // 返回0 成功
}

/**********************************
//= 函数原型: uchar wr_cmd_0(uchar uCmd)
//= 功    能: 给T6963C写无参数的指令
//= 参    数:
//= 返 回 值: 返回0 成功,否则忙
//= 函数性质:私有函数
**********************************/
unsigned int wr_cmd_0(unsigned int uCmd) // 写无参数的指令
{
    if(check_cmd_st() == 0)    return 1;
    port8000 = uCmd;
    return 0; // 返回0 成功
}

/****************************************************************************
 *
 * 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)
    {
		PEDATDIR=0x0020;		//IOPE5=1指令
    }
    else
    {
		PEDATDIR=0xFFDF;		//IOPE5=0数据
    }
}

 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 + -