Jim Cordwell
/
Segments_02_Brightness
An example of how seven segment display brightness might be achieved
main.cpp@2:c1dc418053f9, 2014-05-24 (annotated)
- Committer:
- JimCordwell
- Date:
- Sat May 24 19:02:07 2014 +0000
- Revision:
- 2:c1dc418053f9
- Parent:
- 1:d6cbfa3636c7
- Child:
- 3:7d3a24c1ecd9
Optimised the segment setting function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JimCordwell | 0:bbe54468c896 | 1 | /************************************************************************** |
JimCordwell | 0:bbe54468c896 | 2 | * * |
JimCordwell | 0:bbe54468c896 | 3 | * This example builds on 01_Simple_Segments by introducing an example * |
JimCordwell | 0:bbe54468c896 | 4 | * of how brightness might be achieved. * |
JimCordwell | 0:bbe54468c896 | 5 | * * |
JimCordwell | 0:bbe54468c896 | 6 | * In this case the right hand LED is displayed dimmer than the left. * |
JimCordwell | 1:d6cbfa3636c7 | 7 | * With more logic it would be possible to adjust the brightness of * |
JimCordwell | 0:bbe54468c896 | 8 | * individual segments within the display. * |
JimCordwell | 0:bbe54468c896 | 9 | * * |
JimCordwell | 0:bbe54468c896 | 10 | **************************************************************************/ |
JimCordwell | 0:bbe54468c896 | 11 | |
JimCordwell | 0:bbe54468c896 | 12 | #include "mbed.h" |
JimCordwell | 0:bbe54468c896 | 13 | |
JimCordwell | 0:bbe54468c896 | 14 | uint8_t left = 0; |
JimCordwell | 0:bbe54468c896 | 15 | uint8_t right = 1; |
JimCordwell | 0:bbe54468c896 | 16 | |
JimCordwell | 0:bbe54468c896 | 17 | uint8_t brightness = 100; |
JimCordwell | 0:bbe54468c896 | 18 | |
JimCordwell | 0:bbe54468c896 | 19 | //The 8 segment outputs and com to switch between the LEDs |
JimCordwell | 0:bbe54468c896 | 20 | DigitalOut seg_a(P1_23), seg_b(P1_28), seg_c(P0_16), seg_d(P1_31), seg_e(P1_13), seg_f(P1_16), seg_g(P1_19), seg_p(P0_23), com(P1_25); |
JimCordwell | 0:bbe54468c896 | 21 | |
JimCordwell | 0:bbe54468c896 | 22 | /****************************************************** |
JimCordwell | 0:bbe54468c896 | 23 | * Set each of the segments for a desired LED * |
JimCordwell | 0:bbe54468c896 | 24 | ******************************************************/ |
JimCordwell | 0:bbe54468c896 | 25 | void SetSegments(uint8_t led, uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t e, uint8_t f, uint8_t g, uint8_t p) |
JimCordwell | 2:c1dc418053f9 | 26 | { |
JimCordwell | 0:bbe54468c896 | 27 | //Set desired LED to update |
JimCordwell | 0:bbe54468c896 | 28 | com = led; |
JimCordwell | 0:bbe54468c896 | 29 | |
JimCordwell | 0:bbe54468c896 | 30 | //Switch on the desired segments a number of times based on the brightness required |
JimCordwell | 0:bbe54468c896 | 31 | for(uint8_t i = 0; i < brightness; i++) |
JimCordwell | 0:bbe54468c896 | 32 | { |
JimCordwell | 0:bbe54468c896 | 33 | seg_a = 1 - a; //setting a segment to 1 means off |
JimCordwell | 0:bbe54468c896 | 34 | seg_b = 1 - b; //so invert all requested segment values |
JimCordwell | 0:bbe54468c896 | 35 | seg_c = 1 - c; |
JimCordwell | 0:bbe54468c896 | 36 | seg_d = 1 - d; |
JimCordwell | 0:bbe54468c896 | 37 | seg_e = 1 - e; |
JimCordwell | 0:bbe54468c896 | 38 | seg_f = 1 - f; |
JimCordwell | 0:bbe54468c896 | 39 | seg_g = 1 - g; |
JimCordwell | 0:bbe54468c896 | 40 | seg_p = 1 - p; |
JimCordwell | 0:bbe54468c896 | 41 | } |
JimCordwell | 0:bbe54468c896 | 42 | |
JimCordwell | 0:bbe54468c896 | 43 | //Switch off all the segments a remaining number of times to reach 100 updates |
JimCordwell | 0:bbe54468c896 | 44 | for(uint8_t i = 0; i < 100 - brightness; i++) |
JimCordwell | 0:bbe54468c896 | 45 | { |
JimCordwell | 0:bbe54468c896 | 46 | seg_a = seg_b = seg_c = seg_d = seg_e = seg_f = seg_g = seg_p = 1; |
JimCordwell | 0:bbe54468c896 | 47 | } |
JimCordwell | 0:bbe54468c896 | 48 | |
JimCordwell | 0:bbe54468c896 | 49 | //Finally switch off all segments again, we must do this otherwise when |
JimCordwell | 0:bbe54468c896 | 50 | //switching com the segments could be momentarily duplicated from this led. |
JimCordwell | 0:bbe54468c896 | 51 | seg_a = seg_b = seg_c = seg_d = seg_e = seg_f = seg_g = seg_p = 1; |
JimCordwell | 0:bbe54468c896 | 52 | |
JimCordwell | 0:bbe54468c896 | 53 | } |
JimCordwell | 0:bbe54468c896 | 54 | |
JimCordwell | 0:bbe54468c896 | 55 | /****************************************************** |
JimCordwell | 0:bbe54468c896 | 56 | * Main loop repeatedly updates each of the LEDs * |
JimCordwell | 0:bbe54468c896 | 57 | ******************************************************/ |
JimCordwell | 0:bbe54468c896 | 58 | int main() |
JimCordwell | 0:bbe54468c896 | 59 | { |
JimCordwell | 0:bbe54468c896 | 60 | for(;;) |
JimCordwell | 0:bbe54468c896 | 61 | { |
JimCordwell | 0:bbe54468c896 | 62 | //Set the display to read '42' |
JimCordwell | 0:bbe54468c896 | 63 | |
JimCordwell | 0:bbe54468c896 | 64 | //The 4 will be displayed at full brightness |
JimCordwell | 0:bbe54468c896 | 65 | brightness = 100; |
JimCordwell | 0:bbe54468c896 | 66 | SetSegments(left, 0,1,1,0,0,1,1,0); //4 |
JimCordwell | 0:bbe54468c896 | 67 | |
JimCordwell | 0:bbe54468c896 | 68 | //The 2 will be displayed much more faintly |
JimCordwell | 0:bbe54468c896 | 69 | brightness = 5; |
JimCordwell | 0:bbe54468c896 | 70 | SetSegments(right, 1,1,0,1,1,0,1,0); //2 |
JimCordwell | 0:bbe54468c896 | 71 | } |
JimCordwell | 0:bbe54468c896 | 72 | } |
JimCordwell | 0:bbe54468c896 | 73 |