Serially Interfaced, 8-Digit LED Display Drivers.

Committer:
mcm
Date:
Tue Oct 10 09:24:46 2017 +0000
Revision:
3:0d112217a912
Parent:
2:98dff9534ae1
The driver was completed and tested, it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 2:98dff9534ae1 1 /**
mcm 2:98dff9534ae1 2 * @brief MAX7219.h
mcm 2:98dff9534ae1 3 * @details Serially Interfaced, 8-Digit LED Display Drivers.
mcm 2:98dff9534ae1 4 * Header file.
mcm 2:98dff9534ae1 5 *
mcm 2:98dff9534ae1 6 *
mcm 2:98dff9534ae1 7 * @return NA
mcm 2:98dff9534ae1 8 *
mcm 2:98dff9534ae1 9 * @author Manuel Caballero
mcm 2:98dff9534ae1 10 * @date 9/October/2017
mcm 2:98dff9534ae1 11 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 12 * @pre NaN.
mcm 2:98dff9534ae1 13 * @warning NaN
mcm 2:98dff9534ae1 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 2:98dff9534ae1 15 */
mcm 2:98dff9534ae1 16
mcm 2:98dff9534ae1 17 #include "MAX7219.h"
mcm 2:98dff9534ae1 18
mcm 2:98dff9534ae1 19
mcm 2:98dff9534ae1 20 MAX7219::MAX7219 ( PinName mosi, PinName miso, PinName sclk, PinName cs, uint32_t freq )
mcm 2:98dff9534ae1 21 : _spi ( mosi, miso, sclk )
mcm 2:98dff9534ae1 22 , _cs ( cs )
mcm 2:98dff9534ae1 23 {
mcm 2:98dff9534ae1 24 _spi.frequency( freq );
mcm 2:98dff9534ae1 25 }
mcm 2:98dff9534ae1 26
mcm 2:98dff9534ae1 27
mcm 2:98dff9534ae1 28 MAX7219::~MAX7219()
mcm 2:98dff9534ae1 29 {
mcm 2:98dff9534ae1 30 }
mcm 2:98dff9534ae1 31
mcm 2:98dff9534ae1 32
mcm 2:98dff9534ae1 33
mcm 2:98dff9534ae1 34 /**
mcm 2:98dff9534ae1 35 * @brief MAX7219_Mode ( MAX7219_shutdown_reg_t )
mcm 2:98dff9534ae1 36 *
mcm 2:98dff9534ae1 37 * @details It puts the device in shutdown mode.
mcm 2:98dff9534ae1 38 *
mcm 2:98dff9534ae1 39 * @param[in] myMAX7219mode: Shutdown or Normal operation mode.
mcm 2:98dff9534ae1 40 *
mcm 2:98dff9534ae1 41 * @param[out] NaN.
mcm 2:98dff9534ae1 42 *
mcm 2:98dff9534ae1 43 *
mcm 2:98dff9534ae1 44 * @return Status of MAX7219_Mode.
mcm 2:98dff9534ae1 45 *
mcm 2:98dff9534ae1 46 *
mcm 2:98dff9534ae1 47 * @author Manuel Caballero
mcm 2:98dff9534ae1 48 * @date 9/October/2017
mcm 2:98dff9534ae1 49 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 50 * @pre NaN
mcm 2:98dff9534ae1 51 * @warning NaN.
mcm 2:98dff9534ae1 52 */
mcm 2:98dff9534ae1 53 MAX7219::MAX7219_status_t MAX7219::MAX7219_Mode ( MAX7219_shutdown_reg_t myMAX7219mode )
mcm 2:98dff9534ae1 54 {
mcm 2:98dff9534ae1 55 char cmd[] = { SHUTDOWN, 0 };
mcm 2:98dff9534ae1 56 int mySPI_status = 0;
mcm 2:98dff9534ae1 57
mcm 2:98dff9534ae1 58
mcm 2:98dff9534ae1 59 cmd[ 1 ] = myMAX7219mode;
mcm 2:98dff9534ae1 60
mcm 2:98dff9534ae1 61 _cs = 0;
mcm 2:98dff9534ae1 62 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 63 _cs = 1;
mcm 2:98dff9534ae1 64
mcm 2:98dff9534ae1 65
mcm 2:98dff9534ae1 66 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 67 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 68 else
mcm 2:98dff9534ae1 69 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 70 }
mcm 2:98dff9534ae1 71
mcm 2:98dff9534ae1 72
mcm 2:98dff9534ae1 73
mcm 2:98dff9534ae1 74 /**
mcm 2:98dff9534ae1 75 * @brief MAX7219_DisplayTest ( MAX7219_display_test_reg_t )
mcm 2:98dff9534ae1 76 *
mcm 2:98dff9534ae1 77 * @details It turns all the LEDs on ( Test mode enabled ) or normal operation.
mcm 2:98dff9534ae1 78 *
mcm 2:98dff9534ae1 79 * @param[in] myMAX7219DisplayTestMode: Mode: Test or Normal operation.
mcm 2:98dff9534ae1 80 *
mcm 2:98dff9534ae1 81 * @param[out] NaN.
mcm 2:98dff9534ae1 82 *
mcm 2:98dff9534ae1 83 *
mcm 2:98dff9534ae1 84 * @return Status of MAX7219_DisplayTest.
mcm 2:98dff9534ae1 85 *
mcm 2:98dff9534ae1 86 *
mcm 2:98dff9534ae1 87 * @author Manuel Caballero
mcm 2:98dff9534ae1 88 * @date 9/October/2017
mcm 2:98dff9534ae1 89 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 90 * @pre NaN
mcm 2:98dff9534ae1 91 * @warning NaN.
mcm 2:98dff9534ae1 92 */
mcm 2:98dff9534ae1 93 MAX7219::MAX7219_status_t MAX7219::MAX7219_DisplayTest ( MAX7219_display_test_reg_t myMAX7219DisplayTestMode )
mcm 2:98dff9534ae1 94 {
mcm 2:98dff9534ae1 95 char cmd[] = { DISPLAY_TEST, 0 };
mcm 2:98dff9534ae1 96 int mySPI_status = 0;
mcm 2:98dff9534ae1 97
mcm 2:98dff9534ae1 98
mcm 2:98dff9534ae1 99 cmd[ 1 ] = myMAX7219DisplayTestMode;
mcm 2:98dff9534ae1 100
mcm 2:98dff9534ae1 101
mcm 2:98dff9534ae1 102 _cs = 0;
mcm 2:98dff9534ae1 103 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 104 _cs = 1;
mcm 2:98dff9534ae1 105
mcm 2:98dff9534ae1 106
mcm 2:98dff9534ae1 107
mcm 2:98dff9534ae1 108 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 109 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 110 else
mcm 2:98dff9534ae1 111 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 112 }
mcm 2:98dff9534ae1 113
mcm 2:98dff9534ae1 114
mcm 2:98dff9534ae1 115
mcm 2:98dff9534ae1 116 /**
mcm 2:98dff9534ae1 117 * @brief MAX7219_DecodeMode ( MAX7219_decode_mode_reg_t )
mcm 2:98dff9534ae1 118 *
mcm 2:98dff9534ae1 119 * @details It enables and configures the decode-mode or turns it off.
mcm 2:98dff9534ae1 120 *
mcm 2:98dff9534ae1 121 * @param[in] myMAX7219DecodeMode: Decode-mode option.
mcm 2:98dff9534ae1 122 *
mcm 2:98dff9534ae1 123 * @param[out] NaN.
mcm 2:98dff9534ae1 124 *
mcm 2:98dff9534ae1 125 *
mcm 2:98dff9534ae1 126 * @return Status of MAX7219_DecodeMode.
mcm 2:98dff9534ae1 127 *
mcm 2:98dff9534ae1 128 *
mcm 2:98dff9534ae1 129 * @author Manuel Caballero
mcm 2:98dff9534ae1 130 * @date 9/October/2017
mcm 2:98dff9534ae1 131 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 132 * @pre NaN
mcm 2:98dff9534ae1 133 * @warning NaN.
mcm 2:98dff9534ae1 134 */
mcm 2:98dff9534ae1 135 MAX7219::MAX7219_status_t MAX7219::MAX7219_DecodeMode ( MAX7219_decode_mode_reg_t myMAX7219DecodeMode )
mcm 2:98dff9534ae1 136 {
mcm 2:98dff9534ae1 137 char cmd[] = { DECODE_MODE, 0 };
mcm 2:98dff9534ae1 138 int mySPI_status = 0;
mcm 2:98dff9534ae1 139
mcm 2:98dff9534ae1 140
mcm 2:98dff9534ae1 141 cmd[ 1 ] = myMAX7219DecodeMode;
mcm 2:98dff9534ae1 142
mcm 2:98dff9534ae1 143
mcm 2:98dff9534ae1 144 _cs = 0;
mcm 2:98dff9534ae1 145 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 146 _cs = 1;
mcm 2:98dff9534ae1 147
mcm 2:98dff9534ae1 148
mcm 2:98dff9534ae1 149
mcm 2:98dff9534ae1 150 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 151 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 152 else
mcm 2:98dff9534ae1 153 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 154 }
mcm 2:98dff9534ae1 155
mcm 2:98dff9534ae1 156
mcm 2:98dff9534ae1 157
mcm 2:98dff9534ae1 158 /**
mcm 2:98dff9534ae1 159 * @brief MAX7219_SetIntensity ( MAX7219_intensity_reg_t )
mcm 2:98dff9534ae1 160 *
mcm 2:98dff9534ae1 161 * @details It configures the intensity of the device.
mcm 2:98dff9534ae1 162 *
mcm 2:98dff9534ae1 163 * @param[in] myMAX7219Intensity: Intensity option.
mcm 2:98dff9534ae1 164 *
mcm 2:98dff9534ae1 165 * @param[out] NaN.
mcm 2:98dff9534ae1 166 *
mcm 2:98dff9534ae1 167 *
mcm 2:98dff9534ae1 168 * @return Status of MAX7219_SetIntensity.
mcm 2:98dff9534ae1 169 *
mcm 2:98dff9534ae1 170 *
mcm 2:98dff9534ae1 171 * @author Manuel Caballero
mcm 2:98dff9534ae1 172 * @date 9/October/2017
mcm 2:98dff9534ae1 173 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 174 * @pre NaN
mcm 2:98dff9534ae1 175 * @warning NaN.
mcm 2:98dff9534ae1 176 */
mcm 2:98dff9534ae1 177 MAX7219::MAX7219_status_t MAX7219::MAX7219_SetIntensity ( MAX7219_intensity_reg_t myMAX7219Intensity )
mcm 2:98dff9534ae1 178 {
mcm 2:98dff9534ae1 179 char cmd[] = { INTENSITY, 0 };
mcm 2:98dff9534ae1 180 int mySPI_status = 0;
mcm 2:98dff9534ae1 181
mcm 2:98dff9534ae1 182
mcm 2:98dff9534ae1 183 cmd[ 1 ] = myMAX7219Intensity;
mcm 2:98dff9534ae1 184
mcm 2:98dff9534ae1 185
mcm 2:98dff9534ae1 186 _cs = 0;
mcm 2:98dff9534ae1 187 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 188 _cs = 1;
mcm 2:98dff9534ae1 189
mcm 2:98dff9534ae1 190
mcm 2:98dff9534ae1 191
mcm 2:98dff9534ae1 192 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 193 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 194 else
mcm 2:98dff9534ae1 195 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 196 }
mcm 2:98dff9534ae1 197
mcm 2:98dff9534ae1 198
mcm 2:98dff9534ae1 199
mcm 2:98dff9534ae1 200 /**
mcm 2:98dff9534ae1 201 * @brief MAX7219_SetScanLimit ( MAX7219_scan_limit_reg_t )
mcm 2:98dff9534ae1 202 *
mcm 2:98dff9534ae1 203 * @details It configures duty cycle of the device.
mcm 2:98dff9534ae1 204 *
mcm 2:98dff9534ae1 205 * @param[in] MAX7219_scan_limit_reg_t: Duty cycle option.
mcm 2:98dff9534ae1 206 *
mcm 2:98dff9534ae1 207 * @param[out] NaN.
mcm 2:98dff9534ae1 208 *
mcm 2:98dff9534ae1 209 *
mcm 2:98dff9534ae1 210 * @return Status of MAX7219_SetScanLimit.
mcm 2:98dff9534ae1 211 *
mcm 2:98dff9534ae1 212 *
mcm 2:98dff9534ae1 213 * @author Manuel Caballero
mcm 2:98dff9534ae1 214 * @date 9/October/2017
mcm 2:98dff9534ae1 215 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 216 * @pre NaN
mcm 2:98dff9534ae1 217 * @warning NaN.
mcm 2:98dff9534ae1 218 */
mcm 2:98dff9534ae1 219 MAX7219::MAX7219_status_t MAX7219::MAX7219_SetScanLimit ( MAX7219_scan_limit_reg_t myMAX7219ScanLimit )
mcm 2:98dff9534ae1 220 {
mcm 2:98dff9534ae1 221 char cmd[] = { SCAN_LIMIT, 0 };
mcm 2:98dff9534ae1 222 int mySPI_status = 0;
mcm 2:98dff9534ae1 223
mcm 2:98dff9534ae1 224
mcm 2:98dff9534ae1 225 cmd[ 1 ] = myMAX7219ScanLimit;
mcm 2:98dff9534ae1 226
mcm 2:98dff9534ae1 227
mcm 2:98dff9534ae1 228 _cs = 0;
mcm 2:98dff9534ae1 229 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 230 _cs = 1;
mcm 2:98dff9534ae1 231
mcm 2:98dff9534ae1 232
mcm 2:98dff9534ae1 233
mcm 2:98dff9534ae1 234 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 235 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 236 else
mcm 2:98dff9534ae1 237 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 238 }
mcm 2:98dff9534ae1 239
mcm 2:98dff9534ae1 240
mcm 2:98dff9534ae1 241
mcm 2:98dff9534ae1 242 /**
mcm 2:98dff9534ae1 243 * @brief MAX7219_SetDigit ( MAX7219_digit_t , MAX7219_code_b_font_reg_t , MAX7219_code_b_dp_t )
mcm 2:98dff9534ae1 244 *
mcm 2:98dff9534ae1 245 * @details It sets the digit to be written and its value.
mcm 2:98dff9534ae1 246 *
mcm 2:98dff9534ae1 247 * @param[in] myMAX7219Digit: Digit to be written.
mcm 2:98dff9534ae1 248 * @param[in] myCharacter: The current value.
mcm 2:98dff9534ae1 249 * @param[in] myDP_status: DP enabled/disabled.
mcm 2:98dff9534ae1 250 *
mcm 2:98dff9534ae1 251 * @param[out] NaN.
mcm 2:98dff9534ae1 252 *
mcm 2:98dff9534ae1 253 *
mcm 2:98dff9534ae1 254 * @return Status of MAX7219_SetDigit.
mcm 2:98dff9534ae1 255 *
mcm 2:98dff9534ae1 256 *
mcm 2:98dff9534ae1 257 * @author Manuel Caballero
mcm 2:98dff9534ae1 258 * @date 9/October/2017
mcm 2:98dff9534ae1 259 * @version 9/October/2017 The ORIGIN
mcm 2:98dff9534ae1 260 * @pre NaN
mcm 2:98dff9534ae1 261 * @warning NaN.
mcm 2:98dff9534ae1 262 */
mcm 2:98dff9534ae1 263 MAX7219::MAX7219_status_t MAX7219::MAX7219_SetDigit ( MAX7219_digit_t myMAX7219Digit, MAX7219_code_b_font_reg_t myCharacter, MAX7219_code_b_dp_t myDP_status )
mcm 2:98dff9534ae1 264 {
mcm 2:98dff9534ae1 265 char cmd[] = { 0, 0 };
mcm 2:98dff9534ae1 266 int mySPI_status = 0;
mcm 2:98dff9534ae1 267
mcm 2:98dff9534ae1 268
mcm 2:98dff9534ae1 269 switch ( myMAX7219Digit ) {
mcm 2:98dff9534ae1 270 default:
mcm 2:98dff9534ae1 271 case SET_DIGIT_0:
mcm 2:98dff9534ae1 272 cmd[ 0 ] = DIGIT_0;
mcm 2:98dff9534ae1 273 break;
mcm 2:98dff9534ae1 274
mcm 2:98dff9534ae1 275 case SET_DIGIT_1:
mcm 2:98dff9534ae1 276 cmd[ 0 ] = DIGIT_1;
mcm 2:98dff9534ae1 277 break;
mcm 2:98dff9534ae1 278
mcm 2:98dff9534ae1 279 case SET_DIGIT_2:
mcm 2:98dff9534ae1 280 cmd[ 0 ] = DIGIT_2;
mcm 2:98dff9534ae1 281 break;
mcm 2:98dff9534ae1 282
mcm 2:98dff9534ae1 283 case SET_DIGIT_3:
mcm 2:98dff9534ae1 284 cmd[ 0 ] = DIGIT_3;
mcm 2:98dff9534ae1 285 break;
mcm 2:98dff9534ae1 286
mcm 2:98dff9534ae1 287 case SET_DIGIT_4:
mcm 2:98dff9534ae1 288 cmd[ 0 ] = DIGIT_4;
mcm 2:98dff9534ae1 289 break;
mcm 2:98dff9534ae1 290
mcm 2:98dff9534ae1 291 case SET_DIGIT_5:
mcm 2:98dff9534ae1 292 cmd[ 0 ] = DIGIT_5;
mcm 2:98dff9534ae1 293 break;
mcm 2:98dff9534ae1 294
mcm 2:98dff9534ae1 295 case SET_DIGIT_6:
mcm 2:98dff9534ae1 296 cmd[ 0 ] = DIGIT_6;
mcm 2:98dff9534ae1 297 break;
mcm 2:98dff9534ae1 298
mcm 2:98dff9534ae1 299 case SET_DIGIT_7:
mcm 2:98dff9534ae1 300 cmd[ 0 ] = DIGIT_7;
mcm 2:98dff9534ae1 301 break;
mcm 2:98dff9534ae1 302 }
mcm 2:98dff9534ae1 303
mcm 2:98dff9534ae1 304
mcm 2:98dff9534ae1 305 if ( myDP_status == DP_ENABLED )
mcm 2:98dff9534ae1 306 cmd[ 1 ] = ( myCharacter | 0x80 );
mcm 2:98dff9534ae1 307 else
mcm 2:98dff9534ae1 308 cmd[ 1 ] = myCharacter;
mcm 2:98dff9534ae1 309
mcm 2:98dff9534ae1 310
mcm 2:98dff9534ae1 311 _cs = 0;
mcm 2:98dff9534ae1 312 mySPI_status = _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
mcm 2:98dff9534ae1 313 _cs = 1;
mcm 2:98dff9534ae1 314
mcm 2:98dff9534ae1 315
mcm 2:98dff9534ae1 316
mcm 2:98dff9534ae1 317 if ( ( mySPI_status / ( sizeof( cmd )/sizeof( cmd[0] ) ) ) == SPI_SUCCESS )
mcm 2:98dff9534ae1 318 return MAX7219_SUCCESS;
mcm 2:98dff9534ae1 319 else
mcm 2:98dff9534ae1 320 return MAX7219_FAILURE;
mcm 2:98dff9534ae1 321 }