6 x 7 segment display library for PCA9637 driven breakout board
Dependents: FTSE100 InternetDispBoB digitalThermometer Counter ... more
dispBoB.cpp@15:a9abac3696b0, 2011-07-07 (annotated)
- Committer:
- d_worrall
- Date:
- Thu Jul 07 08:39:11 2011 +0000
- Revision:
- 15:a9abac3696b0
- Parent:
- 14:10570d97f4d3
version9
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
d_worrall | 0:843654413849 | 1 | //NXP PCA9635 library |
d_worrall | 0:843654413849 | 2 | //mbed Team - 28th June 2011 |
d_worrall | 0:843654413849 | 3 | //Daniel Worrall |
d_worrall | 0:843654413849 | 4 | |
d_worrall | 0:843654413849 | 5 | #include "mbed.h" |
d_worrall | 0:843654413849 | 6 | #include "PCA9635.h" |
d_worrall | 0:843654413849 | 7 | #include "dispBoB.h" |
d_worrall | 0:843654413849 | 8 | |
d_worrall | 12:2235c72db927 | 9 | |
d_worrall | 9:44de04d410df | 10 | static const char loc[] = {0x02, 0x02, 0x04, 0x04, 0x10, 0x10, 0x12, 0x12}; |
d_worrall | 9:44de04d410df | 11 | static const short dispL[] = { |
d_worrall | 6:1721cdf1024e | 12 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 6:1721cdf1024e | 13 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 12:2235c72db927 | 14 | 0x0000, 0x1008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0xC006, 0x600C, 0x0000, 0x0000, 0x0000, 0x0001, 0x1000, 0x0000, |
d_worrall | 0:843654413849 | 15 | 0xE00E, 0x2008, 0xC00D, 0x600D, 0x200B, 0x6007, 0xE007, 0x200E, 0xE00F, 0x600F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 6:1721cdf1024e | 16 | |
d_worrall | 12:2235c72db927 | 17 | 0x0000, 0xE00D, 0xE003, 0xC001, 0xE009, 0xC007, 0x8007, 0x600F, 0xA003, 0x8000, 0x6008, 0xA007, 0xC002, 0xA005, 0xA001, 0xE001, |
d_worrall | 12:2235c72db927 | 18 | 0x800F, 0x200F, 0x8001, 0x6007, 0xC003, 0xE000, 0xE000, 0xE004, 0xA00B, 0x600B, 0xC00D, 0xC006, 0x0000, 0x600C, 0x0000, 0x4000, |
d_worrall | 0:843654413849 | 19 | 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 6:1721cdf1024e | 20 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xC006, 0x0000, 0x600C, 0x0000, 0x0000 |
d_worrall | 6:1721cdf1024e | 21 | }; |
d_worrall | 9:44de04d410df | 22 | static const short dispR[] = { |
d_worrall | 6:1721cdf1024e | 23 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 6:1721cdf1024e | 24 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 12:2235c72db927 | 25 | 0x0000, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0C60, 0x06C0, 0x0000, 0x0000, 0x0000, 0x0010, 0x0100, 0x0000, |
d_worrall | 6:1721cdf1024e | 26 | 0x0EE0, 0x0280, 0x0CD0, 0x06D0, 0x02B0, 0x0670, 0x0E70, 0x02E0, 0x0EF0, 0x06F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 0:843654413849 | 27 | |
d_worrall | 12:2235c72db927 | 28 | 0x0000, 0x0ED0, 0x0E30, 0x0C10, 0x0E90, 0x0C70, 0x0870, 0x06F0, 0x0A30, 0x0800, 0x0680, 0x0A70, 0x0C20, 0x0A50, 0x0A10, 0x0E10, |
d_worrall | 12:2235c72db927 | 29 | 0x08F0, 0x02F0, 0x0810, 0x0670, 0x0C30, 0x0E00, 0x0E00, 0x0E40, 0x0AB0, 0x06B0, 0x0CD0, 0x0C60, 0x0000, 0x06C0, 0x0000, 0x0400, |
d_worrall | 0:843654413849 | 30 | 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
d_worrall | 6:1721cdf1024e | 31 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0000, 0x06C0, 0x0000, 0x0000 |
d_worrall | 0:843654413849 | 32 | }; |
d_worrall | 9:44de04d410df | 33 | short element[8]; |
d_worrall | 9:44de04d410df | 34 | short ppair[4]; |
d_worrall | 0:843654413849 | 35 | string nullArray = " "; |
d_worrall | 0:843654413849 | 36 | |
d_worrall | 0:843654413849 | 37 | dispBoB::dispBoB(PinName sda, PinName scl, PinName en): _pca(sda, scl), _en(en) { |
d_worrall | 12:2235c72db927 | 38 | init(); |
d_worrall | 12:2235c72db927 | 39 | } |
d_worrall | 12:2235c72db927 | 40 | void dispBoB::init(void){ //initiate - call this whenever the system needs to be reset |
d_worrall | 0:843654413849 | 41 | _en = 0; |
d_worrall | 9:44de04d410df | 42 | _pca.init(loc[0]); |
d_worrall | 15:a9abac3696b0 | 43 | _pca.init(loc[2]); |
d_worrall | 15:a9abac3696b0 | 44 | _pca.init(loc[4]); |
d_worrall | 15:a9abac3696b0 | 45 | _pca.init(loc[6]); |
d_worrall | 0:843654413849 | 46 | } |
d_worrall | 0:843654413849 | 47 | |
d_worrall | 12:2235c72db927 | 48 | void dispBoB::cls(void){ //clear screen and screen buffers |
d_worrall | 0:843654413849 | 49 | for(int j = 0; j < 8; j++){ |
d_worrall | 0:843654413849 | 50 | locate(j); |
d_worrall | 12:2235c72db927 | 51 | element[j] = 0x0000; |
d_worrall | 0:843654413849 | 52 | _pca.bus(0x0000); |
d_worrall | 0:843654413849 | 53 | } |
d_worrall | 9:44de04d410df | 54 | locate(0); |
d_worrall | 0:843654413849 | 55 | } |
d_worrall | 0:843654413849 | 56 | |
d_worrall | 0:843654413849 | 57 | void dispBoB::locate(char pos){ |
d_worrall | 9:44de04d410df | 58 | _pca.setAddress(loc[pos]); |
d_worrall | 0:843654413849 | 59 | _cursor = pos; |
d_worrall | 0:843654413849 | 60 | } |
d_worrall | 0:843654413849 | 61 | |
d_worrall | 9:44de04d410df | 62 | int dispBoB::_putc(int c){ |
d_worrall | 12:2235c72db927 | 63 | if(_cursor>6){ |
d_worrall | 12:2235c72db927 | 64 | _cursor++; |
d_worrall | 12:2235c72db927 | 65 | return -1; //skip if exceeds display size allow extra '.' in 6th >> to place in 5th |
d_worrall | 12:2235c72db927 | 66 | } |
d_worrall | 11:5e97be74f4d1 | 67 | |
d_worrall | 12:2235c72db927 | 68 | if(c=='.'){ //choose not to print a '.' outside the display bounds |
d_worrall | 12:2235c72db927 | 69 | if(_cursor>6){ |
d_worrall | 12:2235c72db927 | 70 | _cursor++; |
d_worrall | 12:2235c72db927 | 71 | return -1; |
d_worrall | 12:2235c72db927 | 72 | } |
d_worrall | 12:2235c72db927 | 73 | if((_cursor==0)&&((element[_cursor]&0x1000)==0x1000)) element[_cursor] = 0x0000; |
d_worrall | 12:2235c72db927 | 74 | if(_cursor!=0) _cursor--; |
d_worrall | 12:2235c72db927 | 75 | if(((element[_cursor]&0x1000)==0x1000)||((element[_cursor]&0x0100)==0x0100)){ |
d_worrall | 12:2235c72db927 | 76 | _cursor++; |
d_worrall | 12:2235c72db927 | 77 | element[_cursor]=0x0000; |
d_worrall | 12:2235c72db927 | 78 | } |
d_worrall | 12:2235c72db927 | 79 | } else { |
d_worrall | 12:2235c72db927 | 80 | if(_cursor>5){ //for non '.' chars at end of line, flag up overflow and don't print |
d_worrall | 12:2235c72db927 | 81 | _cursor++; |
d_worrall | 12:2235c72db927 | 82 | return -1; |
d_worrall | 12:2235c72db927 | 83 | } |
d_worrall | 12:2235c72db927 | 84 | element[_cursor]=0x0000; //reset an element before pasting a char other than '.' |
d_worrall | 12:2235c72db927 | 85 | } |
d_worrall | 12:2235c72db927 | 86 | |
d_worrall | 12:2235c72db927 | 87 | if(_cursor & 1){ //look up char >> element conversion and paste to display |
d_worrall | 12:2235c72db927 | 88 | element[_cursor] |= dispR[toupper(c)]; |
d_worrall | 0:843654413849 | 89 | } else { |
d_worrall | 12:2235c72db927 | 90 | element[_cursor] |= dispL[toupper(c)]; |
d_worrall | 0:843654413849 | 91 | } |
d_worrall | 0:843654413849 | 92 | |
d_worrall | 0:843654413849 | 93 | int i = _cursor/2; |
d_worrall | 12:2235c72db927 | 94 | ppair[i] = element[(2*i)] + element[(2*i)+1]; //combine left and right elements into a form readable by the PCA9635 |
d_worrall | 12:2235c72db927 | 95 | |
d_worrall | 12:2235c72db927 | 96 | _pca.setAddress(loc[_cursor]); //set location to paste to |
d_worrall | 12:2235c72db927 | 97 | bus(ppair[i]); //sned data tp PCA9635 |
d_worrall | 9:44de04d410df | 98 | |
d_worrall | 12:2235c72db927 | 99 | locate(_cursor+1); //allow cursor to be in element[6], decision of what to do |
d_worrall | 12:2235c72db927 | 100 | //is made at the start of the putc() algo. depending on char. |
d_worrall | 9:44de04d410df | 101 | return c; |
d_worrall | 0:843654413849 | 102 | } |
d_worrall | 0:843654413849 | 103 | |
d_worrall | 9:44de04d410df | 104 | int dispBoB::_getc(){ |
d_worrall | 9:44de04d410df | 105 | return -1; |
d_worrall | 0:843654413849 | 106 | } |
d_worrall | 0:843654413849 | 107 | |
d_worrall | 0:843654413849 | 108 | void dispBoB::scroll(string str, float speed){ |
d_worrall | 12:2235c72db927 | 109 | char buffer[12]; //instantiate a 12 element buffer array |
d_worrall | 12:2235c72db927 | 110 | str.insert(0, nullArray); //paste 6 zeros at either end of string |
d_worrall | 0:843654413849 | 111 | str.insert(str.length(), nullArray); |
d_worrall | 0:843654413849 | 112 | |
d_worrall | 12:2235c72db927 | 113 | for(int k = 0; k < str.length(); k++){ |
d_worrall | 12:2235c72db927 | 114 | str.copy(buffer, 12, k); //mask a 12 element buffer starting at k |
d_worrall | 12:2235c72db927 | 115 | locate(0); //locate to position 0 |
d_worrall | 12:2235c72db927 | 116 | printf("%s", buffer); //print buffer to display |
d_worrall | 12:2235c72db927 | 117 | if((element[0]&0x1000)==0x1000){ //if position zero has two characters i.e. char + '.' |
d_worrall | 12:2235c72db927 | 118 | if(element[0]!=0x1000)k++; //then treat as one |
d_worrall | 12:2235c72db927 | 119 | else; |
d_worrall | 12:2235c72db927 | 120 | } |
d_worrall | 12:2235c72db927 | 121 | wait(speed); //hold frame for duration of speed x milliseconds |
d_worrall | 0:843654413849 | 122 | } |
d_worrall | 0:843654413849 | 123 | } |
d_worrall | 0:843654413849 | 124 | |
d_worrall | 9:44de04d410df | 125 | //supply PCA9635 functionality to dispBoB class |
d_worrall | 8:a875c4229c57 | 126 | void dispBoB::bus(short leds){ |
d_worrall | 8:a875c4229c57 | 127 | _pca.bus(leds); |
d_worrall | 8:a875c4229c57 | 128 | } |
d_worrall | 0:843654413849 | 129 | |
d_worrall | 0:843654413849 | 130 | |
d_worrall | 0:843654413849 | 131 | |
d_worrall | 0:843654413849 | 132 | |
d_worrall | 0:843654413849 | 133 | |
d_worrall | 0:843654413849 | 134 | |
d_worrall | 0:843654413849 | 135 | |
d_worrall | 0:843654413849 | 136 | |
d_worrall | 13:38780808dc2f | 137 |