国内永久福利在线视频图片_深夜福利影院_久久99热精品国产av_亚洲欧美一区二区三区蜜芽_久久久亚洲熟妇熟女网址

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

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

    依據(jù)國(guó)標(biāo)碼的規(guī)則,每一個(gè)漢字都有了確認(rèn)的二進(jìn)制代碼,可是這個(gè)代碼在核算機(jī)內(nèi)部處理時(shí)會(huì)與ASCII碼發(fā)生沖突,為解決這個(gè)問題,把國(guó)標(biāo)碼的每一個(gè)字節(jié)的首位上加1。由于ASCII碼只用7位,所以,這個(gè)首位上的“1”就能夠作為辨認(rèn)漢字代碼的標(biāo)志,核算機(jī)在處理到首位是“1”的代碼時(shí)把它理解為是漢字的信息,在處理到首位是“0”的代碼時(shí)把它理解為是ASCII碼。經(jīng)過這樣處理后的國(guó)標(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ī)要輸出“口”時(shí),先找到顯現(xiàn)字庫(kù)的首址,依據(jù)“口”的機(jī)內(nèi)碼經(jīng)過核算,再去找到“口”的字形碼,然后依據(jù)字形碼(要用二進(jìn)制)經(jīng)過字符發(fā)生器的操控在屏幕上進(jìn)行順次掃描,其間二進(jìn)制代碼中是“0”的當(dāng)?shù)乜諕?,是?”的當(dāng)?shù)貟叱隽咙c(diǎn),于是就能夠得到“口”的字符圖形。
    漢字字模按國(guó)標(biāo)碼的次序擺放,以二進(jìn)制文件形式存放在存儲(chǔ)器中,構(gòu)成漢字字模字庫(kù),亦稱為漢字字形庫(kù),稱漢字庫(kù)兩種編碼方法,見頭文件

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ù) };
/// 漢字字模表                                                         漢字庫(kù): 宋體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),很簡(jiǎn)略的:一個(gè)是內(nèi)碼,一個(gè)點(diǎn)陣序列,以前的點(diǎn)陣庫(kù)是按內(nèi)碼次序放的,不需求內(nèi)碼索引的,假如只放部分漢字,就需求內(nèi)碼索引了。(前面的漢字“徐”是為了要輸出“徐”的時(shí)分找到該字的點(diǎn)陣序列,這個(gè)點(diǎn)陣序列是自己寫的,當(dāng)用1602顯現(xiàn)時(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_16codeGB_16[k]是數(shù)組中第k+1個(gè)成員index是結(jié)構(gòu)體typFNT_GB16的成員,所以能夠用codeGB_16[k].Index來(lái)進(jìn)行引證一起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] 一起成立if下面的句子才履行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è)顯現(xiàn)點(diǎn)對(duì)應(yīng)一位二進(jìn)制數(shù),1 表明亮,0 表明滅。存儲(chǔ)這些點(diǎn)陣信息的RAM稱為顯現(xiàn)數(shù)據(jù)存儲(chǔ)器。要顯現(xiàn)某個(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)接連寫入多筆材料時(shí),程序需自行判別筆直地址是否需從頭設(shè)定

超低功耗mcu


14、繪圖RAM(GDRAM)

    繪圖顯現(xiàn)RAM供給128×8 個(gè)字節(jié)的回憶空間,在更改繪圖RAM時(shí),先接連寫入水平與筆直的坐標(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的期間,繪圖顯現(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)坐標(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++); //顯現(xiàn)漢字   }  }  //// //// ///  // 顯現(xiàn)圖象  voiddisppicture(uchar code *adder)  {       uint i,j;  //*******顯現(xiàn)上半屏內(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++;               }        }  //*******顯現(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言語(yǔ),界說的變量,主動(dòng)為其分配空間,其地址為該變量的稱號(hào)。經(jīng)過該稱號(hào),能夠在內(nèi)存中招到該數(shù)據(jù),經(jīng)過運(yùn)算得到新數(shù)據(jù),而匯編中需求編程者自己界說存儲(chǔ)空間及把數(shù)據(jù)送到累加器等進(jìn)行運(yùn)算,每一步都需求編程者操作。而C言語(yǔ)這些過程由編譯器去完成。

低功耗mcu


15、一些有用的答疑解惑

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

底部二維碼1
手機(jī)掃一掃
關(guān)注我們微信公眾號(hào)
武平县| 略阳县| 望江县| 琼海市| 泸水县| 大同县| 洪江市| 巫山县| 吴江市| 莱西市| 上高县| 红安县| 隆子县| 岳普湖县| 象山县| 太仓市| 磴口县| 张掖市| 麦盖提县| 凤冈县| 玛纳斯县| 库尔勒市| 黄浦区| 涞水县| 紫云| 綦江县| 巧家县| 清远市| 永修县| 昔阳县| 乐业县| 淮安市| 宜城市| 盘锦市| 太白县| 吉木乃县| 宁安市| 济南市| 衡东县| 乌恰县| 东台市|