Library for the MAX7219 LED display driver

Dependents:   MAXREFDES99_demo MAXREFDES99_RTC_Display nucleo_spi_max7219_led8x8 max7219 ... more

Committer:
j3
Date:
Tue Jan 26 02:17:20 2016 +0000
Revision:
1:90a7cf4e7d26
Parent:
0:798fb343e022
Child:
2:9150a0dc77a3
Updated comments in header file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:798fb343e022 1 /******************************************************************//**
j3 0:798fb343e022 2 * @file max7219.cpp
j3 0:798fb343e022 3 *
j3 0:798fb343e022 4 * @author Justin Jordan
j3 0:798fb343e022 5 *
j3 0:798fb343e022 6 * @version 0.0
j3 0:798fb343e022 7 *
j3 0:798fb343e022 8 * Started: 08JAN16
j3 0:798fb343e022 9 *
j3 0:798fb343e022 10 * Updated:
j3 0:798fb343e022 11 *
j3 0:798fb343e022 12 * @brief Source file for Max7219 class
j3 0:798fb343e022 13 ***********************************************************************
j3 0:798fb343e022 14 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 0:798fb343e022 15 *
j3 0:798fb343e022 16 * Permission is hereby granted, free of charge, to any person obtaining a
j3 0:798fb343e022 17 * copy of this software and associated documentation files (the "Software"),
j3 0:798fb343e022 18 * to deal in the Software without restriction, including without limitation
j3 0:798fb343e022 19 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 0:798fb343e022 20 * and/or sell copies of the Software, and to permit persons to whom the
j3 0:798fb343e022 21 * Software is furnished to do so, subject to the following conditions:
j3 0:798fb343e022 22 *
j3 0:798fb343e022 23 * The above copyright notice and this permission notice shall be included
j3 0:798fb343e022 24 * in all copies or substantial portions of the Software.
j3 0:798fb343e022 25 *
j3 0:798fb343e022 26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 0:798fb343e022 27 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 0:798fb343e022 28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 0:798fb343e022 29 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 0:798fb343e022 30 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 0:798fb343e022 31 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 0:798fb343e022 32 * OTHER DEALINGS IN THE SOFTWARE.
j3 0:798fb343e022 33 *
j3 0:798fb343e022 34 * Except as contained in this notice, the name of Maxim Integrated
j3 0:798fb343e022 35 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 0:798fb343e022 36 * Products, Inc. Branding Policy.
j3 0:798fb343e022 37 *
j3 0:798fb343e022 38 * The mere transfer of this software does not imply any licenses
j3 0:798fb343e022 39 * of trade secrets, proprietary technology, copyrights, patents,
j3 0:798fb343e022 40 * trademarks, maskwork rights, or any other form of intellectual
j3 0:798fb343e022 41 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 0:798fb343e022 42 * ownership rights.
j3 0:798fb343e022 43 **********************************************************************/
j3 0:798fb343e022 44
j3 0:798fb343e022 45
j3 0:798fb343e022 46 #include "max7219.h"
j3 0:798fb343e022 47
j3 0:798fb343e022 48
j3 0:798fb343e022 49 //*********************************************************************
j3 0:798fb343e022 50 Max7219::Max7219(SPI *spi_bus, PinName cs): _p_spi(spi_bus)
j3 0:798fb343e022 51 {
j3 0:798fb343e022 52 _num_devices = 1;
j3 0:798fb343e022 53
j3 0:798fb343e022 54 _p_cs = new DigitalOut(cs, 1);
j3 0:798fb343e022 55 _spi_owner = false;
j3 0:798fb343e022 56 }
j3 0:798fb343e022 57
j3 0:798fb343e022 58
j3 0:798fb343e022 59 //*********************************************************************
j3 0:798fb343e022 60 Max7219::Max7219(PinName mosi, PinName miso, PinName sclk, PinName cs)
j3 0:798fb343e022 61 {
j3 0:798fb343e022 62 _num_devices = 1;
j3 0:798fb343e022 63
j3 0:798fb343e022 64 _p_spi = new SPI(mosi, miso, sclk);
j3 0:798fb343e022 65 _p_cs = new DigitalOut(cs, 1);
j3 0:798fb343e022 66
j3 0:798fb343e022 67 _spi_owner = true;
j3 0:798fb343e022 68 }
j3 0:798fb343e022 69
j3 0:798fb343e022 70
j3 0:798fb343e022 71 //*********************************************************************
j3 0:798fb343e022 72 Max7219::~Max7219()
j3 0:798fb343e022 73 {
j3 0:798fb343e022 74 delete _p_cs;
j3 0:798fb343e022 75
j3 0:798fb343e022 76 if(_spi_owner)
j3 0:798fb343e022 77 {
j3 0:798fb343e022 78 delete _p_spi;
j3 0:798fb343e022 79 }
j3 0:798fb343e022 80 }
j3 0:798fb343e022 81
j3 0:798fb343e022 82
j3 0:798fb343e022 83 //*********************************************************************
j3 0:798fb343e022 84 int32_t Max7219::set_num_devices(uint8_t num_devices)
j3 0:798fb343e022 85 {
j3 0:798fb343e022 86 int32_t rtn_val = -1;
j3 0:798fb343e022 87
j3 0:798fb343e022 88 if(num_devices > 0)
j3 0:798fb343e022 89 {
j3 0:798fb343e022 90 _num_devices = num_devices;
j3 0:798fb343e022 91 rtn_val = _num_devices;
j3 0:798fb343e022 92 }
j3 0:798fb343e022 93
j3 0:798fb343e022 94 return(rtn_val);
j3 0:798fb343e022 95 }
j3 0:798fb343e022 96
j3 0:798fb343e022 97
j3 0:798fb343e022 98 //*********************************************************************
j3 0:798fb343e022 99 void Max7219::set_display_test(void)
j3 0:798fb343e022 100 {
j3 0:798fb343e022 101 uint8_t idx = 0;
j3 0:798fb343e022 102
j3 0:798fb343e022 103 _p_cs->write(0);
j3 0:798fb343e022 104 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 105 {
j3 0:798fb343e022 106 _p_spi->write(MAX7219_DISPLAY_TEST);
j3 0:798fb343e022 107 _p_spi->write(1);
j3 0:798fb343e022 108 }
j3 0:798fb343e022 109 _p_cs->write(1);
j3 0:798fb343e022 110 }
j3 0:798fb343e022 111
j3 0:798fb343e022 112
j3 0:798fb343e022 113 //*********************************************************************
j3 0:798fb343e022 114 void Max7219::clear_display_test(void)
j3 0:798fb343e022 115 {
j3 0:798fb343e022 116 uint8_t idx = 0;
j3 0:798fb343e022 117
j3 0:798fb343e022 118 _p_cs->write(0);
j3 0:798fb343e022 119 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 120 {
j3 0:798fb343e022 121 _p_spi->write(MAX7219_DISPLAY_TEST);
j3 0:798fb343e022 122 _p_spi->write(0);
j3 0:798fb343e022 123 }
j3 0:798fb343e022 124 _p_cs->write(1);
j3 0:798fb343e022 125 }
j3 0:798fb343e022 126
j3 0:798fb343e022 127
j3 0:798fb343e022 128 //*********************************************************************
j3 1:90a7cf4e7d26 129 int32_t Max7219::init_device(max7219_configuration_t config)
j3 0:798fb343e022 130 {
j3 0:798fb343e022 131 int32_t rtn_val = -1;
j3 0:798fb343e022 132 uint8_t idx = 0;
j3 0:798fb343e022 133
j3 0:798fb343e022 134 if(config.device_number > _num_devices)
j3 0:798fb343e022 135 {
j3 0:798fb343e022 136 rtn_val = -1;
j3 0:798fb343e022 137 }
j3 0:798fb343e022 138 else if(config.device_number == 0)
j3 0:798fb343e022 139 {
j3 0:798fb343e022 140 //device numbering starts with index 1
j3 0:798fb343e022 141 rtn_val = -2;
j3 0:798fb343e022 142 }
j3 0:798fb343e022 143 else
j3 0:798fb343e022 144 {
j3 0:798fb343e022 145 //write DECODE_MODE register of device
j3 0:798fb343e022 146 _p_cs->write(0);
j3 0:798fb343e022 147 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 148 {
j3 0:798fb343e022 149 if(config.device_number == idx)
j3 0:798fb343e022 150 {
j3 0:798fb343e022 151 _p_spi->write(MAX7219_DECODE_MODE);
j3 0:798fb343e022 152 _p_spi->write(config.decode_mode);
j3 0:798fb343e022 153 }
j3 0:798fb343e022 154 else
j3 0:798fb343e022 155 {
j3 0:798fb343e022 156 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 157 _p_spi->write(0);
j3 0:798fb343e022 158 }
j3 0:798fb343e022 159 }
j3 0:798fb343e022 160 _p_cs->write(1);
j3 0:798fb343e022 161
j3 0:798fb343e022 162 wait_us(1);
j3 0:798fb343e022 163
j3 0:798fb343e022 164 //write INTENSITY register of device
j3 0:798fb343e022 165 _p_cs->write(0);
j3 0:798fb343e022 166 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 167 {
j3 0:798fb343e022 168 if(config.device_number == idx)
j3 0:798fb343e022 169 {
j3 0:798fb343e022 170 _p_spi->write(MAX7219_INTENSITY);
j3 0:798fb343e022 171 _p_spi->write(config.intensity);
j3 0:798fb343e022 172 }
j3 0:798fb343e022 173 else
j3 0:798fb343e022 174 {
j3 0:798fb343e022 175 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 176 _p_spi->write(0);
j3 0:798fb343e022 177 }
j3 0:798fb343e022 178 }
j3 0:798fb343e022 179 _p_cs->write(1);
j3 0:798fb343e022 180
j3 0:798fb343e022 181 wait_us(1);
j3 0:798fb343e022 182
j3 0:798fb343e022 183 //write SCAN_LIMT register of device
j3 0:798fb343e022 184 _p_cs->write(0);
j3 0:798fb343e022 185 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 186 {
j3 0:798fb343e022 187 if(config.device_number == idx)
j3 0:798fb343e022 188 {
j3 0:798fb343e022 189 _p_spi->write(MAX7219_SCAN_LIMIT);
j3 0:798fb343e022 190 _p_spi->write(config.scan_limit);
j3 0:798fb343e022 191 }
j3 0:798fb343e022 192 else
j3 0:798fb343e022 193 {
j3 0:798fb343e022 194 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 195 _p_spi->write(0);
j3 0:798fb343e022 196 }
j3 0:798fb343e022 197 }
j3 0:798fb343e022 198 _p_cs->write(1);
j3 0:798fb343e022 199
j3 0:798fb343e022 200 wait_us(1);
j3 0:798fb343e022 201
j3 0:798fb343e022 202 rtn_val = 0;
j3 0:798fb343e022 203 }
j3 0:798fb343e022 204
j3 0:798fb343e022 205 return(rtn_val);
j3 0:798fb343e022 206 }
j3 0:798fb343e022 207
j3 0:798fb343e022 208
j3 0:798fb343e022 209 //*********************************************************************
j3 0:798fb343e022 210 void Max7219::init_display(max7219_configuration_t config)
j3 0:798fb343e022 211 {
j3 0:798fb343e022 212 uint8_t idx = 0;
j3 0:798fb343e022 213
j3 0:798fb343e022 214 //write DECODE_MODE register of all devices
j3 0:798fb343e022 215 _p_cs->write(0);
j3 0:798fb343e022 216 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 217 {
j3 0:798fb343e022 218 _p_spi->write(MAX7219_DECODE_MODE);
j3 0:798fb343e022 219 _p_spi->write(config.decode_mode);
j3 0:798fb343e022 220 }
j3 0:798fb343e022 221 _p_cs->write(1);
j3 0:798fb343e022 222
j3 0:798fb343e022 223 wait_us(1);
j3 0:798fb343e022 224
j3 0:798fb343e022 225 //write INTENSITY register of all devices
j3 0:798fb343e022 226 _p_cs->write(0);
j3 0:798fb343e022 227 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 228 {
j3 0:798fb343e022 229 _p_spi->write(MAX7219_INTENSITY);
j3 0:798fb343e022 230 _p_spi->write(config.intensity);
j3 0:798fb343e022 231 }
j3 0:798fb343e022 232 _p_cs->write(1);
j3 0:798fb343e022 233
j3 0:798fb343e022 234 wait_us(1);
j3 0:798fb343e022 235
j3 0:798fb343e022 236 //write SCAN_LIMT register of all devices
j3 0:798fb343e022 237 _p_cs->write(0);
j3 0:798fb343e022 238 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 239 {
j3 0:798fb343e022 240 _p_spi->write(MAX7219_SCAN_LIMIT);
j3 0:798fb343e022 241 _p_spi->write(config.scan_limit);
j3 0:798fb343e022 242 }
j3 0:798fb343e022 243 _p_cs->write(1);
j3 0:798fb343e022 244
j3 0:798fb343e022 245 wait_us(1);
j3 0:798fb343e022 246 }
j3 0:798fb343e022 247
j3 0:798fb343e022 248
j3 0:798fb343e022 249 //*********************************************************************
j3 0:798fb343e022 250 int32_t Max7219::enable_device(uint8_t device_number)
j3 0:798fb343e022 251 {
j3 0:798fb343e022 252 int32_t rtn_val = -1;
j3 0:798fb343e022 253 uint8_t idx = 0;
j3 0:798fb343e022 254
j3 0:798fb343e022 255 if(device_number > _num_devices)
j3 0:798fb343e022 256 {
j3 0:798fb343e022 257 rtn_val = -1;
j3 0:798fb343e022 258 }
j3 0:798fb343e022 259 else if(device_number == 0)
j3 0:798fb343e022 260 {
j3 0:798fb343e022 261 //device numbering starts with index 1
j3 0:798fb343e022 262 rtn_val = -2;
j3 0:798fb343e022 263 }
j3 0:798fb343e022 264 else
j3 0:798fb343e022 265 {
j3 0:798fb343e022 266 _p_cs->write(0);
j3 0:798fb343e022 267 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 268 {
j3 0:798fb343e022 269 if(device_number == idx)
j3 0:798fb343e022 270 {
j3 0:798fb343e022 271 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 272 _p_spi->write(1);
j3 0:798fb343e022 273 }
j3 0:798fb343e022 274 else
j3 0:798fb343e022 275 {
j3 0:798fb343e022 276 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 277 _p_spi->write(0);
j3 0:798fb343e022 278 }
j3 0:798fb343e022 279 }
j3 0:798fb343e022 280 _p_cs->write(1);
j3 0:798fb343e022 281
j3 0:798fb343e022 282 rtn_val = 0;
j3 0:798fb343e022 283 }
j3 0:798fb343e022 284
j3 0:798fb343e022 285 return(rtn_val);
j3 0:798fb343e022 286 }
j3 0:798fb343e022 287
j3 0:798fb343e022 288
j3 0:798fb343e022 289 //*********************************************************************
j3 0:798fb343e022 290 void Max7219::enable_display(void)
j3 0:798fb343e022 291 {
j3 0:798fb343e022 292 uint8_t idx = 0;
j3 0:798fb343e022 293
j3 0:798fb343e022 294 _p_cs->write(0);
j3 0:798fb343e022 295 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 296 {
j3 0:798fb343e022 297 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 298 _p_spi->write(1);
j3 0:798fb343e022 299 }
j3 0:798fb343e022 300 _p_cs->write(1);
j3 0:798fb343e022 301 }
j3 0:798fb343e022 302
j3 0:798fb343e022 303
j3 0:798fb343e022 304 //*********************************************************************
j3 0:798fb343e022 305 int32_t Max7219::disable_device(uint8_t device_number)
j3 0:798fb343e022 306 {
j3 0:798fb343e022 307 int32_t rtn_val = -1;
j3 0:798fb343e022 308 uint8_t idx = 0;
j3 0:798fb343e022 309
j3 0:798fb343e022 310 if(device_number > _num_devices)
j3 0:798fb343e022 311 {
j3 0:798fb343e022 312 rtn_val = -1;
j3 0:798fb343e022 313 }
j3 0:798fb343e022 314 else if(device_number == 0)
j3 0:798fb343e022 315 {
j3 0:798fb343e022 316 //device numbering starts with index 1
j3 0:798fb343e022 317 rtn_val = -2;
j3 0:798fb343e022 318 }
j3 0:798fb343e022 319 else
j3 0:798fb343e022 320 {
j3 0:798fb343e022 321 _p_cs->write(0);
j3 0:798fb343e022 322 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 323 {
j3 0:798fb343e022 324 if(device_number == idx)
j3 0:798fb343e022 325 {
j3 0:798fb343e022 326 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 327 _p_spi->write(0);
j3 0:798fb343e022 328 }
j3 0:798fb343e022 329 else
j3 0:798fb343e022 330 {
j3 0:798fb343e022 331 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 332 _p_spi->write(0);
j3 0:798fb343e022 333 }
j3 0:798fb343e022 334 }
j3 0:798fb343e022 335 _p_cs->write(1);
j3 0:798fb343e022 336
j3 0:798fb343e022 337 rtn_val = 0;
j3 0:798fb343e022 338 }
j3 0:798fb343e022 339
j3 0:798fb343e022 340 return(rtn_val);
j3 0:798fb343e022 341 }
j3 0:798fb343e022 342
j3 0:798fb343e022 343
j3 0:798fb343e022 344 //*********************************************************************
j3 0:798fb343e022 345 void Max7219::disable_display(void)
j3 0:798fb343e022 346 {
j3 0:798fb343e022 347 uint8_t idx = 0;
j3 0:798fb343e022 348
j3 0:798fb343e022 349 _p_cs->write(0);
j3 0:798fb343e022 350 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 351 {
j3 0:798fb343e022 352 _p_spi->write(MAX7219_SHUTDOWN);
j3 0:798fb343e022 353 _p_spi->write(0);
j3 0:798fb343e022 354 }
j3 0:798fb343e022 355 _p_cs->write(1);
j3 0:798fb343e022 356 }
j3 0:798fb343e022 357
j3 0:798fb343e022 358
j3 0:798fb343e022 359
j3 0:798fb343e022 360 //*********************************************************************
j3 0:798fb343e022 361 int32_t Max7219::write_digit(uint8_t device_number, uint8_t digit, uint8_t data)
j3 0:798fb343e022 362 {
j3 0:798fb343e022 363 int32_t rtn_val = -1;
j3 0:798fb343e022 364 uint8_t idx = 0;
j3 0:798fb343e022 365
j3 0:798fb343e022 366 if(digit > MAX7219_DIGIT_7)
j3 0:798fb343e022 367 {
j3 0:798fb343e022 368 rtn_val = -3;
j3 0:798fb343e022 369 }
j3 0:798fb343e022 370 else if(digit < MAX7219_DIGIT_0)
j3 0:798fb343e022 371 {
j3 0:798fb343e022 372 rtn_val = -4;
j3 0:798fb343e022 373 }
j3 0:798fb343e022 374 else
j3 0:798fb343e022 375 {
j3 0:798fb343e022 376 if(device_number > _num_devices)
j3 0:798fb343e022 377 {
j3 0:798fb343e022 378 rtn_val = -1;
j3 0:798fb343e022 379 }
j3 0:798fb343e022 380 else if(device_number == 0)
j3 0:798fb343e022 381 {
j3 0:798fb343e022 382 rtn_val = -2;
j3 0:798fb343e022 383 }
j3 0:798fb343e022 384 else
j3 0:798fb343e022 385 {
j3 0:798fb343e022 386 _p_cs->write(0);
j3 0:798fb343e022 387 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 388 {
j3 0:798fb343e022 389 if(idx == device_number)
j3 0:798fb343e022 390 {
j3 0:798fb343e022 391 _p_spi->write(digit);
j3 0:798fb343e022 392 _p_spi->write(data);
j3 0:798fb343e022 393 }
j3 0:798fb343e022 394 else
j3 0:798fb343e022 395 {
j3 0:798fb343e022 396 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 397 _p_spi->write(0);
j3 0:798fb343e022 398 }
j3 0:798fb343e022 399 }
j3 0:798fb343e022 400 _p_cs->write(1);
j3 0:798fb343e022 401
j3 0:798fb343e022 402 rtn_val = 0;
j3 0:798fb343e022 403 }
j3 0:798fb343e022 404 }
j3 0:798fb343e022 405
j3 0:798fb343e022 406 return(rtn_val);
j3 0:798fb343e022 407 }
j3 0:798fb343e022 408
j3 0:798fb343e022 409
j3 0:798fb343e022 410 //*********************************************************************
j3 0:798fb343e022 411 int32_t Max7219::clear_digit(uint8_t device_number, uint8_t digit)
j3 0:798fb343e022 412 {
j3 0:798fb343e022 413 int32_t rtn_val = -1;
j3 0:798fb343e022 414 uint8_t idx = 0;
j3 0:798fb343e022 415
j3 0:798fb343e022 416 if(digit > MAX7219_DIGIT_7)
j3 0:798fb343e022 417 {
j3 0:798fb343e022 418 rtn_val = -3;
j3 0:798fb343e022 419 }
j3 0:798fb343e022 420 else if(digit < MAX7219_DIGIT_0)
j3 0:798fb343e022 421 {
j3 0:798fb343e022 422 rtn_val = -4;
j3 0:798fb343e022 423 }
j3 0:798fb343e022 424 else
j3 0:798fb343e022 425 {
j3 0:798fb343e022 426 if(device_number > _num_devices)
j3 0:798fb343e022 427 {
j3 0:798fb343e022 428 rtn_val = -1;
j3 0:798fb343e022 429 }
j3 0:798fb343e022 430 else if(device_number == 0)
j3 0:798fb343e022 431 {
j3 0:798fb343e022 432 rtn_val = -2;
j3 0:798fb343e022 433 }
j3 0:798fb343e022 434 else
j3 0:798fb343e022 435 {
j3 0:798fb343e022 436 _p_cs->write(0);
j3 0:798fb343e022 437 for(idx = _num_devices; idx > 0; idx--)
j3 0:798fb343e022 438 {
j3 0:798fb343e022 439 if(idx == device_number)
j3 0:798fb343e022 440 {
j3 0:798fb343e022 441 _p_spi->write(digit);
j3 0:798fb343e022 442 _p_spi->write(0);
j3 0:798fb343e022 443 }
j3 0:798fb343e022 444 else
j3 0:798fb343e022 445 {
j3 0:798fb343e022 446 _p_spi->write(MAX7219_NO_OP);
j3 0:798fb343e022 447 _p_spi->write(0);
j3 0:798fb343e022 448 }
j3 0:798fb343e022 449 }
j3 0:798fb343e022 450 _p_cs->write(1);
j3 0:798fb343e022 451
j3 0:798fb343e022 452 rtn_val = 0;
j3 0:798fb343e022 453 }
j3 0:798fb343e022 454 }
j3 0:798fb343e022 455
j3 0:798fb343e022 456 return(rtn_val);
j3 0:798fb343e022 457 }
j3 0:798fb343e022 458
j3 0:798fb343e022 459
j3 0:798fb343e022 460 //*********************************************************************
j3 0:798fb343e022 461 int32_t Max7219::device_all_on(uint8_t device_number)
j3 0:798fb343e022 462 {
j3 0:798fb343e022 463 int32_t rtn_val = -1;
j3 0:798fb343e022 464 uint8_t idx = 0;
j3 0:798fb343e022 465
j3 0:798fb343e022 466 if(device_number > _num_devices)
j3 0:798fb343e022 467 {
j3 0:798fb343e022 468 rtn_val = -1;
j3 0:798fb343e022 469 }
j3 0:798fb343e022 470 else if(device_number == 0)
j3 0:798fb343e022 471 {
j3 0:798fb343e022 472 rtn_val = -2;
j3 0:798fb343e022 473 }
j3 0:798fb343e022 474 else
j3 0:798fb343e022 475 {
j3 0:798fb343e022 476 rtn_val = 0;
j3 0:798fb343e022 477
j3 0:798fb343e022 478 //writes every digit of given device to 0xFF
j3 0:798fb343e022 479 for(idx = 0; idx < 8; idx++)
j3 0:798fb343e022 480 {
j3 0:798fb343e022 481 if(rtn_val == 0)
j3 0:798fb343e022 482 {
j3 0:798fb343e022 483 rtn_val = write_digit(device_number, (idx + 1), 0xFF);
j3 0:798fb343e022 484 }
j3 0:798fb343e022 485 }
j3 0:798fb343e022 486 }
j3 0:798fb343e022 487
j3 0:798fb343e022 488 return(rtn_val);
j3 0:798fb343e022 489 }
j3 0:798fb343e022 490
j3 0:798fb343e022 491
j3 0:798fb343e022 492 //*********************************************************************
j3 0:798fb343e022 493 int32_t Max7219::device_all_off(uint8_t device_number)
j3 0:798fb343e022 494 {
j3 0:798fb343e022 495 int32_t rtn_val = -1;
j3 0:798fb343e022 496 uint8_t idx = 0;
j3 0:798fb343e022 497
j3 0:798fb343e022 498 if(device_number > _num_devices)
j3 0:798fb343e022 499 {
j3 0:798fb343e022 500 rtn_val = -1;
j3 0:798fb343e022 501 }
j3 0:798fb343e022 502 else if(device_number == 0)
j3 0:798fb343e022 503 {
j3 0:798fb343e022 504 rtn_val = -2;
j3 0:798fb343e022 505 }
j3 0:798fb343e022 506 else
j3 0:798fb343e022 507 {
j3 0:798fb343e022 508 rtn_val = 0;
j3 0:798fb343e022 509
j3 0:798fb343e022 510 //writes every digit of given device to 0
j3 0:798fb343e022 511 for(idx = 0; idx < 8; idx++)
j3 0:798fb343e022 512 {
j3 0:798fb343e022 513 if(rtn_val == 0)
j3 0:798fb343e022 514 {
j3 0:798fb343e022 515 rtn_val = write_digit(device_number, (idx + 1), 0);
j3 0:798fb343e022 516 }
j3 0:798fb343e022 517 }
j3 0:798fb343e022 518 }
j3 0:798fb343e022 519
j3 0:798fb343e022 520 return(rtn_val);
j3 0:798fb343e022 521 }
j3 0:798fb343e022 522
j3 0:798fb343e022 523
j3 0:798fb343e022 524 void Max7219::display_all_on(void)
j3 0:798fb343e022 525 {
j3 0:798fb343e022 526 uint8_t idx, idy;
j3 0:798fb343e022 527
j3 0:798fb343e022 528 //writes every digit of every device to 0xFF
j3 0:798fb343e022 529 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 530 {
j3 0:798fb343e022 531 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
j3 0:798fb343e022 532 {
j3 0:798fb343e022 533 write_digit((idx + 1), (idy + 1), 0xFF);
j3 0:798fb343e022 534 }
j3 0:798fb343e022 535 }
j3 0:798fb343e022 536 }
j3 0:798fb343e022 537
j3 0:798fb343e022 538
j3 0:798fb343e022 539 void Max7219::display_all_off(void)
j3 0:798fb343e022 540 {
j3 0:798fb343e022 541 uint8_t idx, idy;
j3 0:798fb343e022 542
j3 0:798fb343e022 543 //writes every digit of every device to 0
j3 0:798fb343e022 544 for(idx = 0; idx < _num_devices; idx++)
j3 0:798fb343e022 545 {
j3 0:798fb343e022 546 for(idy = 0; idy < MAX7219_DIGIT_7; idy++)
j3 0:798fb343e022 547 {
j3 0:798fb343e022 548 write_digit((idx + 1), (idy + 1), 0);
j3 0:798fb343e022 549 }
j3 0:798fb343e022 550 }
j3 0:798fb343e022 551 }
j3 0:798fb343e022 552