Simple library for controll a matrix of 7 segment displays. It also support the Hexadecimal and the Decimal visualisation.
Multi7Seg.cpp@0:9db0be7962dd, 2011-04-23 (annotated)
- Committer:
- trombettamichele
- Date:
- Sat Apr 23 10:17:01 2011 +0000
- Revision:
- 0:9db0be7962dd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trombettamichele | 0:9db0be7962dd | 1 | #include "mbed.h" |
trombettamichele | 0:9db0be7962dd | 2 | #include "Multi7Seg.h" |
trombettamichele | 0:9db0be7962dd | 3 | // Simple library that can controll a matrix of 7 segment led displays |
trombettamichele | 0:9db0be7962dd | 4 | // Created by Michele Trombetta |
trombettamichele | 0:9db0be7962dd | 5 | // Copyright 2010 5OFT. All rights reserved. |
trombettamichele | 0:9db0be7962dd | 6 | |
trombettamichele | 0:9db0be7962dd | 7 | Multi7Seg::Multi7Seg(PinName a, PinName b, PinName c, PinName d, PinName e, PinName f, PinName g, PinName disp1, PinName disp2, bool led_type): _disps(disp1, disp2), _led_7seg(a, b, c, d, e, f, g) { |
trombettamichele | 0:9db0be7962dd | 8 | _ndisp = 2; |
trombettamichele | 0:9db0be7962dd | 9 | _speed = 0.001; |
trombettamichele | 0:9db0be7962dd | 10 | _led_type = led_type; |
trombettamichele | 0:9db0be7962dd | 11 | _enabled = 0xFF; |
trombettamichele | 0:9db0be7962dd | 12 | } |
trombettamichele | 0:9db0be7962dd | 13 | |
trombettamichele | 0:9db0be7962dd | 14 | Multi7Seg::Multi7Seg(PinName a, PinName b, PinName c, PinName d, PinName e, PinName f, PinName g, PinName disp1, PinName disp2, PinName disp3, bool led_type): _disps(disp1, disp2, disp3), _led_7seg(a, b, c, d, e, f, g) { |
trombettamichele | 0:9db0be7962dd | 15 | _ndisp = 3; |
trombettamichele | 0:9db0be7962dd | 16 | _speed = 0.001; |
trombettamichele | 0:9db0be7962dd | 17 | _led_type = led_type; |
trombettamichele | 0:9db0be7962dd | 18 | _enabled = 0xFF; |
trombettamichele | 0:9db0be7962dd | 19 | } |
trombettamichele | 0:9db0be7962dd | 20 | |
trombettamichele | 0:9db0be7962dd | 21 | Multi7Seg::Multi7Seg(PinName a, PinName b, PinName c, PinName d, PinName e, PinName f, PinName g, PinName disp1, PinName disp2, PinName disp3, PinName disp4, bool led_type): _disps(disp1, disp2, disp3, disp4), _led_7seg(a, b, c, d, e, f, g) { |
trombettamichele | 0:9db0be7962dd | 22 | _ndisp = 4; |
trombettamichele | 0:9db0be7962dd | 23 | _speed = 0.001; |
trombettamichele | 0:9db0be7962dd | 24 | _led_type = led_type; |
trombettamichele | 0:9db0be7962dd | 25 | _enabled = 0xFF; |
trombettamichele | 0:9db0be7962dd | 26 | } |
trombettamichele | 0:9db0be7962dd | 27 | |
trombettamichele | 0:9db0be7962dd | 28 | Multi7Seg::Multi7Seg(PinName a, PinName b, PinName c, PinName d, PinName e, PinName f, PinName g, PinName disp1, PinName disp2, PinName disp3, PinName disp4, PinName disp5, bool led_type): _disps(disp1, disp2, disp3, disp4, disp5), _led_7seg(a, b, c, d, e, f, g) { |
trombettamichele | 0:9db0be7962dd | 29 | _ndisp = 5; |
trombettamichele | 0:9db0be7962dd | 30 | _speed = 0.001; |
trombettamichele | 0:9db0be7962dd | 31 | _led_type = led_type; |
trombettamichele | 0:9db0be7962dd | 32 | _enabled = 0xFF; |
trombettamichele | 0:9db0be7962dd | 33 | } |
trombettamichele | 0:9db0be7962dd | 34 | |
trombettamichele | 0:9db0be7962dd | 35 | void Multi7Seg::write(unsigned int number) { |
trombettamichele | 0:9db0be7962dd | 36 | if (_format) { //Dec |
trombettamichele | 0:9db0be7962dd | 37 | _num1 = number / 10000; |
trombettamichele | 0:9db0be7962dd | 38 | _num2 = (number % 10000)/1000; |
trombettamichele | 0:9db0be7962dd | 39 | _num3 = (number % 1000)/100; |
trombettamichele | 0:9db0be7962dd | 40 | _num4 = (number % 100)/10; |
trombettamichele | 0:9db0be7962dd | 41 | _num5 = number % 10; |
trombettamichele | 0:9db0be7962dd | 42 | } else { //Hex |
trombettamichele | 0:9db0be7962dd | 43 | _num2 = (number % 65536)/4096; |
trombettamichele | 0:9db0be7962dd | 44 | _num3 = (number % 4096)/256; |
trombettamichele | 0:9db0be7962dd | 45 | _num4 = (number % 256)/16; |
trombettamichele | 0:9db0be7962dd | 46 | _num5 = number % 16; |
trombettamichele | 0:9db0be7962dd | 47 | } |
trombettamichele | 0:9db0be7962dd | 48 | |
trombettamichele | 0:9db0be7962dd | 49 | switch (_ndisp) { |
trombettamichele | 0:9db0be7962dd | 50 | case 5: |
trombettamichele | 0:9db0be7962dd | 51 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 52 | if (_enabled & 0x10) { |
trombettamichele | 0:9db0be7962dd | 53 | led_write((unsigned char)_num1); |
trombettamichele | 0:9db0be7962dd | 54 | _disps = _led_type ? 254 : 16; |
trombettamichele | 0:9db0be7962dd | 55 | } |
trombettamichele | 0:9db0be7962dd | 56 | wait(_speed); |
trombettamichele | 0:9db0be7962dd | 57 | case 4: |
trombettamichele | 0:9db0be7962dd | 58 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 59 | if (_enabled & 0x08) { |
trombettamichele | 0:9db0be7962dd | 60 | led_write((unsigned char)_num2); |
trombettamichele | 0:9db0be7962dd | 61 | _disps = _led_type ? 253 : 8; |
trombettamichele | 0:9db0be7962dd | 62 | } |
trombettamichele | 0:9db0be7962dd | 63 | wait(_speed); |
trombettamichele | 0:9db0be7962dd | 64 | case 3: |
trombettamichele | 0:9db0be7962dd | 65 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 66 | if (_enabled & 0x04) { |
trombettamichele | 0:9db0be7962dd | 67 | led_write((unsigned char)_num3); |
trombettamichele | 0:9db0be7962dd | 68 | _disps = _led_type ? 251 : 4; |
trombettamichele | 0:9db0be7962dd | 69 | } |
trombettamichele | 0:9db0be7962dd | 70 | wait(_speed); |
trombettamichele | 0:9db0be7962dd | 71 | case 2: |
trombettamichele | 0:9db0be7962dd | 72 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 73 | if (_enabled & 0x02) { |
trombettamichele | 0:9db0be7962dd | 74 | led_write((unsigned char)_num4); |
trombettamichele | 0:9db0be7962dd | 75 | _disps = _led_type ? 247 : 2; |
trombettamichele | 0:9db0be7962dd | 76 | } |
trombettamichele | 0:9db0be7962dd | 77 | wait(_speed); |
trombettamichele | 0:9db0be7962dd | 78 | |
trombettamichele | 0:9db0be7962dd | 79 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 80 | if (_enabled & 0x01) { |
trombettamichele | 0:9db0be7962dd | 81 | led_write((unsigned char)_num5); |
trombettamichele | 0:9db0be7962dd | 82 | _disps = _led_type ? 239 : 1; |
trombettamichele | 0:9db0be7962dd | 83 | } |
trombettamichele | 0:9db0be7962dd | 84 | wait(_speed); |
trombettamichele | 0:9db0be7962dd | 85 | } |
trombettamichele | 0:9db0be7962dd | 86 | _disps = _led_type ? 255 : 0; |
trombettamichele | 0:9db0be7962dd | 87 | } |
trombettamichele | 0:9db0be7962dd | 88 | |
trombettamichele | 0:9db0be7962dd | 89 | void Multi7Seg::setformat(bool format) { |
trombettamichele | 0:9db0be7962dd | 90 | _format = format; |
trombettamichele | 0:9db0be7962dd | 91 | } |
trombettamichele | 0:9db0be7962dd | 92 | |
trombettamichele | 0:9db0be7962dd | 93 | void Multi7Seg::setspeed(float speed) { |
trombettamichele | 0:9db0be7962dd | 94 | _speed = speed; |
trombettamichele | 0:9db0be7962dd | 95 | } |
trombettamichele | 0:9db0be7962dd | 96 | |
trombettamichele | 0:9db0be7962dd | 97 | void Multi7Seg::setenabled(unsigned char enabled) { |
trombettamichele | 0:9db0be7962dd | 98 | _enabled = enabled; |
trombettamichele | 0:9db0be7962dd | 99 | } |
trombettamichele | 0:9db0be7962dd | 100 | |
trombettamichele | 0:9db0be7962dd | 101 | void Multi7Seg::led_write(unsigned char number) { |
trombettamichele | 0:9db0be7962dd | 102 | if (number<24) { |
trombettamichele | 0:9db0be7962dd | 103 | if (_led_type) _led_7seg = num_7seg[number]; //Common Cathode |
trombettamichele | 0:9db0be7962dd | 104 | else _led_7seg = ~num_7seg[number]; //Common Anode |
trombettamichele | 0:9db0be7962dd | 105 | } |
trombettamichele | 0:9db0be7962dd | 106 | } |