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

📄 disp.c

📁 ucos下LCD显示屏驱动程序,LCD屏大小为128X64
💻 C
📖 第 1 页 / 共 2 页
字号:
            else
                LCD_Write(*ucpStr++, DATA, RIGHT);
        }
        else
        {//反白显示
            if (ucXStar < 8)
                LCD_Write(~(*ucpStr++), DATA, LEFT);
            else
                LCD_Write(~(*ucpStr++), DATA, RIGHT);
        }
    }
    
    return (0);
}

//****************************************************************************
//函数名称: LCD_Write_Str
//函数功能: 向LCD送字符串
//输入参数: UCHAR *ucpStr       数据
//          UCHAR ucXStar       X坐标
//          UCHAR ucYStar       Y坐标
//          UCHAR ucLen         长度
//          UCHAR ucType        0, 正常显示; 1, 反白显示
//输出参数: void
//返 回 值: void
//创建日期: 2007.12.24
//创 建 人: 罗德良
//参考文档: LPC2104开发板
//说    明:	
//修改历史:
//****************************************************************************
static UCHAR LCD_Write_Str(UCHAR *ucpStr, UCHAR ucXStar, 
						  UCHAR ucYStar, UCHAR ucLen, UCHAR ucType)
{
    UCHAR ucLineStar;           //行起始
    UCHAR ucColStar;            //列起始
    UCHAR *ucpFont, ucTemp;

    if (ucLen > 16) return (1);     //长度超出一行
    if ((ucXStar + ucLen) > 16) return (1);
    if (ucYStar > 8) return (1);    //行数超出一屏
    
    ucColStar = ucXStar;
    ucLineStar = ucYStar;
    
    while (ucLen-- > 0)
    {
        ucTemp = *ucpStr++;
        
        if (ucTemp >= 0x30 && ucTemp <= 0x39)
        {//0 - 9
            ucTemp -= 0x30;
        }
        else
        {
            switch (ucTemp)
            {
                case ' ':
                    ucTemp = 10;
                    break;
                case '.':
                    ucTemp = 11;
                    break;
                case ':':
                    ucTemp = 12;
                    break;
                case '-':
                    ucTemp = 13;
                    break;
                case 'A':
                    ucTemp = 14;
                    break;
                case 'I':
                    ucTemp = 15;
                    break;
                case 'D':
                    ucTemp = 16;
                    break;
                case 'O':
                    ucTemp = 17;
                    break;
                case 'C':
                    ucTemp = 18;
                    break;
                case 'T':
                    ucTemp = 19;
                    break;
                case 'e':
                    ucTemp = 20;
                    break;
                case 'm':
                    ucTemp = 21;
                    break;
                case 'p':
                    ucTemp = 22;
                    break;
                default:
                    ucTemp = 10;
            }
        }
        
        ucpFont = (UCHAR *)&ucFont8X16[ucTemp * 16];
        /*********************上半字*********************/
        //行起始地址
        LCD_Write(PAGESTAR + ucLineStar, CMD, LEFT);
        LCD_Write(PAGESTAR + ucLineStar, CMD, RIGHT);

        //列起始地址
        if (ucColStar < 8)
        {//左半屏
            LCD_Write(COLSTAR + ucColStar * 8, CMD, LEFT);
        } 
        else
        {//右半屏
            LCD_Write(COLSTAR + (ucColStar - 8) * 8, CMD, RIGHT);
        }
        
        LCD_Write_Half(ucpFont, ucColStar, ucType);

        ucpFont += 8;
        /*********************下半字*********************/
        //行起始地址
        LCD_Write(PAGESTAR + ucLineStar + 1, CMD, LEFT);
        LCD_Write(PAGESTAR + ucLineStar + 1, CMD, RIGHT);

        //列起始地址
        if (ucColStar < 8)
        {//左半屏
            LCD_Write(COLSTAR + ucColStar * 8, CMD, LEFT);
        } 
        else
        {//右半屏
            LCD_Write(COLSTAR + (ucColStar - 8) * 8, CMD, RIGHT);
        }            
        
        LCD_Write_Half(ucpFont, ucColStar, ucType);
        
        ucColStar++;
    }
    
    return (0);
}

//****************************************************************************
//函数名称: Disp_Logo
//函数功能: 显示开机画面
//输入参数: UCHAR ucType 0, 正常显示; 1, 反白显示;
//输出参数: void
//返 回 值: void
//创建日期: 2007.12.24
//创 建 人: 罗德良
//参考文档: LPC2104开发板
//说    明:	
//修改历史:
//****************************************************************************
//static void Disp_Logo(UCHAR ucType)
//{
//    UCHAR i, j;
//    UCHAR *ucpPic;
    
//    ucpPic = (UCHAR *)&ucPic[0];
//    for (i = 0; i < 8; i++)
//    {
        //行起始地址
//        LCD_Write(PAGESTAR + i, CMD, LEFT);
//        LCD_Write(PAGESTAR + i, CMD, RIGHT);
        
        //列起始地址
//        LCD_Write(COLSTAR, CMD, LEFT);
//        LCD_Write(COLSTAR, CMD, RIGHT);
        
//        for (j = 0; j < 16; j++)
//        {
//            LCD_Write_Half(ucpPic, j, ucType);
            
//            ucpPic += 8;
//        }
//    }
//}

