/************************************************************************/ /* */ /* 7 Segment Driver MAX7219 */ /* Common Anode Display */ /* */ /* Author: Peter Dannegger */ /* danni@specs.de */ /* */ /************************************************************************/ #include "main.h" #include "max7219.h" u8 brightness = 5; u8 code digits[] = { DIGITS }; u8 displaymem[8] = { CHAR_SPACE, // 8 digits, msb first CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE }; u8 code charset[] = { // Definition Character Set _A+_B+_C+_D+_E+_F , // CHAR_0 _B+_C , // CHAR_1 _A+_B+ _D+_E+ _G, // CHAR_2 _A+_B+_C+_D+ _G, // CHAR_3 _B+_C+ _F+_G, // CHAR_4 _A+ _C+_D+ _F+_G, // CHAR_5 _A+ _C+_D+_E+_F+_G, // CHAR_6 _A+_B+_C , // CHAR_7 _A+_B+_C+_D+_E+_F+_G, // CHAR_8 _A+_B+_C+_D +_F+_G, // CHAR_9 _A+_B+_C+ _E+_F+_G, // CHAR_A _C+_D+_E+_F+_G, // CHAR_b _D+_E+ _G, // CHAR_c ;'c' _B+_C+_D+_E+ _G, // CHAR_d _A+ _D+_E+_F+_G, // CHAR_E _A+ _E+_F+_G, // CHAR_F 0 , // 16 = SPACE _G, // 17 = MINUS _A+_B+ _F+_G, // 18 = GRAD _A+ _D+_E+_F , // 19 = CHAR_C2 ;'C' _E+ _G, // 20 = CHAR_r _C+_D+_E+ _G, // 21 = CHAR_o _B+_C+ _E+_F+_G, // 22 = H _D+_E+_F , // 23 = L _D , // 24 = _ _A , // 25 = upper "-" _A+_B+ _E+_F+_G, // CHAR_P _B+_C+_D+_E+_F , // CHAR_U _A+_B+_C+ _E+_F // CHAR_M }; void display_write( u16 dc ) { u8 i; MAX7219_DDR |= 1<>= 1; // next segment dptr++; } display_write( byte + i * 256); // output same segments } } void display_clear( void ) { u8 i; for( i = 8; i; i--) displaymem[i-1] = CHAR_SPACE; } void display_init( void ) { display_write( 0xF00 ); // Testmode off display_write( 0x900 ); // Decode off display_write( 0xB07 ); // 8 Digits display_write( 0xC01 ); // Display on display_write( 0xA00 | brightness ); // Brightness } void display_off( void ) { display_write( 0xC00 ); }