Simple library for controll a matrix of 7 segment displays. It also support the Hexadecimal and the Decimal visualisation.

Dependents:   Demo_Led7seg

Committer:
trombettamichele
Date:
Sat Apr 23 10:30:51 2011 +0000
Revision:
1:4ee2f3c3cf46
Parent:
0:9db0be7962dd

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }