<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          S3C2440 LCD字符顯示

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          其實(shí)每一字符就是一幅圖像,字符的大小對(duì)應(yīng)于圖像的大小,字符的筆畫對(duì)應(yīng)于圖像的內(nèi)容。那么如何把字符轉(zhuǎn)換為圖像呢?簡(jiǎn)單的方法是使用“字模提取”之類的軟件,它能夠把任意的字符轉(zhuǎn)換為一個(gè)字節(jié)型的數(shù)組,數(shù)組元素中的每一位代表LCD上的一個(gè)像素點(diǎn),當(dāng)為1時(shí),表示該位置為字符的一個(gè)筆畫,需要上色,而為0時(shí),表示不是筆畫,學(xué)過(guò)12864無(wú)字庫(kù)液晶的相信肯定會(huì)使用LCD字符顯示。比較簡(jiǎn)單,貼兩個(gè)函數(shù)僅供參考。

          1. /**************************************************************
          2. *在LCD屏幕上指定坐標(biāo)點(diǎn)寫ASCII碼(8X16)
          3. *取模方式為陰碼逐行式順向十六進(jìn)制數(shù)C51格式(使用軟件為(PCtoLCD2002))
          4. *參數(shù)x,y為字符左上點(diǎn)坐標(biāo)
          5. *c為字體顏色bk_c為字體背景色
          6. *st為1時(shí)不使用背景色為0時(shí)使用背景色
          7. *pZK為字符的數(shù)組
          8. **************************************************************/
          9. voidLcd_PutASCII(unsignedintx,unsignedinty,unsignedintc,unsignedintbk_c,unsignedintst,unsignedchar*pZK)
          10. {
          11. unsignedshortinti,j;
          12. unsignedcharmask,buf;
          13. for(i=0;i<16;i++)
          14. {
          15. mask=0x80;
          16. buf=pZK[i];
          17. for(j=0;j<8;j++)
          18. {
          19. if(buf&mask)
          20. {
          21. PutPixel(x+j,y+i,c);
          22. }
          23. else
          24. {
          25. if(!st)
          26. {
          27. PutPixel(x+j,y+i,bk_c);
          28. }
          29. }
          30. mask=mask>>1;
          31. }
          32. }
          33. }
          34. /**************************************************************
          35. *在LCD屏幕上指定坐標(biāo)點(diǎn)寫漢字(16X16)
          36. *取模方式為陰碼逐行式順向十六進(jìn)制數(shù)C51格式(使用軟件為(PCtoLCD2002))
          37. *參數(shù)x,y為漢字左上點(diǎn)坐標(biāo)
          38. *c為字體顏色bk_c為字體背景色
          39. *st為1時(shí)不使用背景色為0時(shí)使用背景色
          40. *pZK為漢字的數(shù)組
          41. **************************************************************/
          42. voidLcd_PutHZ(unsignedintx,unsignedinty,unsignedintc,unsignedintbk_c,unsignedintst,unsignedchar*pZK)
          43. {
          44. unsignedshortinti,j;
          45. unsignedcharmask,buf;
          46. for(i=0;i<16;i++)
          47. {
          48. //左
          49. mask=0x80;
          50. buf=pZK[i*2];
          51. for(j=0;j<8;j++)
          52. {
          53. if(buf&mask)
          54. {
          55. PutPixel(x+j,y+i,c);
          56. }
          57. else
          58. {
          59. if(!st)
          60. {
          61. PutPixel(x+j,y+i,bk_c);
          62. }
          63. }
          64. mask=mask>>1;
          65. }
          66. //右
          67. mask=0x80;
          68. buf=pZK[i*2+1];
          69. for(j=0;j<8;j++)
          70. {
          71. if(buf&mask)
          72. {
          73. PutPixel(x+j+8,y+i,c);
          74. }
          75. else
          76. {
          77. if(!st)
          78. {
          79. PutPixel(x+j+8,y+i,bk_c);
          80. }
          81. }
          82. mask=mask>>1;
          83. }
          84. }
          85. }


          如果要在程序中顯示大量的中文字符,是不是要把這些字符都取模???回答是肯定的,但前人已經(jīng)為我們完成了這一步,做成了數(shù)據(jù)庫(kù),并且進(jìn)行了編碼,只要按照編碼規(guī)則調(diào)用該庫(kù)文件,就可以檢索到相要的字符。下面就來(lái)說(shuō)說(shuō)編碼規(guī)則:每個(gè)漢字是由兩個(gè)字節(jié)表示的,前一個(gè)字節(jié)表示的區(qū)號(hào),后一個(gè)字節(jié)表示的位號(hào),那么漢字在漢字庫(kù)中的位置為:94×(區(qū)號(hào)-1)+(位號(hào)-1)。94表示的是每個(gè)區(qū)里一共有94個(gè)漢字,減1表示的是數(shù)組是從0開(kāi)始,而區(qū)號(hào)和位號(hào)是從1開(kāi)始的。具體到漢字在某一數(shù)據(jù)庫(kù)中的位置,還需要乘以一個(gè)漢字字模所占的字節(jié)數(shù),即[94×(區(qū)號(hào)-1)+(位號(hào)-1)]×一個(gè)漢字字模所占字節(jié)數(shù)。如一個(gè)字模大小為16×16的宋體數(shù)據(jù)庫(kù),庫(kù)里每個(gè)漢字所占的字節(jié)為16×16÷8=32,則每個(gè)漢字在該宋體數(shù)據(jù)庫(kù)中的位置為:[94×(區(qū)號(hào)-1)+(位號(hào)-1)]×32。ASCII碼的字符調(diào)用比漢字字符要簡(jiǎn)單,只要把它乘以字模所占字節(jié)數(shù)即可找到該字符所在字庫(kù)的位置,如8×16的ASCII字庫(kù),ASCII碼在該字庫(kù)的位置為ASCII×16。如果中文字符和ASCII碼混合在一樣,如何區(qū)分它們呢?其實(shí)也很簡(jiǎn)單,ASCII碼的最高位是0,而中文的最高位是1,因此當(dāng)讀取到的一個(gè)字節(jié)的最高位是0,則該字節(jié)為ASCII碼,它的下一個(gè)字節(jié)與這個(gè)字節(jié)無(wú)關(guān);當(dāng)取得到的字節(jié)的最高位是1,則表示的是中文字符,并且該字節(jié)與它的下一個(gè)字節(jié)組合在一起表示完整的一個(gè)漢字。每個(gè)漢字及符號(hào)以兩個(gè)字節(jié)來(lái)表示。第一個(gè)字節(jié)稱為“高位字節(jié)”(也稱“區(qū)字節(jié))”,第二個(gè)字節(jié)稱為“低位字節(jié)”(也稱“位字節(jié)”)。

          本文引用地址:http://www.ex-cimer.com/article/201611/319209.htm

          貼出使用字庫(kù)顯示漢字和字符的代碼

          [cpp]view plaincopy
          1. /**************************************************************
          2. 在LCD屏幕上指定坐標(biāo)點(diǎn)寫ASCII碼
          3. **************************************************************/
          4. voidLcd_PutASCII(unsignedintx,unsignedinty,unsignedcharch,unsignedintc,unsignedintbk_c,unsignedintst)
          5. {
          6. unsignedshortinti,j;
          7. unsignedchar*pZK,mask,buf;
          8. pZK=&__VGA[ch*16];
          9. for(i=0;i<16;i++)
          10. {
          11. mask=0x80;
          12. buf=pZK[i];
          13. for(j=0;j<8;j++)
          14. {
          15. if(buf&mask)
          16. {
          17. PutPixel(x+j,y+i,c);
          18. }
          19. else
          20. {
          21. if(!st)
          22. {
          23. PutPixel(x+j,y+i,bk_c);
          24. }
          25. }
          26. mask=mask>>1;
          27. }
          28. }
          29. }
          30. /**************************************************************
          31. 在LCD屏幕上指定坐標(biāo)點(diǎn)寫漢字
          32. **************************************************************/
          33. voidLcd_PutHZ(unsignedintx,unsignedinty,unsignedshortintQW,unsignedintc,unsignedintbk_c,unsignedintst)
          34. {
          35. unsignedshortinti,j;
          36. unsignedchar*pZK,mask,buf;
          37. pZK=&__CHS[(((QW>>8)-1)*94+(QW&0x00FF)-1)*32];
          38. for(i=0;i<16;i++)
          39. {
          40. //左
          41. mask=0x80;
          42. buf=pZK[i*2];
          43. for(j=0;j<8;j++)
          44. {
          45. if(buf&mask)
          46. {
          47. PutPixel(x+j,y+i,c);
          48. }
          49. else
          50. {
          51. if(!st)
          52. {
          53. PutPixel(x+j,y+i,bk_c);
          54. }
          55. }
          56. mask=mask>>1;
          57. }
          58. //右
          59. mask=0x80;
          60. buf=pZK[i*2+1];
          61. for(j=0;j<8;j++)
          62. {
          63. if(buf&mask)
          64. {
          65. PutPixel(x+j+8,y+i,c);
          66. }
          67. else
          68. {
          69. if(!st)
          70. {
          71. PutPixel(x+j+8,y+i,bk_c);
          72. }
          73. }
          74. mask=mask>>1;
          75. }
          76. }
          77. }
          78. //----------------------
          79. voidLcd_printf(unsignedintx,unsignedinty,unsignedintc,unsignedintbk_c,unsignedintst,char*fmt,...)
          80. {
          81. char__LCD_Printf_Buf[256];//可以顯示128個(gè)漢字或字符
          82. va_listap;
          83. unsignedchar*pStr=(unsignedchar*)__LCD_Printf_Buf;
          84. unsignedinti=0;
          85. va_start(ap,fmt);
          86. vsprintf(__LCD_Printf_Buf,fmt,ap);
          87. va_end(ap);
          88. while(*pStr!=0)
          89. {
          90. switch(*pStr)
          91. {
          92. casen:
          93. {
          94. break;
          95. }
          96. default:
          97. {
          98. if(*pStr>0xA0&*(pStr+1)>0xA0)//中文輸出
          99. {
          100. Lcd_PutHZ(x,y,(*pStr-0xA0)*0x0100+*(pStr+1)-0xA0,c,bk_c,st);
          101. pStr++;
          102. i++;
          103. x+=16;
          104. }
          105. else//英文輸出
          106. {
          107. Lcd_PutASCII(x,y,*pStr,c,bk_c,st);
          108. x+=8;
          109. }
          110. break;
          111. }
          112. }
          113. pStr++;
          114. i++;
          115. if(i>256)break;
          116. }
          117. }



          關(guān)鍵詞: S3C2440LCD字符顯

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();