標(biāo)題: 請幫忙修改程序 字符顯示 [打印本頁]

作者: 芙蓉焊料    時間: 2024-9-16 17:08
標(biāo)題: 請幫忙修改程序 字符顯示
這是買OLED屏給的參考程序,但只能顯示8x16字符,現(xiàn)在想顯示16x32字符請問該怎么改呢?謝謝!
void Display_ASCII8X16(uint x0,uint y0,uchar *s) //顯示一個英文字符
{
        int i,j,k,x,y,xx;
       
        unsigned char qm;
       
        long int ulOffset;
       
        char  ywbuf[32],temp[2];

        for(i = 0; i<strlen((char*)s);i++)
        {
                if(((unsigned char)(*(s+i))) >= 161)
                {
                        temp[0] = *(s+i);
                        temp[1] = '\0';
                        return;
                }
               
                else
                {
                        qm = *(s+i);

                        ulOffset = (long int)(qm) * 16;
                       
      for (j = 0; j < 16; j ++)
      {
                                ywbuf[j]=Zk_ASCII8X16[ulOffset+j];
      }
            
      for(y = 0;y < 16;y++)
      {
                for(x=0;x<8;x++)
                {
             k=x % 8;
                       
                                          if(ywbuf[y]&(0x80 >> k))
                                           {
                                                  xx=x0+x+i*8;
                                            PutPixel(xx,y+y0,RED);
                                          }
                                                       
                                   }
      }

                }
        }            
}
作者: 飛云居士    時間: 2024-9-16 18:46
要將8x16字符顯示改為16x32字符顯示,你需要對原始代碼進(jìn)行一些修改。以下是步驟和代碼修改:

1. **修改字符數(shù)據(jù)集**:首先,你需要確保你有一個16x32的字符數(shù)據(jù)集。這意味著每個字符將占用32個字節(jié)而不是原來的16個字節(jié)。

2. **修改偏移量計算**:由于每個字符現(xiàn)在占用32個字節(jié),你需要調(diào)整偏移量的計算。

3. **修改顯示邏輯**:你需要調(diào)整顯示邏輯以適應(yīng)新的字符大小。

以下是修改后的代碼示例:

```c
void Display_ASCII16X32(uint x0,uint y0,uchar *s) //顯示一個英文字符
{
    int i, j, k, x, y, xx;
    unsigned char qm;

    long int ulOffset;

    char  ywbuf[64]; // 每個字符32個字節(jié)

    for(i = 0; i<strlen((char*)s);i++)
    {
        if(((unsigned char)(*(s+i))) >= 161)
        {
            return; // 非ASCII字符處理
        }
        else
        {
            qm = *(s+i);

            ulOffset = (long int)(qm) * 32; // 每個字符32個字節(jié)

            for (j = 0; j < 32; j ++) // 每個字符32行
            {
                ywbuf[j] = Zk_ASCII16X32[ulOffset + j]; // 假設(shè)你有一個16x32的字符數(shù)據(jù)集
            }

            for(y = 0; y < 32; y++) // 每個字符32行
            {
                for(x = 0; x < 16; x++) // 每個字符16列
                {
                    k = x % 8;

                    if(ywbuf[y] & (0x80 >> k))
                    {
                        xx = x0 + x + i * 16; // 每個字符寬度為16
                        PutPixel(xx, y + y0, RED);
                    }
                }
            }
        }
    }
}
```

### 關(guān)鍵修改點(diǎn):
1. **字符數(shù)據(jù)集**:假設(shè)你有一個名為 `Zk_ASCII16X32` 的數(shù)據(jù)集,它包含16x32的字符數(shù)據(jù)。
2. **偏移量計算**:`ulOffset = (long int)(qm) * 32;` 每個字符32個字節(jié)。
3. **顯示邏輯**:`for(y = 0; y < 32; y++)` 和 `for(x = 0; x < 16; x++)` 分別處理32行和16列。

### 注意事項(xiàng):
- 確保你的 `Zk_ASCII16X32` 數(shù)據(jù)集是正確的,并且每個字符占用32個字節(jié)。
- 調(diào)整 `PutPixel` 函數(shù)以適應(yīng)新的顯示尺寸。
- 根據(jù)你的硬件和庫函數(shù),可能需要進(jìn)一步調(diào)整代碼。

通過這些修改,你應(yīng)該能夠?qū)@示從8x16字符改為16x32字符。
作者: 芙蓉焊料    時間: 2024-9-17 08:55
飛云居士 發(fā)表于 2024-9-16 18:46
要將8x16字符顯示改為16x32字符顯示,你需要對原始代碼進(jìn)行一些修改。以下是步驟和代碼修改:

1. **修改 ...

謝謝辛苦了!有了您的詳細(xì)注釋示范程序?qū)W(xué)習(xí)有很大幫助
作者: 芙蓉焊料    時間: 2024-9-17 18:33
飛云居士 發(fā)表于 2024-9-16 18:46
要將8x16字符顯示改為16x32字符顯示,你需要對原始代碼進(jìn)行一些修改。以下是步驟和代碼修改:

1. **修改 ...

程序修改后只能顯示16x32點(diǎn)陣,請問是什么原因?
main()
{
    EAXFR = 1;    //使能訪問 XFR
    CKCON = 0x00; //設(shè)置外部數(shù)據(jù)總線速度為最快
    WTST = 0x02;  //設(shè)置程序代碼等待參數(shù),賦值為 0 可將 CPU 執(zhí)行程序的速度設(shè)置為最快
       
        P2M0 = 0xff; P2M1 = 0x00; //IO口設(shè)置推挽輸出
    SPI_init(0);     //SPI初始化
        lcd_initial();
        bl=1;
        LCD_Clear(black); //屏背景顏色

        Display_ASCII16X32(8,16,"B");  //顯示“B”字符
        while(1);
  
}
以下是字符數(shù)組
#ifndef __OLEDFONT_H
#define __OLEDFONT_H          

//16*32 ASCII字符集點(diǎn)陣
unsigned char code  ascii_1632[]={          
  "B",   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x09,0x80, /* 0 */
         0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x09,0x00,0x0f,0x00,
         0x08,0x80,0x08,0x80,0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,

};
#endif




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1