在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            S3C2440 LCD字符顯示

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

            1. /**************************************************************
            2. *在LCD屏幕上指定坐標(biāo)點(diǎn)寫(xiě)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)寫(xiě)漢字(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.biyoush.com/article/201611/319209.htm

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

            [cpp]view plaincopy
            1. /**************************************************************
            2. 在LCD屏幕上指定坐標(biāo)點(diǎn)寫(xiě)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)寫(xiě)漢字
            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)閉