免费观看黄a一级视频_一级毛片看看_亚洲AⅤ无码日韩AV无码网站_国产未成满18禁止_亚洲无码免费网站_午夜影院播放版_97亚洲精品国偷自产在_国产毛片一区二区三区va在线_久久www免费人成人片_成人网欧美在线视频

/ EN
13922884048

資訊中心

information centre
/
/

MCU最強(qiáng)科普總結(jié)【建議收藏】(三)

發(fā)布時(shí)間:2022-03-17作者來源:薩科微瀏覽:1478

12、漢字概覽:  
為了將漢字在顯示器或打印機(jī)上輸出,把漢字按圖形符號(hào)設(shè)計(jì)成點(diǎn)陣圖,就得到了相應(yīng)的點(diǎn)陣代碼(字形碼)。  
  為在計(jì)算機(jī)內(nèi)表示漢字而統(tǒng)一的編碼方式形成漢字編碼叫內(nèi)碼(如國標(biāo)碼),內(nèi)碼是惟一的(相當(dāng)于該字的身份證號(hào))。為方便漢字輸入而形成的漢字編碼為輸入碼,屬于漢字的外碼,輸入碼因編碼方式不同而不同,是多種多樣的。為顯示和打印輸出漢字而形成的漢字編碼為字形碼,計(jì)算機(jī)通過漢字內(nèi)碼在字模庫中找出漢字的字形碼,實(shí)現(xiàn)其轉(zhuǎn)換。  
  機(jī)內(nèi)碼  
  根據(jù)國標(biāo)碼的規(guī)定,每一個(gè)漢字都有了確定的二進(jìn)制代碼,但是這個(gè)代碼在計(jì)算機(jī)內(nèi)部處理時(shí)會(huì)與ASCII碼發(fā)生沖突,為解決這個(gè)問題,把國標(biāo)碼的每一個(gè)字節(jié)的首位上加1。由于ASCII碼只用7位,所以,這個(gè)首位上的“1”就可以作為識(shí)別漢字代碼的標(biāo)志,計(jì)算機(jī)在處理到首位是“1”的代碼時(shí)把它理解為是漢字的信息,在處理到首位是“0”的代碼時(shí)把它理解為是ASCII碼。經(jīng)過這樣處理后的國標(biāo)碼(內(nèi)碼)就是機(jī)內(nèi)碼。  
  如果我們把這個(gè)“口”字圖形的“.”處用“0”代替,就可以很形象地得到“口”的字形碼:0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H。計(jì)算機(jī)要輸出“口”時(shí),先找到顯示字庫的首址,根據(jù)“口”的機(jī)內(nèi)碼經(jīng)過計(jì)算,再去找到“口”的字形碼,然后根據(jù)字形碼(要用二進(jìn)制)通過字符發(fā)生器的控制在屏幕上進(jìn)行依次掃描,其中二進(jìn)制代碼中是“0”的地方空掃,是“1”的地方掃出亮點(diǎn),于是就可以得到“口”的字符圖形。  
  漢字字模按國標(biāo)碼的順序排列,以二進(jìn)制文件形式存放在存儲(chǔ)器中,構(gòu)成漢字字模字庫,亦稱為漢字字形庫,稱漢字庫  
  兩種編碼方法,見頭文件
    GB1616.h//------------------ 漢字字模的數(shù)據(jù)結(jié)構(gòu)定義 ------------------------//struct typFNT_GB16 //漢字字模數(shù)據(jù)結(jié)構(gòu){ unsignedchar  Index[3]; //漢字內(nèi)碼索引  unsignedchar   Msk[32]; //點(diǎn)陣碼數(shù)據(jù) }; /////////////////////////////////////////////////////////////////////////// 漢字字模表                                                        //// 漢字庫: 宋體16.dot,橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下        ///////////////////////////////////////////////////////////////////////////conststruct  typFNT_GB16 codeGB_16[]= //數(shù)據(jù)表{/*------------------------------------------------------------------------------;  源文件 /文字 :徐;  寬×高(像素):16×16------------------------------------------------------------------------------*/ "徐",0x10,0x80,0x10,0x80,0x21,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,
     

    這個(gè)結(jié)構(gòu),很簡單的:一個(gè)是內(nèi)碼,一個(gè)點(diǎn)陣序列,以前的點(diǎn)陣庫是按內(nèi)碼順序放的,不需要內(nèi)碼索引的,如果只放部分漢字,就需要內(nèi)碼索引了。(前面的漢字“徐”是為了要輸出“徐”的時(shí)候找到該字的點(diǎn)陣序列,這個(gè)點(diǎn)陣序列是自己寫的,當(dāng)用1602顯示時(shí),因?yàn)樵撔酒瑑?nèi)存在英文的點(diǎn)陣序列,所以就不用寫了)一般內(nèi)碼兩個(gè)字節(jié)就行了,多用1個(gè)字節(jié)是加了個(gè)尾0而已,這樣,漢字內(nèi)碼處直接放漢字字符串就可;


    codeGB_16[k].Index[0]   codeGB_16[k]說明有一個(gè)結(jié)構(gòu)體typFNT_GB16的數(shù)組叫做codeGB_16   codeGB_16[k]是數(shù)組中第k+1個(gè)成員   index是結(jié)構(gòu)體typFNT_GB16的成員,所以可以用codeGB_16[k].Index來進(jìn)行引用   同時(shí)index又是個(gè)數(shù)組,所以可以index[0]       if((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1]))   &&是 邏輯與運(yùn)算符   意思是 &&符號(hào)的兩邊的值都為真 &&的值才為真,也就是 true && true =true   這句的意思是   codeGB_16[k].Index[0]==c[0]  和 codeGB_16[k].Index[1]==c[1] 同時(shí)成立   if下面的語句才執(zhí)行   codeGB_16[]是個(gè)結(jié)構(gòu)體數(shù)組,codeGB_16[k].Index[0]是說結(jié)構(gòu)體數(shù)組的第K個(gè)結(jié)構(gòu)體的index成員的第0個(gè)元素值。    

    13、12864液晶:

    每個(gè)顯示點(diǎn)對(duì)應(yīng)一位二進(jìn)制數(shù),1 表示亮,0 表示滅。存儲(chǔ)這些點(diǎn)陣信息的RAM稱為顯示數(shù)據(jù)存儲(chǔ)器。要顯示某個(gè)圖形或漢字就是將相應(yīng)的點(diǎn)陣信息寫入到相應(yīng)的存儲(chǔ)單元中。


    繪圖RAM的地址計(jì)數(shù)器(AC)只會(huì)對(duì)水平地址(X  軸)自動(dòng)加一, 當(dāng)水平地址=0FH  時(shí)會(huì)重新設(shè)為00H  但并不會(huì)對(duì)垂直地址做進(jìn)位自動(dòng)加一,故當(dāng)連續(xù)寫入多筆資料時(shí),程序需自行判斷垂直地址是否需重新設(shè)定


      14、繪圖RAM(GDRAM)

      繪圖顯示RAM提供128×8 個(gè)字節(jié)的記憶空間,在更改繪圖RAM時(shí),先連續(xù)寫入水平與垂直的坐標(biāo)值,再寫入兩個(gè)字節(jié)的數(shù)據(jù)到繪圖RAM,而地址計(jì)數(shù)器(AC)會(huì)對(duì)水平地址(X 地址)自動(dòng)加一,當(dāng)水平地址為0XFH 時(shí)會(huì)重新設(shè)為00H ;不會(huì)對(duì)垂直地址做進(jìn)位自動(dòng)加 1. 。在寫入繪圖 RAM的期間,繪圖顯示必須關(guān)閉。

     
      [cpp] view plain copy// 顯示漢字 voiddispString (uchar X, Y,uchar *msg) //X為哪一行,Y 為哪一列。msg 為漢字 {  if(X==0)       X = 0x80; // [敏感詞]行,漢字顯示坐標(biāo)  else if(X==1) X = 0x90; // 第二行  else if(X==2) X = 0x88; // 第三行  else X = 0x98; //第四行  Y = X + Y; //Y 為1 往右移一位  write_com(Y); // 寫入坐標(biāo)  while (*msg)  {  write_data(*msg++); //顯示漢字 } } //////////////////////////////// //////////////// /////////////// // 顯示圖象 voiddisppicture(uchar code *adder) {  uint i,j; //*******顯示上半屏內(nèi)容設(shè)置  for(i=0;i<32;i++) // 上半屏32個(gè)列地址  {  write_com(0x80 + i); //SET  垂直地址 VERTICALADD  write_com(0x80); //SET   水平地址 HORIZONTAL ADD  for(j=0;j<16;j++)  {  write_data(*adder);  adder++;  }  } //*******顯示下半屏內(nèi)容設(shè)置  for(i=0;i<32;i++) //  {  write_com(0x80 + i); //SET 垂直地址 VERTICALADD  write_com(0x88); //SET  水平地址 HORIZONTAL ADD  for(j=0;j<16;j++)  {  write_data(*adder);  adder++;  }  } }
       
         

      對(duì)于C語言,定義的變量,自動(dòng)為其分配空間,其地址為該變量的名稱。通過該名稱,可以在內(nèi)存中招到該數(shù)據(jù),經(jīng)過運(yùn)算得到新數(shù)據(jù),而匯編中需要編程者自己定義存儲(chǔ)空間及把數(shù)據(jù)送到累加器等進(jìn)行運(yùn)算,每一步都需要編程者操作。而C語言這些過程由編譯器去完成。


        15、一些有用的答疑解惑

        ①、單片機(jī)C語言,其變量的內(nèi)存開辟是如何進(jìn)行的?難道是編譯器,在編譯過程中智能地加入分配與回收的代碼?關(guān)鍵之處在于我所做的程序,如何保證其沒有內(nèi)存溢出錯(cuò)誤?如果我進(jìn)行的是遞歸運(yùn)算,這樣的話,內(nèi)存需求是很難自己計(jì)算的。  
        ②、單片機(jī)C語言在變量定義上是否會(huì)受到約束?比如浮點(diǎn)型數(shù)據(jù)的乘除運(yùn)算,通過匯編還寫,代碼相當(dāng)復(fù)雜,如果直接C語言來寫,豈不過份簡單?  
        ③、單片機(jī)C語言生成的hex文件中,指令及數(shù)據(jù)的ROM的地址分布是否編譯器自動(dòng)分配?可否用戶進(jìn)行分配?  
        回答1:c語言寫的單片機(jī)程序,先由1個(gè)程序(好像是c51.exe)編譯,編譯完成后,變量的存儲(chǔ)空間大小已經(jīng)安排好,只是還沒分配具體地址(地址浮動(dòng)),接下來有另一個(gè)程序(好像是a51.exe)進(jìn)行連接,連接以后,具體地址確定。  
        如果變量過多,編譯會(huì)提示數(shù)據(jù)段too large,要保證其沒有內(nèi)存溢出錯(cuò)誤,主要考慮堆棧是否溢出,要靠經(jīng)驗(yàn)  
        單片機(jī)c語言一般禁止遞歸,一般都避免用遞歸運(yùn)算,單片機(jī)畢竟不是PC,會(huì)影響速度的,要遞歸的話,用DSP芯片更合適,總之,要會(huì)挑合適的芯片  
        回答2:變量的大?。ㄎ粩?shù))一般和芯片累加器的位數(shù)一樣,比如51常用8位的,因?yàn)樗?位單片機(jī)

      單片機(jī)可以定義位變量,但是不可以定義位數(shù)組。用c語言寫只是看著簡單,實(shí)際生成的代碼量是最多的,用于控制的單片機(jī)幾乎不用浮點(diǎn)數(shù)運(yùn)算,不僅慢還麻煩還占地方,如果是DSP芯片,本身有適合的硬件結(jié)構(gòu),會(huì)好很多。  
       

      回答3:一般是自動(dòng)分配的,可以c語言和匯編語言混合編程,也可以用Keil C在線匯編,芯片與外部的數(shù)據(jù)交換都是通過端口進(jìn)行的。


      免責(zé)聲明:本文轉(zhuǎn)載自“國際電子商情”,本文僅代表作者個(gè)人觀點(diǎn),不代表薩科微及行業(yè)觀點(diǎn),只為轉(zhuǎn)載與分享,支持保護(hù)知識(shí)產(chǎn)權(quán),轉(zhuǎn)載請(qǐng)注明原出處及作者,如有侵權(quán)請(qǐng)聯(lián)系我們刪除。

      公司電話:+86-0755-83044319
      傳真/FAX:+86-0755-83975897
      郵箱:1615456225@qq.com
      QQ:3518641314 李經(jīng)理  

      QQ:332496225   丘經(jīng)理

      地址:深圳市龍華新區(qū)民治大道1079號(hào)展滔科技大廈C座809室

      服務(wù)熱線

      0755-83044319

      霍爾元件咨詢

      肖特基二極管咨詢

      TVS/ESD咨詢

      獲取產(chǎn)品資料

      客服微信

      微信服務(wù)號(hào)