找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3892|回復: 8
收起左側(cè)

求解一段單片機小程序,關(guān)于12864(不帶字符)

[復制鏈接]
ID:379492 發(fā)表于 2018-9-7 09:29 | 顯示全部樓層 |閱讀模式
struct                         //漢字可以隨便加
{
uchar index[2];            
uchar msk[32];                     
}
code hzdate[6] = {        
"新",
          0x20,0x24,0x2C,0x35,0xE6,0x34,0x2C,0x24,0x00,0xFC,0x24,0x24,0xE2,0x22,0x22,0x00,
      0x21,0x11,0x4D,0x81,0x7F,0x05,0x59,0x21,0x18,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,

"鄉(xiāng)", 0x00,0x00,0x00,0x20,0x30,0x28,0xAC,0xA7,0x62,0x20,0x30,0x1C,0xC8,0x80,0x00,0x00,
      0x00,0x40,0x40,0x42,0x47,0x23,0x22,0x22,0x12,0x11,0x09,0x07,0x01,0x00,0x00,0x00,

"安", 0x80,0x90,0x8C,0x84,0x84,0xF4,0xA5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x84,0x00,
      0x80,0x80,0x80,0x40,0x47,0x28,0x28,0x10,0x28,0x24,0x43,0xC0,0x40,0x00,0x00,0x00,

"科", 0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,
      0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00,

"電", 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
      0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,

"子", 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,
      0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,  
};

/**********************字形碼位置檢索************************/  
  uint hz(uint v)
{         uchar k;
    uint c;         
          for(k=0;k<6;k++)
        {
         c=hzdate[k].index[0]<<8|hzdate[k].index[1];   
         if(v==c) return (k);
        }
}



回復

使用道具 舉報

ID:379492 發(fā)表于 2018-9-7 09:30 | 顯示全部樓層
想問一下
struct                         //漢字可以隨便加

{

uchar index[2];            

uchar msk[32];                     

}
這個數(shù)組什么意思?

c=hzdate[k].index[0]<<8|hzdate[k].index[1];   這句程序是什么意思?
求大神賜教
回復

使用道具 舉報

ID:379492 發(fā)表于 2018-9-7 12:36 | 顯示全部樓層
自己頂一個
回復

使用道具 舉報

ID:362076 發(fā)表于 2018-9-7 20:57 | 顯示全部樓層
本帖最后由 凌凈清河 于 2018-9-7 21:12 編輯

是這樣的,struct定義了一個結(jié)構(gòu)體,這個結(jié)構(gòu)體中有兩個數(shù)組元素index和msk,可以看出,這兩個數(shù)組都是unsigned char類型的,也就是說,每一個數(shù)組中的元素大小為1個字節(jié)。
然后程序使用這個結(jié)構(gòu)體定義了一個結(jié)構(gòu)體數(shù)組hzdate[6],這個時候要注意為什么6個漢字可以一起寫入到結(jié)構(gòu)體中,因為在內(nèi)存中,這一個結(jié)構(gòu)體里面兩個連續(xù)的數(shù)組空間是挨著的,也就是說,看似定義的兩個數(shù)組,實際上是一個temp[34]數(shù)組,而一次性創(chuàng)建的6個結(jié)構(gòu)體數(shù)組又把6個temp[34]的內(nèi)存空間順序安排了。
上面這個是理解的基礎(chǔ)。然后進行下一步分析?梢钥吹,每一個漢字在字模表里的存放分為兩個部分,第一個部分是漢字本身,而后跟著漢字的字模,因為在計算機中一個漢字占用的是兩個字節(jié),而注意到之前定義的index數(shù)組是unsigned char類型,所以需要index[2]存放這兩個字節(jié)的漢字信息,這個時候就把漢字轉(zhuǎn)換成兩個unsigned char類型的數(shù)值,也就是拆分之后的漢字編碼,其中,高8位被存放在index[0]中,低8位被存放在index[1]中,便于后續(xù)比對。
而6個漢字的編碼和字模就分別存放在結(jié)構(gòu)體數(shù)組中的每個元素結(jié)構(gòu)體里了。

我們知道結(jié)構(gòu)體中成員的調(diào)用,是結(jié)構(gòu)體.成員名,所以hzdate[k].index[0]指代的是hzdate結(jié)構(gòu)體數(shù)組中的第k個元素的index成員中的第1個元素;
我們繼續(xù),<<這個符號是將數(shù)據(jù)(理解成二進制)左移,所以<<8指的是左移8個位,而8位正好是一個字節(jié)的大小,|這個符號將index[1]和左移過的index[0]進行位或操作,可以理解為將漢字的高8位和低8位拼接起來了。故hzdate[k].index[0]<<8|hzdate[k].index[1]這句話的意思就是將第k個漢字的字型編碼由兩個unsigned char類型合并成unsigned int類型,繼而賦值給c。

后面的就好理解多了,判斷形參v是否等于c,即漢字編碼匹配,成功返回漢字在結(jié)構(gòu)體數(shù)組中的位置k,就是比對到的那個計數(shù)值。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:111634 發(fā)表于 2018-9-8 21:16 | 顯示全部樓層
本帖最后由 zl2168 于 2018-9-9 17:12 編輯

不要去看這些沒頭沒腦的東東,費時費力一場空。
給你介紹一本書,張志良編著的:《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行,可演示,可觀測,
程序語句條條有注解
實驗25 LCD12864顯示屏顯示.rar (60.48 KB, 下載次數(shù): 8)
12864.jpg
Proteus仿真一下,確認有效。以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行,可演示,可觀測,程序語句條條有注解。
回復

使用道具 舉報

ID:164602 發(fā)表于 2018-9-10 08:37 | 顯示全部樓層
850787641@qq.co 發(fā)表于 2018-9-7 09:30
想問一下
struct                         //漢字可以隨便加

        unsigned char  Index[2];            // 漢字內(nèi)碼索引,一個漢字占兩個字節(jié)       
        unsigned char  Msk[32];             // 點陣碼數(shù)據(jù)(16*16有32個數(shù)據(jù))
回復

使用道具 舉報

ID:379492 發(fā)表于 2018-9-12 08:52 | 顯示全部樓層
凌凈清河 發(fā)表于 2018-9-7 20:57
是這樣的,struct定義了一個結(jié)構(gòu)體,這個結(jié)構(gòu)體中有兩個數(shù)組元素index和msk,可以看出,這兩個數(shù)組都是unsi ...

解釋的太詳細了,都是一個個手打的,這么多字,講的非常詳細,這下我理解了,太謝謝你了,真的太謝謝你了

評分

參與人數(shù) 1黑幣 +15 收起 理由
凌凈清河 + 15 不用謝,至少我這些字沒白打哈~

查看全部評分

回復

使用道具 舉報

ID:379492 發(fā)表于 2018-9-12 08:53 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2018-9-10 08:37
unsigned char  Index[2];            // 漢字內(nèi)碼索引,一個漢字占兩個字節(jié)       
        unsigned char  Msk[32]; ...

好的,謝謝你啊,一樓講的的很詳細,我看懂了,和你說的是一樣,謝謝啊
回復

使用道具 舉報

ID:379492 發(fā)表于 2018-9-13 11:11 | 顯示全部樓層
850787641@qq.co 發(fā)表于 2018-9-12 08:52
解釋的太詳細了,都是一個個手打的,這么多字,講的非常詳細,這下我理解了,太謝謝你了,真的太謝謝你了

我又遇到了一個問題,我開了一個新帖子,能幫幫我嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表