免费A级毛片18禁网站免费_成人亚洲欧美一区二区_黄色视频在线免费观看网站 _动漫精品亚洲一区_欧美做爰一区二区三区_尤物视频黄色网站大全线观看_4虎影库永久地址

新聞banner
當(dāng)前位置: 首 頁 >> 新聞資訊>>技術(shù)資訊
11

對芯片的操作主要是對芯片內(nèi)寄存器的操作

    依據(jù)國標碼的規(guī)則,每一個漢字都有了確認的二進制代碼,可是這個代碼在核算機內(nèi)部處理時會與ASCII碼發(fā)生沖突,為解決這個問題,把國標碼的每一個字節(jié)的首位上加1。由于ASCII碼只用7位,所以,這個首位上的“1”就能夠作為辨認漢字代碼的標志,核算機在處理到首位是“1”的代碼時把它理解為是漢字的信息,在處理到首位是“0”的代碼時把它理解為是ASCII碼。經(jīng)過這樣處理后的國標碼(內(nèi)碼)便是機內(nèi)碼。
    假如咱們把這個“口”字圖形的“.”處用“0”代替,就能夠很形象地得到“口”的字形碼:0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H。核算機要輸出“口”時,先找到顯現(xiàn)字庫的首址,依據(jù)“口”的機內(nèi)碼經(jīng)過核算,再去找到“口”的字形碼,然后依據(jù)字形碼(要用二進制)經(jīng)過字符發(fā)生器的操控在屏幕上進行順次掃描,其間二進制代碼中是“0”的當(dāng)?shù)乜諕?,是?”的當(dāng)?shù)貟叱隽咙c,于是就能夠得到“口”的字符圖形。
    漢字字模按國標碼的次序擺放,以二進制文件形式存放在存儲器中,構(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];                      //點陣碼數(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,

    這個結(jié)構(gòu),很簡略的:一個是內(nèi)碼,一個點陣序列,以前的點陣庫是按內(nèi)碼次序放的,不需求內(nèi)碼索引的,假如只放部分漢字,就需求內(nèi)碼索引了。(前面的漢字“徐”是為了要輸出“徐”的時分找到該字的點陣序列,這個點陣序列是自己寫的,當(dāng)用1602顯現(xiàn)時,因為該芯片內(nèi)存在英文的點陣序列,所以就不必寫了)一般內(nèi)碼兩個字節(jié)就行了,多用1個字節(jié)是加了個尾0罷了,這樣,漢字內(nèi)碼處直接放漢字字符串就可;

    codeGB_16[k].Index[0]codeGB_16[k]闡明有一個結(jié)構(gòu)體typFNT_GB16的數(shù)組叫做codeGB_16codeGB_16[k]是數(shù)組中第k+1個成員index是結(jié)構(gòu)體typFNT_GB16的成員,所以能夠用codeGB_16[k].Index來進行引證一起index又是個數(shù)組,所以能夠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[]是個結(jié)構(gòu)體數(shù)組,codeGB_16[k].Index[0]是說結(jié)構(gòu)體數(shù)組的第K個結(jié)構(gòu)體的index成員的第0個元素值。 

13、12864液晶:

    每個顯現(xiàn)點對應(yīng)一位二進制數(shù),1 表明亮,0 表明滅。存儲這些點陣信息的RAM稱為顯現(xiàn)數(shù)據(jù)存儲器。要顯現(xiàn)某個圖形或漢字便是將相應(yīng)的點陣信息寫入到相應(yīng)的存儲單元中。
    繪圖RAM的地址計數(shù)器(AC)只會對水平地址(X  軸)主動加一, 當(dāng)水平地址=0FH  時會從頭設(shè)為00H  但并不會對筆直地址做進位主動加一,故當(dāng)接連寫入多筆材料時,程序需自行判別筆直地址是否需從頭設(shè)定

超低功耗mcu


14、繪圖RAM(GDRAM)

    繪圖顯現(xiàn)RAM供給128×8 個字節(jié)的回憶空間,在更改繪圖RAM時,先接連寫入水平與筆直的坐標值,再寫入兩個字節(jié)的數(shù)據(jù)到繪圖RAM,而地址計數(shù)器(AC)會對水平地址(X 地址)主動加一,當(dāng)水平地址為0XFH 時會從頭設(shè)為00H ;不會對筆直地址做進位主動加 1. 。在寫入繪圖 RAM的期間,繪圖顯現(xiàn)有必要關(guān)閉,

