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

📄 e20_lcd.c

📁 HSAV DR53E CF卡MP3录放板应用编程源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
        if ((g2Local_2 & 0x00ff) < 0x0080){   //显示单个非汉字字符时
            g2Local_2 = (g2Local_1 << 8) | gLocal_1;
            MDIPASCIIToScreen(gLocal_XS, gLocal_YS, g2Local_2>>8);
            gLocal_XS += 7;
        }

        if (gLocal_1 == 0x00) break;
        g2Local_1 = (g2Local_1 << 8) | gLocal_1;

        if (g2Local_2 < 0x8000){         //显示两个非汉字字符时
            MDIPASCIIToScreen(gLocal_XS, gLocal_YS, g2Local_1);
            gLocal_XS += 5*2; //*2
        }
        else {
            MDIPChineseToScreen(gLocal_XS, gLocal_YS, g2Local_1);
            gLocal_XS += 16;
        }

    };
    return;
}

void MDIPWriteEngChinese_String(BYTE gLocal_XS, BYTE gLocal_YS, const char *gpString) {
    BYTE gLocal_1;
    WORD g2Local_2;
    WORD gLocal_2;
    WORD g2Local_1;

    while (1) {
        g2Local_1 = *gpString++;
        if (g2Local_1 == 0x00) break;
        g2Local_2 = g2Local_1;
        gLocal_1 = *gpString++;
        gLocal_2 = gLocal_1;

        if ((g2Local_2 & 0x00ff) < 0x0080){   //显示单个非汉字字符时
            g2Local_2 = (g2Local_1 << 8) | gLocal_1;
            MDIPASCIIToScreen(gLocal_XS, gLocal_YS, g2Local_2>>8);
            gLocal_XS += 7;
        }

        if (gLocal_1 == 0x00) break;
        g2Local_1 = (g2Local_1 << 8) | gLocal_1;

        if (g2Local_2 < 0x8000){         //显示两个非汉字字符时
            MDIPASCIIToScreen(gLocal_XS, gLocal_YS, g2Local_1);
            gLocal_XS += 7;
        }
        else {
            MDIPChineseToScreen(gLocal_XS, gLocal_YS, g2Local_1);
            gLocal_XS += 16;
        }

    };
    return;
}



/*显示字符, 参数 x 为列数,参数 y 为行数,参数 gLocal_1 为字符内容*/
BYTE MDIPASCIIToScreen(BYTE x, BYTE y, BYTE gLocal_1){
    BOOL FLocal_1;
    BYTE gLocal_0;
    BYTE gLocal_2;
    BYTE gLocal_3;
    BYTE gLocal_4;
    BYTE gLocal_5[6];
    WORD g2Local_1;

    gLocal_0 = x;
    if (x > 63) x -= 64;
    else x += 64;

    g2Local_1 = (gLocal_1 - ' ') * 6;

    gLocal_2 = x;
    MLCDOffsetWrite(x, y);

    gLocal_3 = 0;
 	FLocal_1 = 0;
    do {
        gLocal_4 = TabDIP_ASCII[g2Local_1 + gLocal_3];
        gLocal_5[gLocal_3] = gLocal_4; 
        MWriteToLCD(gLocal_2++, gLocal_4 << 4);    
        if (gLocal_2 > 127 && !FLocal_1){
            FLocal_1 = 1;
            gLocal_2 = 0;
            MLCDOffsetWrite(0, y);
        }
    } while (++gLocal_3 < 6);                                    
    MWriteToLCD(gLocal_2, 0);    

    y += 1;
    MLCDOffsetWrite(x, y);
    gLocal_2 = x;
    gLocal_3 = 0;
 	FLocal_1 = 0;
    do {
        MWriteToLCD(gLocal_2++, gLocal_5[gLocal_3] >> 4);    
        if (gLocal_2 > 127 && !FLocal_1){
            FLocal_1 = 1;
            gLocal_2 = 0;
            MLCDOffsetWrite(0, y);
        }
    } while (++gLocal_3 < 6);     
    MWriteToLCD(gLocal_2, 0);    

    return gLocal_0 +  6;
}


void MDIPLogoShow(){ 

    return;
}
void mDIPClearBuffer(){
    BYTE gLocal_1;
    gLocal_1 = 64;
    do {
        MLCD_Write(cLCDLow_D, 0xff);
    } while (--gLocal_1 != 0);
    gLocal_1 = 64;
    do {
        MLCD_Write(cLCDHigh_D, 0xff);
    } while (--gLocal_1 != 0);
    return;
}
void MDIPClearScreen(BYTE gLocal_1){      //清除整行
    BYTE gLocal_2;
    FDIPReverse = 1;
    MLCD_Write(cLCDLow_C, 0x40);
    MLCD_Write(cLCDHigh_C, 0x40);
    switch (gLocal_1){
        case cDOTLine1 : gLocal_2 = 0xb8; break;
        case cDOTLine2 : gLocal_2 = 0xba; break;
        case cDOTLine3 : gLocal_2 = 0xbc; break;
        case cDOTLine4 : gLocal_2 = 0xbe; break;
        default : break; 
    }
    MLCD_Write(cLCDLow_C, gLocal_2);
    MLCD_Write(cLCDHigh_C, gLocal_2);
    mDIPClearBuffer();
    MLCD_Write(cLCDLow_C, gLocal_2+1);
    MLCD_Write(cLCDHigh_C, gLocal_2+1);
    mDIPClearBuffer();
    return;
}

