久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1651|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)LCD12864緩存繪制字體的簡單程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
看了示波器的字體繪制程序,用了標(biāo)志位,覺得有點(diǎn)麻煩,自己寫了個(gè)程序,一兩個(gè)函數(shù),最大漢子32*32,可以覆蓋,疊加,反顯等操作。第一次51hei論壇上發(fā)資料,勿噴!!!謝謝!

void OLED_Draw_Number(unsigned char _x,unsigned char _y,unsigned char *chr,unsigned char wordsize , unsigned char kind)//要寫入字符串,字號(hào)wordsize,寫入方式kind:0疊加  1覆蓋 2疊加取反 3覆蓋取反
{
        uchar WIDTH,HEIGHT;//字符寬度
        uchar c;//字符寬度
        uchar i;
        uint  y=_y<<4;
        uchar left_num;//字符在16位中左移的位置
        uint  x_Byte,x_bit;//X寫入的字節(jié)位置
        unsigned long  Uint_Buf;//要寫入時(shí)用的緩存
        unsigned long qk;//對(duì)應(yīng)緩存時(shí)的位,對(duì)應(yīng)字符寬度
        unsigned long qk1;//對(duì)應(yīng)緩存時(shí)的位,對(duì)應(yīng)字符寬度
        switch(wordsize)//轉(zhuǎn)換字符寬度
        {
                case F6_8: WIDTH=6;//保存字符寬度
                        HEIGHT=8;//保存字符高度
                  qk=0x003f;//B 0000 0000 0011 1111//用于擦除需要覆蓋的位置
                        break;
                case F6_12: WIDTH=6;//保存字符寬度
                        HEIGHT=12;//保存字符高度
                  qk=0x003f;//B 0000 0000 0011 1111//用于擦除需要覆蓋的位置
                        break;
                case F8_16: WIDTH=8;//保存字符寬度
                        HEIGHT=16;//保存字符高度
                  qk=0x00ff;//B 0000 0000 0011 1111//用于擦除需要覆蓋的位置
                        break;
                case F12_24: WIDTH=12;//保存字符寬度
                        HEIGHT=24;//保存字符高度
                  qk=0x0fff;//B 0000 0000 0011 1111//用于擦除需要覆蓋的位置
                        break;
                case HZ16_16: WIDTH=16;//保存字符寬度
                        HEIGHT=16;//保存字符高度
                  qk=0x0fff;//B 0000 0000 0011 1111//用于擦除需要覆蓋的位置
                        break;
                default:break;
        }
        
               

           //漢字16*16
        while (*chr)//循環(huán)寫入字符
        {
          c = *chr - ' ';//將ASSIC碼轉(zhuǎn)換成表格位置
                x_Byte=_x>>3;//根據(jù)寫入像素位置計(jì)算寫入的字節(jié)位置
                x_bit=_x&7;//根據(jù)寫入像素位置計(jì)算寫入的字節(jié)位置
                left_num=32-WIDTH-x_bit;//計(jì)算字符左移數(shù)量
                for (i = 0; i < HEIGHT; i++)
                {

                        
                        switch(wordsize)//轉(zhuǎn)換字符寬度
                        {
                                case F6_8: Uint_Buf=F6x8[c][ i];//取出對(duì)應(yīng)位置的字符表信息
                                                                break;
                                case F6_12: Uint_Buf=F6x12[c][ i];//取出對(duì)應(yīng)位置的字符表信息
                                                                break;
                                case F8_16: Uint_Buf=F8x16[c][ i];//取出對(duì)應(yīng)位置的字符表信息
                                                                break;
                                case F12_24: Uint_Buf=F12x24[c][i*2]<<8|F12x24[c][i*2+1];//取出對(duì)應(yīng)位置的字符表信息
                                                                break;
                                case HZ16_16: Uint_Buf=F12x24[c][i*2]<<8|F12x24[c][i*2+1];//取出對(duì)應(yīng)位置的字符表信息
                                                                break;
                                default:break;
                        }
                        Uint_Buf<<=left_num;//將字符行信息左移到待寫入位置
                        qk1=qk<<left_num;//將字符行信息左移到待寫入位置
                        if((kind==2)||(kind==3))Uint_Buf=~Uint_Buf&qk1;//是否反顯
                        
                        if((kind==1)||(kind==3))*((unsigned long *)(&Main_BUFF1+y+x_Byte))&=~qk1;//是否覆蓋掉原來的數(shù)據(jù)  寫入方式kind: 0疊加  1覆蓋 2疊加取反 3覆蓋取反
                        *((unsigned long *)(&Main_BUFF1+y+x_Byte))|=Uint_Buf;//將字符行信息寫入到緩存區(qū)
                        x_Byte+=OLED_WIDTH>>3;
                        
                }        
                _x+=WIDTH;
                chr++;
        }        
}

屏幕截圖 2023-07-19 094641.png (21.08 KB, 下載次數(shù): 54)

屏幕截圖 2023-07-19 094641.png

12864_OLED緩存程序1.1 添加兩個(gè)主緩存.7z

43.17 KB, 下載次數(shù): 6, 下載積分: 黑幣 -5

Keil代碼下載

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩精品久久 | 欧美成人免费在线视频 | 天天干人人 | 欧美国产一区二区三区 | 美女逼网站 | 日韩精品中文字幕在线 | 日韩av中文 | 中文字幕不卡 | 亚洲福利一区 | 午夜影院中文字幕 | 91综合网 | 精品日韩欧美一区二区 | 毛片av免费看 | 伊人免费在线观看高清 | 久久精品69 | 亚洲人人| 综合亚洲视频 | 国产精品夜色一区二区三区 | 久久久精品一区 | 日韩一区二区在线播放 | 亚洲福利网 | 国产精品久久久久久久久久久久久 | 欧美精品久久久久 | 日韩精品三区 | 在线播放一区 | 欧美日韩精品一区二区 | 91玖玖 | 色中文在线 | 精品真实国产乱文在线 | 国产成人精品一区二区三区视频 | 日韩专区中文字幕 | 成人免费在线电影 | 国精日本亚洲欧州国产中文久久 | 国产一区免费视频 | 国产视频中文字幕 | 亚洲xxxxx| 亚洲网在线 | 99亚洲视频 | 中文字幕在线观看av | www.久久.com| 天天综合91 |