nRF51800 藍牙學習 進程記錄 2:關於二維數組 執念執戰

  前天在玩OLED時想完成一直想弄得一個東西,就是簡單的單片機遊戲。由於STM32和nRF51822的內存足夠,因此就用緩存數組的方法來顯示圖像(我也不知道術語是啥,反正就是在內存中創建一個128X64的二維數組,更新顯示時將整個數組刷新到屏幕上),並且這兩個OLED是串口的(還有一個128X32的OLED,同樣串口的,連驅動時序和驅動函數都同樣,兩個都過小了,還那麼貴......),四個IO口就能驅動(兩個仍是供電的VCC和GND),因此不像以前的那個mini 12864屏幕,它是8位並口的,帶讀寫功能,而這個串口的只能寫,不能讀(那個Mini12864是5V的,我試着不加外加電路用STM32沒驅動成功,多是我水平不夠,另外總共十多個引腳,全弄轉換電路太複雜,而STM32的5V兼容當時我還不知道,就一直放着了,沒在用STM32 試過,爲了簡單點使用12864,也爲了作畢設,就又買了倆3.3V的),因此開闢一個緩存數組能夠解決讀屏幕內容這個問題。(之後看還能想着補上三種12864的照片吧)數組

  可是在剛開始寫程序時就出了問題,就是對於二維數組的定義和引用出現了問題。如今解決了,顧總結以下(僅我知道的和剛剛解決的)。緩存

  1:二維數組在函數定義時,要定義到列,其中列數要與要傳遞來的二維數組的列向量數一致。如:函數

      定義一個二維數組:spa

      unsigned char T_image[4][6]={      //就是一個俄羅斯方塊的一個圖形的四個方向變換的圖形遊戲

              {0,1,0,1,1,1},內存

              { 1,0,1,1,1,0},it

              {1,1,1,0,1,0},io

              {0,1,1,1,0,1}};for循環

  2:而後定義一個函數,此函數可以調用上面二維數組,但不限於上面一個,則定義爲:void Position_change(struct POSITION pos,unsigned char ch[][6]);,注意定義中對數組的定義,就是定義到列向量,而且下標數值與即將引用的數組的列向量下標相等值,而行向量下標則不須要寫(因此上面定義二維數組時最好行列向量下標值要統一)。使用時即可以直接傳遞一個定義了的二維數組,如在main中調用時寫爲:Position_change(pos,T_image); 就能夠了。
變量

  3:若在這個定義的函數中還調用了另外一個函數Draw_position,這個函數要使用ch[][6]傳遞的函數,則在定義這個函數時和上面那個函數同樣,定義到列向量:void Draw_position(unsigned char ch[][6]);而後在上面那個函數中被調用時寫成 Draw_position(ch);就能夠了,即二維數組變量做爲傳遞函數時只須要寫方括號前面的名稱就好,不須要寫方括號,也不須要精確到列向量,和上面那個函數在main函數中調用同樣。即總體寫爲:

      void Position_change(struct POSITION pos,unsigned char ch[][6])

        {   Draw_position(ch);

          }

    4:若函數中還有對傳遞二維數組的for循環,則只須要對定義中的二維數組進行操做就好了:

    for(i=0;i<4;i++)

      for(n=0;n<6;n++)

        if(ch[i][n]==0).......    //ch就是指定義時的參數變量名稱,定義爲啥就寫爲啥好了,就能傳遞下來了

        else......

 

 

   好了,基本就寫完了。其實這個很簡單,只是當時學的時候沒以爲這個重要,就簡單而過了。

  之後要寫點對nRF51822的應用體驗,擬想從開箱開始(額,用了很久了,跳過吧,從怎麼鏈接電腦設置kile5並用SWD下載開始吧),可是不知道人家容許麼......

 

  本文水平有限,內容不少詞語因爲知識問題不嚴謹或很離譜,但主要做爲記錄做用,能理解就行了,但願之後的本身和路過的大神對必要的錯誤提出批評與指點,對好笑的錯誤不要嘲笑,指出來我會改正的。

相關文章
相關標籤/搜索