该库用于使用MAX7221 and MAX7219驱动的SPI总线88 LED显示屏及7段LED数码管。定义一个对象最多可以驱动8块88LED显示屏(每块64个LED,总共512个)或8个7段数码管,需占用三个Arduino的IO口。如需驱动超过8个设备只能定义多个对象,但需要占用更多的IO口。这个库文件,只是可以设定屏上哪个点亮哪个点灭,想要让矩阵像跑马灯一样显示出动态效果,需要自己编写相应的程序。

    库函数说明:

    1. LedControl(int dataPin, int clkPin, int csPin, int numDevices)
    用途:初始化设备,设置DIN(dataPin)、CLK、CS的IO口及连接设备数量(既有多少块屏)并定义一个对象。
    参数 :
    dataPin 设置DIN口对应的Arduino上的IO口
    clockPin 设置CLK口对应的Arduino上的IO口
    csPin 设置CS口对应的Arduino上的IO口
    numDevices 设置最大设备连接数(也就是88LED屏的个数),只能设置1-8,如果需要连接超过8个设备,则需要定义另一个对象并使用另外的IO口。
    *例
    :LedControl lc=LedControl(12,11,10,1);
    定义了一个名为lc的对象及设置接口DIN:12,CLK:11,CS:10,设备数量为1。
    LedControl lc1=LedControl(9,8,7,8);
    定义了一个名为lc1的对象及设置接口DIN:9,CLK:8,CS:7,设备数量为8。

    2.int getDeviceCount()
    用途:查询连接设备数量。
    返回值:整数型,返回值为连接设备数量。

    3.void shutdown(int addr, bool status);
    用途:设置(节电)模式。在设置完成后需要调用此函数关闭省电模式,这一步必须做,否则不会显示,因为在构造函数中,默认开启了省电模式,所以,我们要关闭该模式。
    参数:
    addr 需设置的设备号,如:第一个设备为0,第二个设备为1等等。
    status 如果为true则开启节电模式,为false则关闭。
    :lc.shutdown(0,true);
    开启对象lc第一个设备的节电模式。

    4.void setScanLimit(int addr, int limit);
    用途:设置设备可显示的行数。
    参数:
    addr 设备号
    limit 可显示的行数,原则上可设置为0-7,如超过7则变为8的余数,如设置为8余0则只显一行,9为两行等等。
    :lc.setScanLimit(0,7);
    设置对象lc第一个设备可显示8行。

    5.void setIntensity(int addr, int intensity);
    用途:设置亮度。亮度调节16级(0-15),0级最暗,15级最亮。
    参数:
    addr 设备号
    intensity 亮度值0-15
    :lc.setIntensity(0,8);
    设置对象lc第一个设备的亮度为8。

    6.void clearDisplay(int addr);
    用途:清屏。
    参数:
    addr 设备号
    :lc.clearDisplay(0);
    对象lc第一个设备清屏

    以下三个函数为控制LED显示屏用的
    7.void setLed(int addr, int row, int col, boolean state);
    用途:设置其中一个LED的开关状态。
    参数:
    addr 设备号
    row 要设置的LED行号,可设置0-7
    col 要设置的LED列号,可设置0-7
    state 如为true则LED开启,如为false则关闭

    8.void setRow(int addr, int row, byte value);
    用途:设置一行8个LED的开关状态
    参数:
    Addr 设备号
    row 行号,可设置0-7
    value LED亮灭数据,1为亮,0为灭,可只输入一个或多个数字(小于等于8个),LED按顺序亮灭,未输入部份默认为灭;还可以输入一个255以内的数值来表示LED的亮灭,因为每行或每列的不同LED都有一个1-128之间的值与其对应,对应关系如下表。
    led11.jpg
    :lc.setRow(0,0,01000000);
    对象lc的第一个设备第一行第二个LED亮,其它灭,
    为了方便编辑,最好用数组如:
    Byte o[8]={B00011000,
    B00100100,
    B01000010,
    B10000001,
    B10000001,
    B01000010,
    B00100100,
    B00011000};
    来表示在一个8*8的LDE屏上显示“O”这个字符,调用时为:lc.setRow(0,0,o[0]);来表示第一行的LDE亮灭,
    lc.setRow(0,1,o[1]);来表示第二行的LDE亮灭等等
    lc.setRow(0,2,146);
    对象lc的第一个设备第三行第一、四、七LED亮,其它它,计算方法如下:


    Led2.0 Led2.1 Led2.2 Led2.3 Led2.4 Led2.5 Led2.6 Led2.7
    On Yes No No Yes No No Yes No
    Row-Value 128 0 0 16 0 0 2 0 =146 (128+16+2)
    1. <br />这种方法可以简化数据录入,方便图形运算。

    9.void setColumn(int addr, int col, byte value);
    用途:设置一列8个LED的开关状态,与setRow输出的图形正好旋转90度。
    参数:
    addr 设备号
    col 列号,可设置0-7
    value LED亮灭数据,与setRow相同

    下面两个函数是7段数码管用的

    10.void setDigit(int addr, int digit, byte value, boolean dp);
    用途:设置数码管显示十六进制数字
    参数:
    addr 设备号
    digit 7段数码管号,可设置0-7
    value 显示数据,为十六进制数,0-15(0x00-0x0F),其中0-9为数字,10-15为十六进制字符(0-F)
    dp 开关 数码管上的小数点,turn为开,false为关

    11.void setChar(int addr, int digit, char value, boolean dp);
    用途:设置数码管显示字符
    参数:
    addr 设备号
    digit 7段数码管号,可设置0-7
    value 显示数据,直接输入’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’, ‘A’,’b’,’c’,’d’,’E’,’F’,’H’,’L’,’P’,’.’,’-‘,’_’,’ ‘就可以在数码管上显示出来,虽然只能显示有限的字符,但是可以方便使用,请注意英文字母有的是大写有的是小写,不要搞错了,还有最后一个‘ ’是一个空格,别看漏了。
    dp 开关数码管上的小数点,turn为开,false为关

    1. 本说明参考了[http://www.wayoda.org/arduino/ledcontrol/index.html#ScanLimit](http://www.wayoda.org/arduino/ledcontrol/index.html#ScanLimit)上的英文说明,如有错误,欢迎大家指正。<br />本文链接(有删减)[https://www.geek-workshop.com/thread-9314-1-1.html](https://www.geek-workshop.com/thread-9314-1-1.html)