亲子乱aⅴ一区二区三区下载-黑森林福利视频导航-国产电影一区二区三区-亚洲一本到无码av中文字幕-无码无套少妇毛多18pxxxx

/ EN
13922884048

資訊中心

information centre
/
/

MCU最強科普總結【建議收藏】(三)

發布時間:2022-03-17作者來源:薩科微瀏覽:1434

12、漢字概覽:  
為了將漢字在顯示器或打印機上輸出,把漢字按圖形符號設計成點陣圖,就得到了相應的點陣代碼(字形碼)。  
  為在計算機內表示漢字而統一的編碼方式形成漢字編碼叫內碼(如國標碼),內碼是惟一的(相當于該字的身份證號)。為方便漢字輸入而形成的漢字編碼為輸入碼,屬于漢字的外碼,輸入碼因編碼方式不同而不同,是多種多樣的。為顯示和打印輸出漢字而形成的漢字編碼為字形碼,計算機通過漢字內碼在字模庫中找出漢字的字形碼,實現其轉換。  
  機內碼  
  根據國標碼的規定,每一個漢字都有了確定的二進制代碼,但是這個代碼在計算機內部處理時會與ASCII碼發生沖突,為解決這個問題,把國標碼的每一個字節的首位上加1。由于ASCII碼只用7位,所以,這個首位上的“1”就可以作為識別漢字代碼的標志,計算機在處理到首位是“1”的代碼時把它理解為是漢字的信息,在處理到首位是“0”的代碼時把它理解為是ASCII碼。經過這樣處理后的國標碼(內碼)就是機內碼。  
  如果我們把這個“口”字圖形的“.”處用“0”代替,就可以很形象地得到“口”的字形碼:0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H。計算機要輸出“口”時,先找到顯示字庫的首址,根據“口”的機內碼經過計算,再去找到“口”的字形碼,然后根據字形碼(要用二進制)通過字符發生器的控制在屏幕上進行依次掃描,其中二進制代碼中是“0”的地方空掃,是“1”的地方掃出亮點,于是就可以得到“口”的字符圖形。  
  漢字字模按國標碼的順序排列,以二進制文件形式存放在存儲器中,構成漢字字模字庫,亦稱為漢字字形庫,稱漢字庫  
  兩種編碼方法,見頭文件
    GB1616.h//------------------ 漢字字模的數據結構定義 ------------------------//struct typFNT_GB16 //漢字字模數據結構{ unsignedchar  Index[3]; //漢字內碼索引  unsignedchar   Msk[32]; //點陣碼數據 }; /////////////////////////////////////////////////////////////////////////// 漢字字模表                                                        //// 漢字庫: 宋體16.dot,橫向取模左高位,數據排列:從左到右從上到下        ///////////////////////////////////////////////////////////////////////////conststruct  typFNT_GB16 codeGB_16[]= //數據表{/*------------------------------------------------------------------------------;  源文件 /文字 :徐;  寬×高(像素):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,
     

    這個結構,很簡單的:一個是內碼,一個點陣序列,以前的點陣庫是按內碼順序放的,不需要內碼索引的,如果只放部分漢字,就需要內碼索引了。(前面的漢字“徐”是為了要輸出“徐”的時候找到該字的點陣序列,這個點陣序列是自己寫的,當用1602顯示時,因為該芯片內存在英文的點陣序列,所以就不用寫了)一般內碼兩個字節就行了,多用1個字節是加了個尾0而已,這樣,漢字內碼處直接放漢字字符串就可;


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

    13、12864液晶:

    每個顯示點對應一位二進制數,1 表示亮,0 表示滅。存儲這些點陣信息的RAM稱為顯示數據存儲器。要顯示某個圖形或漢字就是將相應的點陣信息寫入到相應的存儲單元中。


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


      14、繪圖RAM(GDRAM)

      繪圖顯示RAM提供128×8 個字節的記憶空間,在更改繪圖RAM時,先連續寫入水平與垂直的坐標值,再寫入兩個字節的數據到繪圖RAM,而地址計數器(AC)會對水平地址(X 地址)自動加一,當水平地址為0XFH 時會重新設為00H ;不會對垂直地址做進位自動加 1. 。在寫入繪圖 RAM的期間,繪圖顯示必須關閉。

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

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


        15、一些有用的答疑解惑

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

      單片機可以定義位變量,但是不可以定義位數組。用c語言寫只是看著簡單,實際生成的代碼量是最多的,用于控制的單片機幾乎不用浮點數運算,不僅慢還麻煩還占地方,如果是DSP芯片,本身有適合的硬件結構,會好很多。  
       

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


      免責聲明:本文轉載自“國際電子商情”,本文僅代表作者個人觀點,不代表薩科微及行業觀點,只為轉載與分享,支持保護知識產權,轉載請注明原出處及作者,如有侵權請聯系我們刪除。

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

      QQ:332496225   丘經理

      地址:深圳市龍華新區民治大道1079號展滔科技大廈C座809室

      服務熱線

      0755-83044319

      霍爾元件咨詢

      肖特基二極管咨詢

      TVS/ESD咨詢

      獲取產品資料

      客服微信

      微信服務號

      主站蜘蛛池模板: 亚洲精品午夜久久久伊人| 无码国产精品一区二区免费式直播| 天堂网在线最新版www| 亚洲精品国产精品乱码不卡√| 脱了老师内裤猛烈进入的软件| 97人妻人人做人碰人人爽| 国产色婷婷精品综合在线| 玩弄放荡人妻少妇系列视频| 亚洲a∨无码一区二区三区| 人人妻在人人| 免费a级毛片又大又粗又黑| 欧美成人精品三级网站| 亚洲精品无码久久久久y| 一区二区在线 | 国| 精品香蕉久久久午夜福利| 欧美xxxx做受性欧美88| 日韩少妇人妻vs中文字幕 | 亚洲熟女乱色一区二区三区| 亚洲中文字幕无码专区| 亚洲av永久无无码精品一区二区三区| 亚洲精品~无码抽插| 国模欢欢炮交啪啪150| 精品蜜臀久久久久99网站| 给我免费播放片国语| 天干天干天啪啪夜爽爽av| 国产av仑乱内谢| 欧美一区二区三区激情| 老鲁夜夜老鲁| 国产成年女人毛片80s网站| 蜜臀亚洲av无码精品国产午夜.| 少妇内射视频播放舔大片| (无码视频)在线观看| 亚洲乱码国产一区三区| 狠狠色综合7777久夜色撩人| 国产在线永久视频| 亚洲乱码一区二区三区在线观看| 国产主播一区二区三区在线观看| av在线亚洲欧洲日产一区二区| 蜜臀av免费一区二区三区| 日韩丰满少妇无吗视频激情内射| 亚洲中文字幕av每天更新|