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.
Fork of Max7221 by
Max7221.cpp
00001 /** 00002 * @file Max7221.cpp 00003 * @brief MAX7219/7221 driver class. 00004 * 00005 * @author Grzegorz Kaczmarek 00006 * @comment Code inspired on earlier Dwayne S. Dilbeck's work 00007 * @date 20/11/2015 00008 */ 00009 00010 #include "mbed.h" 00011 #include "Max7221.h" 00012 00013 // Static members initialization 00014 SPI *Max7221::mp_spi = NULL; 00015 DigitalOut *Max7221::mp_cs = NULL; 00016 unsigned int Max7221::m_counter = 0; 00017 00018 Max7221::Max7221() { 00019 m_position = m_counter; 00020 m_counter++; 00021 } 00022 00023 Max7221::Max7221(SPI *spi, DigitalOut *cs) { 00024 mp_spi = spi; 00025 mp_cs = cs; 00026 m_position = m_counter; 00027 m_counter++; 00028 } 00029 00030 void Max7221::SetSpi(SPI *spi) { 00031 mp_spi = spi; 00032 } 00033 00034 void Max7221::SetCs(DigitalOut *cs) { 00035 mp_cs = cs; 00036 } 00037 00038 00039 void Max7221::CsLow() 00040 { 00041 if(mp_cs != NULL) { 00042 *mp_cs = LOG_0; 00043 } 00044 } 00045 00046 void Max7221::CsHigh() 00047 { 00048 if(mp_cs != NULL) { 00049 *mp_cs = LOG_1; 00050 } 00051 } 00052 00053 void Max7221::WriteRaw(unsigned int reg, unsigned int data) { 00054 if(mp_spi != NULL) { 00055 mp_spi->write(reg); 00056 mp_spi->write(data); 00057 } 00058 } 00059 00060 void Max7221::Write(unsigned int reg, unsigned int data) { 00061 unsigned int i; 00062 00063 CsLow(); 00064 if((m_counter > 1) && ((m_counter - 1) > m_position)) { 00065 i = m_counter - 1 - m_position; 00066 while(i--) { 00067 WriteRaw(max7221_reg_noop, 0x00); 00068 } 00069 } 00070 WriteRaw(reg, data); 00071 if(m_position > 0) { 00072 i = m_position; 00073 while(i--) { 00074 WriteRaw(max7221_reg_noop, 0x00); 00075 } 00076 } 00077 CsHigh(); 00078 } 00079 00080 void Max7221::TestMode(bool mode) { 00081 if(mode) { 00082 Write(max7221_reg_displayTest, 0x01); 00083 } else { 00084 Write(max7221_reg_displayTest, 0x00); 00085 } 00086 } 00087 00088 void Max7221::UseDigitsNo(unsigned int digits_no) { 00089 if((digits_no > 0) && (digits_no < 9)) { 00090 Write(max7221_reg_scanLimit, (digits_no - 1)); 00091 } 00092 } 00093 00094 void Max7221::DecodeMode(unsigned int mode) { 00095 Write(max7221_reg_decodeMode, mode); 00096 } 00097 00098 void Max7221::WriteDigit(unsigned int digit_no, unsigned int value) { 00099 unsigned int digit_reg; 00100 00101 if(digit_no < 8) { 00102 switch(digit_no) { 00103 case 0: 00104 digit_reg = max7221_reg_digit0; 00105 break; 00106 case 1: 00107 digit_reg = max7221_reg_digit1; 00108 break; 00109 case 2: 00110 digit_reg = max7221_reg_digit2; 00111 break; 00112 case 3: 00113 digit_reg = max7221_reg_digit3; 00114 break; 00115 case 4: 00116 digit_reg = max7221_reg_digit4; 00117 break; 00118 case 5: 00119 digit_reg = max7221_reg_digit5; 00120 break; 00121 case 6: 00122 digit_reg = max7221_reg_digit6; 00123 break; 00124 case 7: 00125 digit_reg = max7221_reg_digit7; 00126 break; 00127 default: 00128 digit_reg = max7221_reg_noop; 00129 break; 00130 } 00131 Write(digit_reg, value); 00132 } 00133 } 00134 00135 void Max7221::Intensity(unsigned int intensity) { 00136 if(intensity > 0x0F) { 00137 intensity = 0x0F; 00138 } 00139 Write(max7221_reg_intensity, intensity); 00140 } 00141 00142 void Max7221::OperationMode(bool mode) { 00143 if(mode) { 00144 Write(max7221_reg_shutdown, 0x01); 00145 } else { 00146 Write(max7221_reg_shutdown, 0x00); 00147 } 00148 } 00149 00150 void Max7221::Setup () { 00151 unsigned int i; 00152 00153 TestMode(false); // Disable display test 00154 UseDigitsNo(8); // Use all 8 digits 00155 DecodeMode(0xFF); // Turn on Code B font decode for all digits 00156 for(i=0;i<8;i++) { // Clean all digits 00157 WriteDigit(i, 0x0F); 00158 } 00159 Intensity(0x01); // Set lowest display intensity(0x00-0xFF) 00160 OperationMode(true); // Enable operation mode 00161 }
Generated on Sat Jul 16 2022 23:52:39 by
