Simple library for controll a matrix of 7 segment displays. It also support the Hexadecimal and the Decimal visualisation.
Multi7Seg.cpp
- Committer:
- trombettamichele
- Date:
- 2011-04-23
- Revision:
- 1:4ee2f3c3cf46
- Parent:
- 0:9db0be7962dd
File content as of revision 1:4ee2f3c3cf46:
#include "mbed.h" #include "Multi7Seg.h" // Simple library that can controll a matrix of 7 segment led displays // Created by Michele Trombetta // Copyright 2010 5OFT. All rights reserved. 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) { _ndisp = 2; _speed = 0.001; _led_type = led_type; _enabled = 0xFF; } 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) { _ndisp = 3; _speed = 0.001; _led_type = led_type; _enabled = 0xFF; } 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) { _ndisp = 4; _speed = 0.001; _led_type = led_type; _enabled = 0xFF; } 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) { _ndisp = 5; _speed = 0.001; _led_type = led_type; _enabled = 0xFF; } void Multi7Seg::write(unsigned int number) { if (_format) { //Dec _num1 = number / 10000; _num2 = (number % 10000)/1000; _num3 = (number % 1000)/100; _num4 = (number % 100)/10; _num5 = number % 10; } else { //Hex _num2 = (number % 65536)/4096; _num3 = (number % 4096)/256; _num4 = (number % 256)/16; _num5 = number % 16; } switch (_ndisp) { case 5: _disps = _led_type ? 255 : 0; if (_enabled & 0x10) { led_write((unsigned char)_num1); _disps = _led_type ? 254 : 16; } wait(_speed); case 4: _disps = _led_type ? 255 : 0; if (_enabled & 0x08) { led_write((unsigned char)_num2); _disps = _led_type ? 253 : 8; } wait(_speed); case 3: _disps = _led_type ? 255 : 0; if (_enabled & 0x04) { led_write((unsigned char)_num3); _disps = _led_type ? 251 : 4; } wait(_speed); case 2: _disps = _led_type ? 255 : 0; if (_enabled & 0x02) { led_write((unsigned char)_num4); _disps = _led_type ? 247 : 2; } wait(_speed); _disps = _led_type ? 255 : 0; if (_enabled & 0x01) { led_write((unsigned char)_num5); _disps = _led_type ? 239 : 1; } wait(_speed); } _disps = _led_type ? 255 : 0; } void Multi7Seg::setformat(bool format) { _format = format; } void Multi7Seg::setspeed(float speed) { _speed = speed; } void Multi7Seg::setenabled(unsigned char enabled) { _enabled = enabled; } void Multi7Seg::led_write(unsigned char number) { if (number<24) { if (_led_type) _led_7seg = num_7seg[number]; //Common Cathode else _led_7seg = ~num_7seg[number]; //Common Anode } }