6 x 7 segment display library for PCA9637 driven breakout board
Dependents: FTSE100 InternetDispBoB digitalThermometer Counter ... more
Diff: dispBoB.cpp
- Revision:
- 0:843654413849
- Child:
- 6:1721cdf1024e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dispBoB.cpp Wed Jun 29 11:23:47 2011 +0000 @@ -0,0 +1,100 @@ +//NXP PCA9635 library +//mbed Team - 28th June 2011 +//Daniel Worrall + +#include "mbed.h" +#include "PCA9635.h" +#include "dispBoB.h" + +Serial pc(USBTX, USBRX); + + static const char _loc[] = {0x02, 0x02, 0x04, 0x04, 0x10, 0x10, 0x12, 0x12}; + static const short _disp[] = { + 0xE00E, 0x2008, 0xC00D, 0x600D, 0x200B, 0x6007, 0xE007, 0x200E, 0xE00F, 0x600F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xF001, 0xE003, 0xC001, 0xE009, 0xC007, 0x8007, 0x600F, 0xA003, 0x8000, 0x6008, 0xA007, 0x3008, 0xA005, 0xA001, 0xE001, + 0x800F, 0x300F, 0x8001, 0x6007, 0xC003, 0xE000, 0xE000, 0xE004, 0xA00B, 0x600B, 0xC00D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + + 0x0EE0, 0x0280, 0x0CD0, 0x06D0, 0x02B0, 0x0670, 0x0E70, 0x02E0, 0x0EF0, 0x06F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0F10, 0x0E30, 0x0C10, 0x0E90, 0x0C70, 0x0870, 0x06F0, 0x0A30, 0x0800, 0x0680, 0x0A70, 0x0380, 0x0A50, 0x0A10, 0x0E10, + 0x08F0, 0x03F0, 0x0810, 0x0670, 0x0C30, 0x0E00, 0x0E00, 0x0E40, 0x0AB0, 0x06B0, 0x0CD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + }; + short _element[8]; + short _pair[4]; + string nullArray = " "; + +dispBoB::dispBoB(PinName sda, PinName scl, PinName en): _pca(sda, scl), _en(en) { + _en = 0; + _pca.init(_loc[5]); +} + +void dispBoB::cls(void){ + for(int j = 0; j < 8; j++){ + locate(j); + _pca.bus(0x0000); + } + _cursor = 0x10; +} + +void dispBoB::locate(char pos){ + _pca.setAddress(_loc[pos]); + _cursor = pos; +} + +void dispBoB::putc(char c){ + + if(_cursor & 1){ + _element[_cursor] = _disp[c+16]; + } else { + _element[_cursor] = _disp[c-48]; + } + + int i = _cursor/2; + _pair[i] = _element[(2*i)] + _element[(2*i)+1]; + _pca.bus(_pair[i]); +} + +void dispBoB::putc(char c, char pos){ + + locate(pos); + + if(c == 32) c += 32; + if(_cursor & 1){ + _element[_cursor] = _disp[c+16]; + } else { + _element[_cursor] = _disp[c-48]; + } + + int i = _cursor/2; + _pair[i] = _element[(2*i)] + _element[(2*i)+1]; + _pca.bus(_pair[i]); +} + +void dispBoB::write(string str){ + for(int j = 5; j >= 0; j--){ + putc(toupper(str[j]), j); + } +} + +void dispBoB::scroll(string str, float speed){ + char buffer[6]; + + str.insert(0, nullArray); + str.insert(str.length(), nullArray); + + for(int k = 0; k < str.length(); k++){ + str.copy(buffer, 6, k); + write(buffer); + wait(speed); + } +} + + + + + + + + +