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的照片吧)
但是在剛開始寫程序時就出了問題,就是對于二維數組的定義和引用出現了問題?,F在解決了,顧總結如下(僅我知道的和剛剛解決的)。
1:二維數組在函數定義時,要定義到列,其中列數要與要傳遞來的二維數組的列向量數一致。如:
定義一個二維數組:
unsigned char T_image[4][6]={ //就是一個俄羅斯方塊的一個圖形的四個方向變換的圖形
{0,1,0,1,1,1},
{ 1,0,1,1,1,0},
{1,1,1,0,1,0},
{0,1,1,1,0,1}};
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下載開始吧),但是不知道人家允許么......
?
本文水平有限,內容很多詞語由于知識問題不嚴謹或很離譜,但主要作為記錄作用,能理解就好了,希望以后的自己和路過的大神對必要的錯誤提出批評與指點,對可笑的錯誤不要嘲笑,指出來我會改正的。
?
轉載于:https://www.cnblogs.com/zhinianzhizhan/p/5929765.html
總結
以上是生活随笔為你收集整理的nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在预装win8的电脑上换win7系统讲解
- 下一篇: Kafka集群配置说明