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:二维数组在函数定义时,要定义到列,其中列数要与要传递来的二维数组的列向量数一致。如:

      定义一个二维数组:

      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下载开始吧),但是不知道人家允许么......

  本文水平有限,内容很多词语由于知识问题不严谨或很离谱,但主要作为记录作用,能理解就好了,希望以后的自己和路过的大神对必要的错误提出批评与指点,对可笑的错误不要嘲笑,指出来我会改正的。

时间: 2024-10-05 05:06:18

nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战的相关文章

nRF51800 蓝牙学习 进程记录 1:感想

一直想开一个高大上点的博客,觉得博客园不错,便申请了.一直没时间看,都快忘了,无意间登上提示申请到了.便写个东西看看. 正在学习nRF51822的蓝牙开发板,为了做毕设准备.备考中,一直没时间学,但今天是国庆节,觉得得给自己放一天假,所以开始鼓捣之前买的开发板. 昨天晚上才终于找到下载的窍门,但是对于蓝牙协议的下载还没头绪.不过这个可以往后拖一拖,拖到考完试吧.昨天把板子用SWD下载弄会了,今天上午刚刚移植了OLED的驱动和测试,用这个开发板点亮了OLED,不过速度有点慢啊,明显的刷屏感啊. 好

Python学习笔记 之 递归、二维数组顺时针旋转90&#176;、正则表达式

递归.二维数组顺时针旋转90°.正则表达式 1.   递归算法是一种直接或间接调用自身算法的过程. 特点: 递归就是在过程或函数里调用自身 明确的递归结束条件,即递归出口 简洁,但是不提倡 递归次数多容易造成栈溢出 要求: 每次调用递归规模上有所减小 前一次为后一次做准备 规模较小时必须直接给出解答而不再进行递归调用 例子:递归实现二分法 1 def searchMyData(mydate,a1): 2 mid = int(len(mydate)/2) 3 if mid >= 1: 4 if m

【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸

多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推. 例如: int[][] map; char c[][]; 和一维数组一样,数组声明以后在内存中没有分配具体的存储空间,也没有设定数组的长度.  -------------------------------------------------

C语言+二维数组实现扫雷游戏(贴过来后无缩进尽请谅解,工程完成度:70%)

#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 #define L 10 //打印随机雷的位置,测试代码方便看雷 void sl_print(constint a[L]) { int i=0; printf("地雷的随机位置为:"); for(i=0;i<L;i++) { printf("%02d ",a[i]); } printf(

[java学习笔记]java语言基础概述之数组的定义&amp;常见操作(遍历、排序、查找)&amp;二维数组

1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一旦创建,必须明确长度)          格式1:              元素类型   [ ]  数组名  =  new  元素类型  [元素个数即数组的长度]:              示例:int[] array = new int[5];          格式2:           

java二维数组学习(转)

转自:http://blog.csdn.net/java1992/article/details/5808709,在这里谢过了 /* * java学习: * 二维数组的使用: */public class test { public static void main(String[] args) { //二维数组的声明方式: //数据类型 [][] 数组名称 = new 数据类型 [长度][长度] ; //数据类型 [][] 数组名称 = {{123},{456}} ; /* int [][]

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

Swift语言学习No.2: 二维数组

之前在教程中学习了二维数组,原本里面很多知识点都不甚了解,后来经过一番资料查找,基本上理解透彻了,做个总结吧. 老规矩,先上代码: class Array2D<T> { let columns: Int let rows: Int var array: Array<T?> init(columns: Int, rows: Int) { self.columns = columns self.rows = rows array = Array<T?>(count:rows

C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: 1 /*读取txt文件到二维数组*/ 2 #include <iostream> 3 #include <fstream> 4 #include <vector> 5 #include <string> 6 7 using namespace std; 8 9 typedef vector< vector<int> > D2array; //二维数组 10 typed