[cpp] view plain copy// 顯現(xiàn)漢字    voiddispString (uchar X, Y,uchar *msg)    //X為哪一行,Y 為哪一列。msg  為漢字   {        if(X==0)       X = 0x80;        // 榜首行,漢字顯現(xiàn)坐標        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++); //顯現(xiàn)漢字   }  }  //// //// ///  // 顯現(xiàn)圖象  voiddisppicture(uchar code *adder)  {       uint i,j;  //*******顯現(xiàn)上半屏內(nèi)容設(shè)置       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++;               }        }  //*******顯現(xiàn)下半屏內(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++;            }       }  }

    關(guān)于C言語,界說的變量,主動為其分配空間,其地址為該變量的稱號。經(jīng)過該稱號,能夠在內(nèi)存中招到該數(shù)據(jù),經(jīng)過運算得到新數(shù)據(jù),而匯編中需求編程者自己界說存儲空間及把數(shù)據(jù)送到累加器等進行運算,每一步都需求編程者操作。而C言語這些過程由編譯器去完成。

低功耗mcu


15、一些有用的答疑解惑

    ①、單片機C言語,其變量的內(nèi)存開辟是怎么進行的?莫非是編譯器,在編譯過程中智能地加入分配與回收的代碼?關(guān)鍵之處在于我所做的程序,怎么保證其沒有內(nèi)存溢出過錯?假如我進行的是遞歸運算,這樣的話,內(nèi)存需求是很難自己核算的。
    ②、單片機C言語在變量界說上是否會遭到束縛?比方浮點型數(shù)據(jù)的乘除運算,經(jīng)過匯編還寫,代碼適當(dāng)復(fù)雜,假如直接C言語來寫,豈不過份簡略?
    ③、單片機C言語生成的hex文件中,指令及數(shù)據(jù)的ROM的地址散布是否編譯器主動分配?可否用戶進行分配?
    答復(fù)1:c言語寫的單片機程序,先由1個程序(好像是c51.exe)編譯,編譯完成后,變量的存儲空間巨細已經(jīng)安排好,只是還沒分配具體地址(地址浮動),接下來有另一個程序(好像是a51.exe)進行連接,連接今后,具體地址確認。假如變量過多,編譯會提示數(shù)據(jù)段too large,要保證其沒有內(nèi)存溢出過錯,首要考慮堆棧是否溢出,要靠經(jīng)歷單片機c言語一般制止遞歸,一般都避免用遞歸運算,單片機究竟不是PC,會影響速度的,要遞歸的話,用DSP芯片更適宜,總之,要會挑適宜的芯片。
    答復(fù)2:變量的巨細(位數(shù))一般和芯片累加器的位數(shù)相同,比方51常用8位的,因為它是8位低功耗mcu單片機
    超低功耗mcu單片機能夠界說位變量,可是不能夠界說位數(shù)組。用c言語寫只是看著簡略,實際生成的代碼量是最多的,用于操控的單片機幾乎不必浮點數(shù)運算,不僅慢還麻煩還占當(dāng)?shù)?,假如是DSP芯片,本身有合適的硬件結(jié)構(gòu),會好許多。
    答復(fù)3:一般是主動分配的,能夠c言語和匯編言語混合編程,也能夠用Keil C在線匯編,芯片與外部的數(shù)據(jù)交換都是經(jīng)過端口進行的。

底部二維碼1
手機掃一掃
關(guān)注我們微信公眾號
闽清县| 四会市| 获嘉县| 襄汾县| 哈密市| 汤阴县| 乐业县| 博客| 额敏县| 玛多县| 航空| 安平县| 辛集市| 健康| 额敏县| 北海市| 霍山县| 仲巴县| 鄱阳县| 花莲县| 湖口县| 巴彦淖尔市| 商河县| 轮台县| 孟津县| 娄底市| 河曲县| 洪湖市| 元氏县| 嘉善县| 辛集市| 阜宁县| 鱼台县| 家居| 嘉义市| 尚义县| 高邑县| 玉屏| 镇康县| 屏东县| 苍梧县|