void MDIPChineseToScreen(BYTE x, BYTE y, WORD g2Local_1){       // 16 * 16
    BOOL FLocal_1;
    BYTE gLocal_1;
    BYTE gLocal_2;
    BYTE gLocal_3;
    DWORD g4Local_1;
    DWORD g4Local_2;

    if (x > 63) x -= 64;
    else x += 64;

    if (g2Local_1 < 0x80){
        g2Local_1 = g2Local_1 + (0xa3a1 - '!');
    }
    g4Local_2 = ((((g2Local_1 >> 8) - 161) * 94) + ((g2Local_1 & 0xff) - 161));
    g4Local_1 = g4Local_2 * 32;

    MLCDOffsetWrite(x, y);
 	gLocal_1 = x;
 	gLocal_3 = 0;
 	FLocal_1 = 0;
 	do {
        MWriteToLCD(gLocal_1++, MROM_Read(g4Local_1++));
        if (gLocal_1 > 127 && !FLocal_1){
            FLocal_1 = 1;
            gLocal_1 = 0;
            MLCDOffsetWrite(0, y);
        }
    } while (++gLocal_3 < 16);

    MLCDOffsetWrite(x, y+1);
 	gLocal_1 = x;
 	gLocal_3 = 0;
 	FLocal_1 = 0;
 	do{
        MWriteToLCD(gLocal_1++, MROM_Read(g4Local_1++));
        if (gLocal_1 > 127 && !FLocal_1){
            FLocal_1 = 1;
            gLocal_1 = 0;
            MLCDOffsetWrite(0, y+1);
        }
    } while (++gLocal_3 < 16);

    return;
}


BYTE MROM_Read(DWORD g4Local_1){                                // 16 * 16
    BYTE gLocal_1;
    BYTE gLocal_2;

    // A18/A17/A16处理

    gLocal_1 = g4Local_1 >> 16;
    gLocal_2 = 0xf1;
    if (gLocal_1 & 0x01) gLocal_2 |= 0x02;      // A16
    if (gLocal_1 & 0x02) gLocal_2 |= 0x08;      // A17
    if (gLocal_1 & 0x04) gLocal_2 |= 0x04;      // A18
       
    M4094DataWrite(gLocal_2);

    // A15至A8处理
    M4094DataWrite(MSwapAdderssHigh(g4Local_1 >> 8));

    p4094_HighSTB = 1;
    IOP0 = 0xff;
    p4094_HighSTB = 0;
    // A7至A9处理
    M4094DataWrite(MSwapAdderssLow(g4Local_1));
    p4094_LowSTB = 1;
    IOP0 = 0xff;
    p4094_LowSTB = 0;

    pROE = 0;
//    MUSDELAY();
    gLocal_1 = IOP0;
    pROE = 1;
        
MLED_Release();
/*
    M4094DataWrite(gLED_NewBuffer[0] & 0xbf);
    M4094DataWrite(gLED_NewBuffer[1]);

    p4094_HighSTB = 1;
    p4094_HighSTB = 0;
  */
    return gLocal_1;
}
BYTE MSwapAdderssHigh(BYTE gLocal_1){
    BYTE gLocal_2;
    gLocal_2 = 0;
    if (gLocal_1 & 0x80) gLocal_2 |= 0x04;
    if (gLocal_1 & 0x40) gLocal_2 |= 0x80;
    if (gLocal_1 & 0x20) gLocal_2 |= 0x40;
    if (gLocal_1 & 0x10) gLocal_2 |= 0x08;

    if (gLocal_1 & 0x08) gLocal_2 |= 0x10;
    if (gLocal_1 & 0x04) gLocal_2 |= 0x20;
    if (gLocal_1 & 0x02) gLocal_2 |= 0x01;
    if (gLocal_1 & 0x01) gLocal_2 |= 0x02;
    return gLocal_2;
}
BYTE MSwapAdderssLow(BYTE gLocal_1){
    BYTE gLocal_2;
    gLocal_2 = 0;
    if (gLocal_1 & 0x0080) gLocal_2 |= 0x0008;
    if (gLocal_1 & 0x0040) gLocal_2 |= 0x0004;
    if (gLocal_1 & 0x0020) gLocal_2 |= 0x0002;
    if (gLocal_1 & 0x0010) gLocal_2 |= 0x0001;

    if (gLocal_1 & 0x0008) gLocal_2 |= 0x0080;
    if (gLocal_1 & 0x0004) gLocal_2 |= 0x0040;
    if (gLocal_1 & 0x0002) gLocal_2 |= 0x0020;
    if (gLocal_1 & 0x0001) gLocal_2 |= 0x0010;
    return gLocal_2;
}

⌨️ 快捷键说明

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