6 x 7 segment display library for PCA9637 driven breakout board
Dependents: FTSE100 InternetDispBoB digitalThermometer Counter ... more
dispBoB.cpp
- Committer:
- d_worrall
- Date:
- 2011-06-29
- Revision:
- 3:e767f379b823
- Parent:
- 0:843654413849
- Child:
- 6:1721cdf1024e
File content as of revision 3:e767f379b823:
//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); } }