Charles Young's development fork. Going forward I only want to push mature code to main repository.
Fork of GEO_COUNTER_L432KC by
LED7segDisplay.cpp@44:a26ca542ae5e, 2018-09-06 (annotated)
- Committer:
- Charles David Young
- Date:
- Thu Sep 06 11:44:05 2018 -0700
- Revision:
- 44:a26ca542ae5e
- Parent:
- 41:08bf3ea5eba4
TickerCorrection
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Charles David Young |
25:0161bf1adc81 | 1 | /** |
Charles David Young |
25:0161bf1adc81 | 2 | * @author Charles Young |
Charles David Young |
25:0161bf1adc81 | 3 | * |
Charles David Young |
25:0161bf1adc81 | 4 | */ |
Charles David Young |
25:0161bf1adc81 | 5 | |
Charles David Young |
25:0161bf1adc81 | 6 | #include "LED7segDisplay.hpp" |
Charles David Young |
25:0161bf1adc81 | 7 | |
Charles David Young |
25:0161bf1adc81 | 8 | LED7segDisplay::LED7segDisplay() |
Charles David Young |
25:0161bf1adc81 | 9 | { |
charlesdavidyoung | 26:166dbe6022e8 | 10 | brightness = BRIGHTNESS_MAX; |
Charles David Young |
25:0161bf1adc81 | 11 | Display_init(); |
Charles David Young |
25:0161bf1adc81 | 12 | } |
Charles David Young |
25:0161bf1adc81 | 13 | |
Charles David Young |
25:0161bf1adc81 | 14 | //--------------------------------------------------------------------------- |
Charles David Young |
25:0161bf1adc81 | 15 | // Initialize the MAX7219 |
Charles David Young |
25:0161bf1adc81 | 16 | |
Charles David Young |
25:0161bf1adc81 | 17 | void LED7segDisplay::Display_init(void) |
Charles David Young |
25:0161bf1adc81 | 18 | { |
Charles David Young |
25:0161bf1adc81 | 19 | uint8_t i; |
Charles David Young |
25:0161bf1adc81 | 20 | uint16_t data_to_send[6] = {SHUTDOWN, TURN_ON, DEC_MODE, brightness, SCAN_LIM, TEST}; |
Charles David Young |
25:0161bf1adc81 | 21 | |
Charles David Young |
25:0161bf1adc81 | 22 | for(i = 0; i < sizeof(data_to_send)/sizeof(uint16_t); i++) |
Charles David Young |
25:0161bf1adc81 | 23 | { |
Charles David Young |
25:0161bf1adc81 | 24 | sendDataToDisplay(data_to_send[i]); |
Charles David Young |
25:0161bf1adc81 | 25 | } |
Charles David Young |
25:0161bf1adc81 | 26 | |
Charles David Young |
25:0161bf1adc81 | 27 | return; |
Charles David Young |
25:0161bf1adc81 | 28 | } |
Charles David Young |
25:0161bf1adc81 | 29 | |
charlesdavidyoung | 26:166dbe6022e8 | 30 | void LED7segDisplay::Display_brightness_up() |
Charles David Young |
25:0161bf1adc81 | 31 | { |
Charles David Young |
25:0161bf1adc81 | 32 | if (brightness < BRIGHTNESS_MAX) |
Charles David Young |
25:0161bf1adc81 | 33 | { |
Charles David Young |
25:0161bf1adc81 | 34 | Display_brightness(++brightness); |
Charles David Young |
25:0161bf1adc81 | 35 | } |
Charles David Young |
25:0161bf1adc81 | 36 | } |
Charles David Young |
25:0161bf1adc81 | 37 | |
charlesdavidyoung | 26:166dbe6022e8 | 38 | void LED7segDisplay::Display_brightness_down() |
Charles David Young |
25:0161bf1adc81 | 39 | { |
Charles David Young |
25:0161bf1adc81 | 40 | if (brightness > BRIGHTNESS_MIN) |
Charles David Young |
25:0161bf1adc81 | 41 | { |
Charles David Young |
25:0161bf1adc81 | 42 | Display_brightness(--brightness); |
Charles David Young |
25:0161bf1adc81 | 43 | } |
Charles David Young |
25:0161bf1adc81 | 44 | } |
Charles David Young |
25:0161bf1adc81 | 45 | |
charlesdavidyoung | 26:166dbe6022e8 | 46 | void LED7segDisplay::Display_brightness(uint16_t brightness) |
Charles David Young |
25:0161bf1adc81 | 47 | { |
Charles David Young |
25:0161bf1adc81 | 48 | sendDataToDisplay(brightness); |
Charles David Young |
25:0161bf1adc81 | 49 | } |
Charles David Young |
25:0161bf1adc81 | 50 | |
Charles David Young |
25:0161bf1adc81 | 51 | //--------------------------------------------------------------------------- |
Charles David Young |
25:0161bf1adc81 | 52 | // Refresh the 6 digits of the main display |
Charles David Young |
25:0161bf1adc81 | 53 | |
Charles David Young |
41:08bf3ea5eba4 | 54 | |
Charles David Young |
41:08bf3ea5eba4 | 55 | //--------------------------------------------------------------------------- |
Charles David Young |
41:08bf3ea5eba4 | 56 | // Refresh the 2 digits of the gate display |
Charles David Young |
41:08bf3ea5eba4 | 57 | |
Charles David Young |
41:08bf3ea5eba4 | 58 | void LED7segDisplay::Display_2D_Blank() |
Charles David Young |
41:08bf3ea5eba4 | 59 | { |
Charles David Young |
41:08bf3ea5eba4 | 60 | uint16_t data_to_send; |
Charles David Young |
41:08bf3ea5eba4 | 61 | |
Charles David Young |
41:08bf3ea5eba4 | 62 | for(uint8_t digit = 7; digit < 9; digit++) |
Charles David Young |
41:08bf3ea5eba4 | 63 | { |
Charles David Young |
41:08bf3ea5eba4 | 64 | // each stream consists of digit address and data to show |
Charles David Young |
41:08bf3ea5eba4 | 65 | data_to_send = digit; |
Charles David Young |
41:08bf3ea5eba4 | 66 | data_to_send<<=8; |
Charles David Young |
41:08bf3ea5eba4 | 67 | data_to_send = data_to_send | 0x7F; |
Charles David Young |
41:08bf3ea5eba4 | 68 | sendDataToDisplay(data_to_send); |
Charles David Young |
41:08bf3ea5eba4 | 69 | } |
Charles David Young |
41:08bf3ea5eba4 | 70 | } |
Charles David Young |
41:08bf3ea5eba4 | 71 | |
Charles David Young |
44:a26ca542ae5e | 72 | void LED7segDisplay::Display_6D_write(int32_t value) |
Charles David Young |
25:0161bf1adc81 | 73 | { |
Charles David Young |
25:0161bf1adc81 | 74 | |
Charles David Young |
25:0161bf1adc81 | 75 | uint8_t digit; |
Charles David Young |
25:0161bf1adc81 | 76 | uint16_t data_to_send; |
Charles David Young |
25:0161bf1adc81 | 77 | char TextString[6]; |
Charles David Young |
25:0161bf1adc81 | 78 | |
Charles David Young |
25:0161bf1adc81 | 79 | // int to string, then string to digits |
Charles David Young |
25:0161bf1adc81 | 80 | sprintf(TextString, "%6d", value); // int to string |
Charles David Young |
25:0161bf1adc81 | 81 | |
Charles David Young |
25:0161bf1adc81 | 82 | for(uint8_t i=0; i<6; i++) |
Charles David Young |
25:0161bf1adc81 | 83 | { |
Charles David Young |
25:0161bf1adc81 | 84 | if(TextString[i] == ' ') // blank empty digits |
Charles David Young |
27:81c417f7cf1a | 85 | Disp_Digit[i] = 0x7F; |
Charles David Young |
25:0161bf1adc81 | 86 | else |
Charles David Young |
25:0161bf1adc81 | 87 | Disp_Digit[i] = TextString[i]-'0'; |
Charles David Young |
25:0161bf1adc81 | 88 | } |
Charles David Young |
25:0161bf1adc81 | 89 | |
Charles David Young |
25:0161bf1adc81 | 90 | for(digit = 1; digit <7; digit++) |
Charles David Young |
25:0161bf1adc81 | 91 | { |
Charles David Young |
25:0161bf1adc81 | 92 | // each stream consists of digit address and data to show |
Charles David Young |
25:0161bf1adc81 | 93 | data_to_send = 7 - digit; |
Charles David Young |
25:0161bf1adc81 | 94 | data_to_send<<=8; |
Charles David Young |
25:0161bf1adc81 | 95 | data_to_send = data_to_send | Disp_Digit[digit-1]; |
Charles David Young |
25:0161bf1adc81 | 96 | sendDataToDisplay(data_to_send); |
Charles David Young |
25:0161bf1adc81 | 97 | } |
Charles David Young |
25:0161bf1adc81 | 98 | |
Charles David Young |
25:0161bf1adc81 | 99 | return; |
Charles David Young |
25:0161bf1adc81 | 100 | } |
Charles David Young |
25:0161bf1adc81 | 101 | |
Charles David Young |
44:a26ca542ae5e | 102 | void LED7segDisplay::Display_2D_write(int16_t value) |
Charles David Young |
25:0161bf1adc81 | 103 | { |
Charles David Young |
44:a26ca542ae5e | 104 | bool negative = false; |
Charles David Young |
44:a26ca542ae5e | 105 | if (value < 0) |
Charles David Young |
44:a26ca542ae5e | 106 | negative = true; |
Charles David Young |
44:a26ca542ae5e | 107 | value = abs(value); |
Charles David Young |
44:a26ca542ae5e | 108 | |
Charles David Young |
25:0161bf1adc81 | 109 | uint8_t digit; |
Charles David Young |
25:0161bf1adc81 | 110 | uint16_t data_to_send; |
Charles David Young |
25:0161bf1adc81 | 111 | char TextString[2]; |
Charles David Young |
25:0161bf1adc81 | 112 | |
Charles David Young |
25:0161bf1adc81 | 113 | // int to string, then string to digits |
Charles David Young |
25:0161bf1adc81 | 114 | sprintf(TextString, "%2d", value); // int to string |
Charles David Young |
25:0161bf1adc81 | 115 | |
Charles David Young |
25:0161bf1adc81 | 116 | if(TextString[0] == ' ') // blank empty digits |
Charles David Young |
27:81c417f7cf1a | 117 | Disp_Digit[7] = 0x7F; |
Charles David Young |
25:0161bf1adc81 | 118 | else |
Charles David Young |
25:0161bf1adc81 | 119 | Disp_Digit[7] = TextString[0] - '0'; |
Charles David Young |
25:0161bf1adc81 | 120 | |
Charles David Young |
25:0161bf1adc81 | 121 | Disp_Digit[6] = TextString[1] - '0'; |
Charles David Young |
44:a26ca542ae5e | 122 | // turn on decimal point to indicate negative |
Charles David Young |
44:a26ca542ae5e | 123 | if (negative) |
Charles David Young |
44:a26ca542ae5e | 124 | Disp_Digit[6] |= 0x80; |
Charles David Young |
25:0161bf1adc81 | 125 | |
Charles David Young |
25:0161bf1adc81 | 126 | for(digit = 7; digit <9; digit++) |
Charles David Young |
25:0161bf1adc81 | 127 | { |
Charles David Young |
25:0161bf1adc81 | 128 | // each stream consists of digit address and data to show |
Charles David Young |
25:0161bf1adc81 | 129 | data_to_send = digit; |
Charles David Young |
25:0161bf1adc81 | 130 | data_to_send<<=8; |
Charles David Young |
25:0161bf1adc81 | 131 | data_to_send = data_to_send | Disp_Digit[digit-1]; |
Charles David Young |
25:0161bf1adc81 | 132 | sendDataToDisplay(data_to_send); |
Charles David Young |
25:0161bf1adc81 | 133 | } |
Charles David Young |
25:0161bf1adc81 | 134 | |
Charles David Young |
25:0161bf1adc81 | 135 | return; |
Charles David Young |
25:0161bf1adc81 | 136 | } |
Charles David Young |
25:0161bf1adc81 | 137 | |
Charles David Young |
25:0161bf1adc81 | 138 | void LED7segDisplay::sendDataToDisplay(uint16_t data_to_send) |
Charles David Young |
25:0161bf1adc81 | 139 | { |
Charles David Young |
25:0161bf1adc81 | 140 | CS1 = 0; |
Charles David Young |
25:0161bf1adc81 | 141 | for(uint16_t mask = 0x8000; mask!= 0; mask>>= 1) |
Charles David Young |
25:0161bf1adc81 | 142 | { |
Charles David Young |
25:0161bf1adc81 | 143 | wait_us(DT); |
Charles David Young |
25:0161bf1adc81 | 144 | SCK = 0; |
Charles David Young |
25:0161bf1adc81 | 145 | if(mask & data_to_send) |
Charles David Young |
25:0161bf1adc81 | 146 | MOSI = 1; |
Charles David Young |
25:0161bf1adc81 | 147 | else |
Charles David Young |
25:0161bf1adc81 | 148 | MOSI = 0; |
Charles David Young |
25:0161bf1adc81 | 149 | |
Charles David Young |
25:0161bf1adc81 | 150 | wait_us(DT); |
Charles David Young |
25:0161bf1adc81 | 151 | SCK = 1; |
Charles David Young |
25:0161bf1adc81 | 152 | } |
Charles David Young |
25:0161bf1adc81 | 153 | |
Charles David Young |
25:0161bf1adc81 | 154 | wait_us(DT); |
Charles David Young |
25:0161bf1adc81 | 155 | SCK = 0; |
Charles David Young |
25:0161bf1adc81 | 156 | wait_us(DT); |
Charles David Young |
25:0161bf1adc81 | 157 | CS1 = 1; |
Charles David Young |
25:0161bf1adc81 | 158 | } |