Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MAX7219.h
00001 /** 00002 * @brief MAX7219.h 00003 * @details Serially Interfaced, 8-Digit LED Display Drivers. 00004 * Header file. 00005 * 00006 * 00007 * @return NA 00008 * 00009 * @author Manuel Caballero 00010 * @date 9/October/2017 00011 * @version 9/October/2017 The ORIGIN 00012 * @pre NaN. 00013 * @warning NaN 00014 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). 00015 */ 00016 #ifndef MAX7219_H 00017 #define MAX7219_H 00018 00019 #include "mbed.h" 00020 /** 00021 Example: 00022 00023 #include "mbed.h" 00024 #include "MAX7219.h" 00025 00026 00027 MAX7219 myMAX7219 ( p11, p12, p13, p14, 1000000 ); // MOSI: P11 | MISO: P12 | SCLK: P13 | CS: P14 | FREQ: 1MHz 00028 00029 Ticker newReading; 00030 DigitalOut myled1 ( LED1 ); 00031 00032 00033 MAX7219::MAX7219_status_t mySPI_status; 00034 00035 bool changeDP_status = false; 00036 00037 00038 // Change the state of the DP 00039 void readDATA ( void ) 00040 { 00041 myled1 = 1; 00042 00043 if ( changeDP_status == true ) { 00044 // DP OFF 00045 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_0, MAX7219::CHARACTER_0, MAX7219::DP_DISABLED ); 00046 wait_us ( 10 ); 00047 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_1, MAX7219::CHARACTER_1, MAX7219::DP_DISABLED ); 00048 wait_us ( 10 ); 00049 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_2, MAX7219::CHARACTER_2, MAX7219::DP_DISABLED ); 00050 wait_us ( 10 ); 00051 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_3, MAX7219::CHARACTER_3, MAX7219::DP_DISABLED ); 00052 wait_us ( 10 ); 00053 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_4, MAX7219::CHARACTER_4, MAX7219::DP_DISABLED ); 00054 wait_us ( 10 ); 00055 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_5, MAX7219::CHARACTER_5, MAX7219::DP_DISABLED ); 00056 wait_us ( 10 ); 00057 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_6, MAX7219::CHARACTER_6, MAX7219::DP_DISABLED ); 00058 wait_us ( 10 ); 00059 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_7, MAX7219::CHARACTER_7, MAX7219::DP_DISABLED ); 00060 00061 changeDP_status = false; 00062 } else { 00063 // DP ON 00064 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_0, MAX7219::CHARACTER_0, MAX7219::DP_ENABLED ); 00065 wait_us ( 10 ); 00066 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_1, MAX7219::CHARACTER_1, MAX7219::DP_ENABLED ); 00067 wait_us ( 10 ); 00068 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_2, MAX7219::CHARACTER_2, MAX7219::DP_ENABLED ); 00069 wait_us ( 10 ); 00070 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_3, MAX7219::CHARACTER_3, MAX7219::DP_ENABLED ); 00071 wait_us ( 10 ); 00072 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_4, MAX7219::CHARACTER_4, MAX7219::DP_ENABLED ); 00073 wait_us ( 10 ); 00074 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_5, MAX7219::CHARACTER_5, MAX7219::DP_ENABLED ); 00075 wait_us ( 10 ); 00076 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_6, MAX7219::CHARACTER_6, MAX7219::DP_ENABLED ); 00077 wait_us ( 10 ); 00078 mySPI_status = myMAX7219.MAX7219_SetDigit ( MAX7219::SET_DIGIT_7, MAX7219::CHARACTER_7, MAX7219::DP_ENABLED ); 00079 00080 changeDP_status = true; 00081 } 00082 00083 myled1 = 0; 00084 } 00085 00086 00087 int main() 00088 { 00089 uint32_t i = 0; 00090 00091 00092 // BCD code ON 00093 mySPI_status = myMAX7219.MAX7219_DecodeMode ( MAX7219::DECODE_DIGITS_7_0 ); 00094 wait_us ( 10 ); 00095 00096 // 7 digits available 00097 mySPI_status = myMAX7219.MAX7219_SetScanLimit( MAX7219::DISPLAY_DIGIT_0_1_2_3_4_5_6_7 ); 00098 wait_us ( 10 ); 00099 00100 // Configure the intensity 00101 mySPI_status = myMAX7219.MAX7219_SetIntensity( MAX7219::DUTY_CICLE_9_32 ); 00102 wait_us ( 10 ); 00103 00104 // Clear all the digits 00105 for ( i = MAX7219::SET_DIGIT_0; i <= MAX7219::SET_DIGIT_7; i++ ) { 00106 mySPI_status = myMAX7219.MAX7219_SetDigit ( ( MAX7219::MAX7219_digit_t )i, MAX7219::CHARACTER_BLANK, MAX7219::DP_DISABLED ); 00107 wait_us ( 10 ); 00108 } 00109 00110 00111 // Test Mode Enabled: All displays ON 00112 mySPI_status = myMAX7219.MAX7219_DisplayTest ( MAX7219::DISPLAY_TEST_MODE ); 00113 wait_ms ( 2500 ); 00114 00115 // Test Mode Disabled 00116 mySPI_status = myMAX7219.MAX7219_DisplayTest ( MAX7219::DISPLAY_NORMAL_OPERATION ); 00117 wait_us ( 10 ); 00118 00119 // Device in normal operation mode 00120 mySPI_status = myMAX7219.MAX7219_Mode ( MAX7219::NORMAL_OPERATION ); 00121 00122 00123 newReading.attach( &readDATA, 1 ); // the address of the function to be attached ( readDATA ) and the interval ( 1s ) 00124 00125 00126 // Let the callbacks take care of everything 00127 while(1) { 00128 sleep(); 00129 } 00130 } 00131 00132 */ 00133 00134 00135 /*! 00136 Library for the MAX7219 Serially Interfaced, 8-Digit LED Display Drivers. 00137 */ 00138 class MAX7219 00139 { 00140 public: 00141 /* General Call Commands */ 00142 /** 00143 * @brief REGISTER ADDRESS MAP 00144 */ 00145 typedef enum { 00146 NO_OP = 0x00, /*!< No operation. */ 00147 DIGIT_0 = 0x01, /*!< Digit 0. */ 00148 DIGIT_1 = 0x02, /*!< Digit 1. */ 00149 DIGIT_2 = 0x03, /*!< Digit 2. */ 00150 DIGIT_3 = 0x04, /*!< Digit 3. */ 00151 DIGIT_4 = 0x05, /*!< Digit 4. */ 00152 DIGIT_5 = 0x06, /*!< Digit 5. */ 00153 DIGIT_6 = 0x07, /*!< Digit 6. */ 00154 DIGIT_7 = 0x08, /*!< Digit 7. */ 00155 DECODE_MODE = 0x09, /*!< Decode Mode. */ 00156 INTENSITY = 0x0A, /*!< Intensity. */ 00157 SCAN_LIMIT = 0x0B, /*!< Scan Limit. */ 00158 SHUTDOWN = 0x0C, /*!< Shutdown. */ 00159 DISPLAY_TEST = 0x0F /*!< Display test. */ 00160 } MAX7219_register_address_map_t; 00161 00162 00163 00164 /* Shutdown Register Data */ 00165 /** 00166 * @brief Shutdown Register Format 00167 */ 00168 typedef enum { 00169 SHUTDOWN_MODE = 0x00, /*!< Device in shutdown mode */ 00170 NORMAL_OPERATION = 0x01 /*!< Device in normal mode */ 00171 } MAX7219_shutdown_reg_t; 00172 00173 00174 /* Display-Test Register Data */ 00175 /** 00176 * @brief Display-Test Register Format 00177 */ 00178 typedef enum { 00179 DISPLAY_TEST_MODE = 0x01, /*!< All the LEDs are ON */ 00180 DISPLAY_NORMAL_OPERATION = 0x00 /*!< Normal operation */ 00181 } MAX7219_display_test_reg_t; 00182 00183 00184 00185 /* Decode-Mode Register Data */ 00186 /** 00187 * @brief Decode-Mode Register 00188 */ 00189 typedef enum { 00190 NO_DECODE = 0x00, /*!< No decode for digits 7-0 */ 00191 DECODE_DIGIT_0 = 0x01, /*!< Code B decode for digit 0. No decode for digits 7-1 */ 00192 DECODE_DIGITS_3_0 = 0x0F, /*!< Code B decode for digits 3-0. No decode for digits 7-4 */ 00193 DECODE_DIGITS_7_0 = 0xFF /*!< Code B decode for digits 7-0 */ 00194 } MAX7219_decode_mode_reg_t; 00195 00196 00197 00198 /* Code B Font Register Data */ 00199 /** 00200 * @brief Code B Font 00201 */ 00202 typedef enum { 00203 CHARACTER_0 = 0x00, /*!< 0 */ 00204 CHARACTER_1 = 0x01, /*!< 1 */ 00205 CHARACTER_2 = 0x02, /*!< 2 */ 00206 CHARACTER_3 = 0x03, /*!< 3 */ 00207 CHARACTER_4 = 0x04, /*!< 4 */ 00208 CHARACTER_5 = 0x05, /*!< 5 */ 00209 CHARACTER_6 = 0x06, /*!< 6 */ 00210 CHARACTER_7 = 0x07, /*!< 7 */ 00211 CHARACTER_8 = 0x08, /*!< 8 */ 00212 CHARACTER_9 = 0x09, /*!< 9 */ 00213 CHARACTER_HYPHEN = 0x0A, /*!< - */ 00214 CHARACTER_E = 0x0B, /*!< E */ 00215 CHARACTER_H = 0x0C, /*!< H */ 00216 CHARACTER_L = 0x0D, /*!< L */ 00217 CHARACTER_P = 0x0E, /*!< P */ 00218 CHARACTER_BLANK = 0x0F /*!< Blank */ 00219 } MAX7219_code_b_font_reg_t; 00220 00221 00222 00223 typedef enum { 00224 DP_ENABLED = 0x01, /*!< DP ON */ 00225 DP_DISABLED = 0x00 /*!< DP OFF */ 00226 } MAX7219_code_b_dp_t ; 00227 00228 00229 00230 /* Intensity Register Format Data */ 00231 /** 00232 * @brief Intensity Register Format 00233 */ 00234 typedef enum { 00235 DUTY_CICLE_1_32 = 0x00, /*!< Duty cycle 1/32 ( min ) */ 00236 DUTY_CICLE_3_32 = 0x01, /*!< Duty cycle 3/32 */ 00237 DUTY_CICLE_5_32 = 0x02, /*!< Duty cycle 5/32 */ 00238 DUTY_CICLE_7_32 = 0x03, /*!< Duty cycle 7/32 */ 00239 DUTY_CICLE_9_32 = 0x04, /*!< Duty cycle 9/32 */ 00240 DUTY_CICLE_11_32 = 0x05, /*!< Duty cycle 11/32 */ 00241 DUTY_CICLE_13_32 = 0x06, /*!< Duty cycle 13/32 */ 00242 DUTY_CICLE_15_32 = 0x07, /*!< Duty cycle 15/32 */ 00243 DUTY_CICLE_17_32 = 0x08, /*!< Duty cycle 17/32 */ 00244 DUTY_CICLE_19_32 = 0x09, /*!< Duty cycle 19/32 */ 00245 DUTY_CICLE_21_32 = 0x0A, /*!< Duty cycle 21/32 */ 00246 DUTY_CICLE_23_32 = 0x0B, /*!< Duty cycle 23/32 */ 00247 DUTY_CICLE_25_32 = 0x0C, /*!< Duty cycle 25/32 */ 00248 DUTY_CICLE_27_32 = 0x0D, /*!< Duty cycle 27/32 */ 00249 DUTY_CICLE_29_32 = 0x0E, /*!< Duty cycle 29/32 */ 00250 DUTY_CICLE_31_32 = 0x0F /*!< Duty cycle 31/32 ( max ) */ 00251 } MAX7219_intensity_reg_t; 00252 00253 00254 /* Scan-Limit Register Format Data */ 00255 /** 00256 * @brief Scan-Limit Register Format 00257 */ 00258 typedef enum { 00259 DISPLAY_DIGIT_0 = 0x00, /*!< Display digit 0 only */ 00260 DISPLAY_DIGIT_0_1 = 0x01, /*!< Display digits 0 & 1 */ 00261 DISPLAY_DIGIT_0_1_2 = 0x02, /*!< Display digits 0 1 2 */ 00262 DISPLAY_DIGIT_0_1_2_3 = 0x03, /*!< Display digits 0 1 2 3 */ 00263 DISPLAY_DIGIT_0_1_2_3_4 = 0x04, /*!< Display digits 0 1 2 3 4 */ 00264 DISPLAY_DIGIT_0_1_2_3_4_5 = 0x05, /*!< Display digits 0 1 2 3 4 5 */ 00265 DISPLAY_DIGIT_0_1_2_3_4_5_6 = 0x06, /*!< Display digits 0 1 2 3 4 5 6 */ 00266 DISPLAY_DIGIT_0_1_2_3_4_5_6_7 = 0x07 /*!< Display digits 0 1 2 3 4 5 6 7 */ 00267 } MAX7219_scan_limit_reg_t; 00268 00269 00270 00271 /** 00272 * @brief Select digits 00273 */ 00274 typedef enum { 00275 SET_DIGIT_0 = 0x00, /*!< Digit 0 selected */ 00276 SET_DIGIT_1 = 0x01, /*!< Digit 1 selected */ 00277 SET_DIGIT_2 = 0x02, /*!< Digit 2 selected */ 00278 SET_DIGIT_3 = 0x03, /*!< Digit 3 selected */ 00279 SET_DIGIT_4 = 0x04, /*!< Digit 4 selected */ 00280 SET_DIGIT_5 = 0x05, /*!< Digit 5 selected */ 00281 SET_DIGIT_6 = 0x06, /*!< Digit 6 selected */ 00282 SET_DIGIT_7 = 0x07 /*!< Digit 7 selected */ 00283 } MAX7219_digit_t; 00284 00285 00286 00287 #ifndef MAX7219_VECTOR_STRUCT_H 00288 #define MAX7219_VECTOR_STRUCT_H 00289 /* No-Decode Mode Data Bits */ 00290 typedef struct { 00291 uint8_t mySEG; /*!< D7: DP | D6: A | D5: B | D4: C | D3: D | D2: E | D1: F | D0: G */ 00292 } MAX7219_no_decode_b_t; 00293 #endif 00294 00295 00296 00297 /** 00298 * @brief INTERNAL CONSTANTS 00299 */ 00300 typedef enum { 00301 MAX7219_SUCCESS = 0, 00302 MAX7219_FAILURE = 1, 00303 SPI_SUCCESS = 1 00304 } MAX7219_status_t; 00305 00306 00307 00308 00309 /** Create an MAX7219 object connected to the specified SPI pins. 00310 * 00311 * @param mosi SPI Master Output Slave Input 00312 * @param miso SPI Master Input Slave Output 00313 * @param sclk SPI clock 00314 * @param cs SPI Chip Select 00315 * @param freq SPI frequency in Hz. 00316 */ 00317 MAX7219 ( PinName mosi, PinName miso, PinName sclk, PinName cs, uint32_t freq ); 00318 00319 /** Delete MAX7219 object. 00320 */ 00321 ~MAX7219(); 00322 00323 /** It puts the device in shutdown/normal operation mode. 00324 */ 00325 MAX7219_status_t MAX7219_Mode ( MAX7219_shutdown_reg_t myMAX7219mode ); 00326 00327 /** It enables all the display or leaves the device in normal operation. 00328 */ 00329 MAX7219_status_t MAX7219_DisplayTest ( MAX7219_display_test_reg_t myMAX7219DisplayTestMode ); 00330 00331 /** It selects the decode mode. 00332 */ 00333 MAX7219_status_t MAX7219_DecodeMode ( MAX7219_decode_mode_reg_t myMAX7219DecodeMode ); 00334 00335 /** It sets the intensity. 00336 */ 00337 MAX7219_status_t MAX7219_SetIntensity ( MAX7219_intensity_reg_t myMAX7219Intensity ); 00338 00339 /** It sets the scan limit. 00340 */ 00341 MAX7219_status_t MAX7219_SetScanLimit ( MAX7219_scan_limit_reg_t myMAX7219ScanLimit ); 00342 00343 /** It sets a new value on the chosen digit. 00344 */ 00345 MAX7219_status_t MAX7219_SetDigit ( MAX7219_digit_t myMAX7219Digit, MAX7219_code_b_font_reg_t myCharacter, MAX7219_code_b_dp_t myDP_status ); 00346 00347 private: 00348 SPI _spi; 00349 DigitalOut _cs; 00350 }; 00351 00352 #endif
Generated on Sun Aug 21 2022 18:15:08 by
1.7.2