Dynamic Lighting Lib. of 7Seg-LED (add DP) x4. Features: - Unified Anode/Cathode and NPN/PNP sw. - Non-use wait(); Useing Interrupt Timer. - Modulates Brightness with PWM. - Display Hex. - Using BusOut(s) of Digits(4) and Segments(8). - Sinmple Interface of Class.
Diff: LED7segX4.h
- Revision:
- 0:51d1da4a6b6a
- Child:
- 1:e89aae394d29
diff -r 000000000000 -r 51d1da4a6b6a LED7segX4.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LED7segX4.h Wed Apr 11 09:18:20 2018 +0000 @@ -0,0 +1,168 @@ +/** + * Dynamic Lighting Lib. of 7Seg-LED (add DP) x4. + * + * Features: + * - Unified Anode/Cathode common 7Segs, and NPN/PNP switchings. + * - Using BusOut(s) of Digits(0-3) and Segments(A-G,DP). + * - Sinmple Interface of Class. + * - Non-use wait(); Useing Interrupt Timer: Ticker and Timeut. + * - Modulates Brightness; You Can Control of Periodic-Time and Duty. + * - Display Hex(0-9,A-F) of 4 Digit; Using char[4]. + */ + +/** @code +#include "mbed.h" + +#include "LED7segX4.h" + +// port make. +BusOut pDgit(p21, p22, p23, p24); // D1, D2, D3, D4 +BusOut pSeg(p11, p12, p13, p14, p15, p16, p17, p18); // A, B, C, D, E, F, G, DP + +// Make instance of 7Seg-class. +LED7segX4 led7seg(pDgit, pSeg); + +// for Operation check. +DigitalOut myled(LED1); + +int main() { + + char val[4]; + char dp; + int duty; + + // In this case: Anode Common, PNP swiching for Dig-common, + // and sink port(BusOut) for seg. + led7seg.init(true, true, 1000, 40); + + val[0]= 0; + val[1]= 0; + val[2]= 0; + val[3]= 0; + + led7seg.set7seg(val); + led7seg.setDP(0b0001); + + while(true) { + myled = !myled; + wait_ms(30); + + if(++duty > 100) + duty= 30; + + val[3] += 1; + for(int i= 0; i < 3; i++){ + if(val[3-i] > 15){ + if(i < 3){ + val[3-i]= 0; + val[2-i] += 1; + } + dp += 1; + } + } + if(val[0]==15 && val[1]==15 && val[2]==15 && val[3]==15){ + // = FFFF + val[0]= 0; + val[1]= 0; + val[2]= 0; + val[3]= 0; + } + if(dp > 0b1111) + dp= 0; + + led7seg.set7seg(val); + led7seg.setDP(dp); + led7seg.setPWM(1000, duty); + + } + + return 0; +} + * @endcode + */ + +#pragma once + +#include "mbed.h" + +class LED7segX4{ +public: + + /** Constructor + * @param BusOut; _portDig: Bus4 of Digit(3~0) + * @param BusOut; _portSeg: Bus8 of Segment(a~g+dp) + */ + LED7segX4(BusOut &portDig, BusOut &portSeg); + + ~LED7segX4(); + + + /** Initialize + * @param bool; dig: Reverce(H/L) Digit(3~0) + * @param bool; seg: Reverce(H/L) Segment(a~g+dp) + * @param int; timePeriod[us]: time of priend in PWM. + * @param int; duty[%]: duty of PWM. + */ + void init(bool revDig= false, bool revSeg= false, int timePeriod= 1000, int duty= 80); + + + /** set seg TYPE; + * @param bool; dig: Digit(3~0) + * @param bool; seg: Segment(a~g+dp) + */ + void setReverse(bool dig, bool seg); + + /** Set 7seg. + * @param chr[4]; D3~D1, 0x00(0)~0x15(F) and 0x16(OFF/NULL). + */ + void set7seg(char chr[]); + + /** Set DotPoint. + * @param chr; 0b0000~0b1111, bit0~3; TRUE=1. + */ + void setDP(char chr); + + /** Set PWM (Britness). + * @param int; periodic time [us]. "for Each Digit." + * @param int; duty ratio;1~100[%] in timePeriod. + * ex) In case of 1,000us and 60%, + */ + void setPWM(int timePeriod, int duty); + + + +private: + + // ********************** Variable ****************************** + + // pin/port set + BusOut &_portDig; + BusOut &_portSeg; + + // TimerIRQ 4 PWM + Ticker ticker; // Duty : Bright + Timeout timeout; // Duty : OFF + float _dutySec; // Duty(Bright) Time-width [s], in 1 period. + + // Define + char _def7seg[17]; // Define Segment; 0~f + 16:OFF(Null) + + + // Local Hold Val + char _seg7[5]; // 4+Null ex) 2.3E5 -> 2, 3, 14, 5 + char _dp; // 0b0000~0b1111; ex) 12.3E. -> 0b0101 + bool _revDig; // REVERSE H/L 4 Transistor swDigit + bool _revSeg; // AND swSeg + int _currentDigit; // current digit-Num (0~3). This shifts in timeperiod of PWM. + + + // ********************** Internal Function ********************* + void init_def7seg(); // Set/Define of seg pattern. + + // For DUTY of PWM. ON(Shift) and OFF. + void OnSet(); + void OffSet(); + +}; + +// EOF \ No newline at end of file