//****************************************************************************
//函数名称:	TaskDisp
//函数功能:	显示任务
//输入参数:	void *pdata
//输出参数:	void
//返 回 值:	void
//创建日期:	2007.05.12
//创 建 人:	罗德良
//参考文档:	
//说	明:	
//修改历史:
//****************************************************************************
void TaskDisp(void *pdata)
{
    UCHAR ucStr[20];
    UCHAR i, j ,m;
    float fEGUL, fEGUH;
        
    pdata = pdata;                                                  /* 避免编译警告 */
    
    LCD_Init();         //显示初始化

    //显示LOGO
    //strcpy((char *)ucStr, "SRU326");
    //LCD_Write_Str(ucStr, 5, 1, strlen((char *)ucStr), 0);
    //strcpy((char *)ucStr, "SINYWAY");
    //LCD_Write_Str(ucStr, 5, 4, strlen((char *)ucStr), 0);
    
    //显示版本号
    //sprintf((char *)ucStr, "V%1d.%1d.%1d", REV_1, REV_2, REV_3);
    //LCD_Write_Str(ucStr, 10, 6, strlen((char *)ucStr), 1);
    
    //OSTimeDly(1600);
    
    while (1)
   	{
   	    //************AI************
   	    for (m = 0; m < 2; m++)
        {
       	    LCD_Cls();    //清屏
       	    
       	    for (i = 0; i < 4; i++)
       	    {
                sprintf((char *)ucStr, "AI%1d:", i + m * 4);   	        
       	        LCD_Write_Str(ucStr, 2, i * 2, strlen((char *)ucStr), 0);
       	    }
            
            do
            {
               	for (j = 0; j < 4; j++)
           	    {
               	    for (i = 0; i < 4; i++)
               	    {
               	    	//显示变换
						if (ui16AoReg[AI_DISPL_ADR + i + m * 4] >= 0x8000)
					    {//为负数
					        fEGUL = (ui16AoReg[AI_DISPL_ADR + i + m * 4] & 0x7fff) * -1.0;
					    }
					    else
					    {//为正数
					        fEGUL = ui16AoReg[AI_DISPL_ADR + i + m * 4] * 1.0;
					    }       	
					    if (ui16AoReg[AI_DISPH_ADR + i + m * 4] >= 0x8000)
					    {//为负数
					        fEGUH = (ui16AoReg[AI_DISPH_ADR + i + m * 4] & 0x7fff) * -1.0;
					    }
					    else
					    {//为正数
					        fEGUH = ui16AoReg[AI_DISPH_ADR + i + m * 4] * 1.0;
					    }
					    
					    //采样结果
					    fAiDisp[0] = (UINT32)ui16AiReg[i + m * 4] * (fEGUH - fEGUL) / 4096 + fEGUL;
					    if (ui16AoReg[AI_DEC_ADR + i + m * 4] != 0) fAiDisp[0] /= ui16AoReg[AI_DEC_ADR + i + m * 4];
    	   
               	        switch (ui16AoReg[AI_DEC_ADR + i + m * 4])
               	        { 
               	            case 1:         //无小数
               	                sprintf((char *)ucStr, "%06.0f", fAiDisp[0]);
               	                break;
               	            case 10:        //1位小数
               	                sprintf((char *)ucStr, "%06.1f", fAiDisp[0]);
               	                break;
               	            case 100:       //2位小数
               	                sprintf((char *)ucStr, "%06.2f", fAiDisp[0]);
               	                break;
               	            case 1000:      //3位小数
               	                sprintf((char *)ucStr, "%06.3f", fAiDisp[0]);
               	                break;
               	            case 10000:     //4位小数
               	                sprintf((char *)ucStr, "%06.4f", fAiDisp[0]);
               	                break;
               	            default:
               	                sprintf((char *)ucStr, "%06.0f", fAiDisp[0]);
               	                break;
               	        }
               	        
               	        LCD_Write_Str(ucStr, 7, i * 2, strlen((char *)ucStr), 0);
                    }
                    
                    OSTimeDly(200);
                }
            }while (DEFAULT_IN != _DEF);
        }
        
        //************CI************
        for (m = 0; m < 2; m++)
        {
            LCD_Cls();    //清屏
            
       	    for (i = 0; i < 4; i++)
       	    {
       	        sprintf((char *)ucStr, "CI%1d:", i + m * 4);
       	        LCD_Write_Str(ucStr, 1, i * 2, strlen((char *)ucStr), 0);
            }
    
            do 
            {
               	for (j = 0; j < 4; j++)
           	    {
               	    for (i = 0; i < 4; i++)
               	    {   
               	        sprintf((char *)ucStr, "%010ld", ui16AoReg[2 + ((i + m * 4) * 2) + 0] * 256ul * 256ul
                                                       + ui16AoReg[2 + ((i +m * 4) * 2) + 1]);
               	        
           	            LCD_Write_Str(ucStr, 5, i * 2, strlen((char *)ucStr), 0);
                    }
                    
                    OSTimeDly(200);
                }
            }while (DEFAULT_IN != _DEF);
        }
        
        //************AO TEMP************
        LCD_Cls();    //清屏
        
   	    strcpy((char *)ucStr, "AO0:");
   	    LCD_Write_Str(ucStr, 2, 0, strlen((char *)ucStr), 0);

   	    strcpy((char *)ucStr, "AO1:");
   	    LCD_Write_Str(ucStr, 2, 2, strlen((char *)ucStr), 0);
        
        do 
        {
           	for (j = 0; j < 4; j++)
       	    {
           	    for (i = 0; i < 2; i++)
           	    {
           	        sprintf((char *)ucStr, "%06.2f", (float)ui16AoReg[i]  * 16 / 4096 + 4);
           	        
      	            LCD_Write_Str(ucStr, 7, i * 2, strlen((char *)ucStr), 0);
                }
                
                sprintf((char *)ucStr, "Temp: %05.1f", fAiDisp[1]);
                
                LCD_Write_Str(ucStr, 2, 6, strlen((char *)ucStr), 0);
                
                OSTimeDly(200);
            }
        }while (DEFAULT_IN != _DEF);
	}
}

⌨️ 快捷键说明

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