First steps with mbed an ht1632 with borrowed code. Print a message to a 0832 Dot Matrix Display from sure... I hope to form a library for such Displays in the next weeks...

Dependencies:   mbed

Committer:
relef
Date:
Sat Dec 04 10:42:09 2010 +0000
Revision:
0:d2b901ef8f4a
First steps with mbed an ht1632 with borrowed code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
relef 0:d2b901ef8f4a 1 #include "mbed.h"
relef 0:d2b901ef8f4a 2 #include "ht1632.h"
relef 0:d2b901ef8f4a 3 #include "font3.h"
relef 0:d2b901ef8f4a 4
relef 0:d2b901ef8f4a 5 #define HIGH 1
relef 0:d2b901ef8f4a 6 #define LOW 0
relef 0:d2b901ef8f4a 7
relef 0:d2b901ef8f4a 8 DigitalOut ht1632_wrclk(p23); // For Test : Led1 is Clock
relef 0:d2b901ef8f4a 9 DigitalOut ht1632_data(p22); // Led2 is Data ....
relef 0:d2b901ef8f4a 10 DigitalOut ht1632_cs(p21); // Led3 is CS
relef 0:d2b901ef8f4a 11
relef 0:d2b901ef8f4a 12 typedef unsigned char byte;
relef 0:d2b901ef8f4a 13
relef 0:d2b901ef8f4a 14 void byteOut(byte c);
relef 0:d2b901ef8f4a 15 void ht1632_chipselect(byte chipno);
relef 0:d2b901ef8f4a 16 static void ht1632_sendcmd (byte command);
relef 0:d2b901ef8f4a 17 static void ht1632_senddata (byte address, byte data);
relef 0:d2b901ef8f4a 18 void ht1632_chipfree(byte chipno);
relef 0:d2b901ef8f4a 19 void ht1632_writebits (byte bits, byte firstbit);
relef 0:d2b901ef8f4a 20 void ht1632_plot (int x, int y, char val);
relef 0:d2b901ef8f4a 21 void setup();
relef 0:d2b901ef8f4a 22 void loop();
relef 0:d2b901ef8f4a 23
relef 0:d2b901ef8f4a 24 int main() {
relef 0:d2b901ef8f4a 25 setup();
relef 0:d2b901ef8f4a 26 while(1) {
relef 0:d2b901ef8f4a 27 loop();
relef 0:d2b901ef8f4a 28 }
relef 0:d2b901ef8f4a 29 }
relef 0:d2b901ef8f4a 30
relef 0:d2b901ef8f4a 31 /***********************************************************************
relef 0:d2b901ef8f4a 32 * HT1624.pde - Arduino demo program for Holtek HT1632 LED driver chip,
relef 0:d2b901ef8f4a 33 * As implemented on the Sure Electronics DE-DP016 display board
relef 0:d2b901ef8f4a 34 * (16*24 dot matrix LED module.)
relef 0:d2b901ef8f4a 35 * Nov, 2008 by Bill Westfield ("WestfW")
relef 0:d2b901ef8f4a 36 * Copyrighted and distributed under the terms of the Berkely license
relef 0:d2b901ef8f4a 37 * (copy freely, but include this notice of original author.)
relef 0:d2b901ef8f4a 38 *
relef 0:d2b901ef8f4a 39 * Adapted for 8x32 display by FlorinC.
relef 0:d2b901ef8f4a 40 ***********************************************************************/
relef 0:d2b901ef8f4a 41
relef 0:d2b901ef8f4a 42 // comment out this line for the 8x32 display;
relef 0:d2b901ef8f4a 43 //#define _16x24_
relef 0:d2b901ef8f4a 44
relef 0:d2b901ef8f4a 45
relef 0:d2b901ef8f4a 46 #ifdef _16x24_
relef 0:d2b901ef8f4a 47 #define X_MAX 23
relef 0:d2b901ef8f4a 48 #define Y_MAX 15
relef 0:d2b901ef8f4a 49 #else
relef 0:d2b901ef8f4a 50 #define X_MAX 31
relef 0:d2b901ef8f4a 51 #define Y_MAX 7
relef 0:d2b901ef8f4a 52 #endif
relef 0:d2b901ef8f4a 53
relef 0:d2b901ef8f4a 54 #define plot(x,y,v) ht1632_plot(x,y,v)
relef 0:d2b901ef8f4a 55 #define cls ht1632_clear
relef 0:d2b901ef8f4a 56
relef 0:d2b901ef8f4a 57 #define DISPDELAY 0
relef 0:d2b901ef8f4a 58
relef 0:d2b901ef8f4a 59 char* msg = " Guten Morgen liebe Kollegen ! - Alles im Lack ? Noch 20 Tage bis Entwicklungsschluss ....... ";
relef 0:d2b901ef8f4a 60 int crtPos = 0;
relef 0:d2b901ef8f4a 61
relef 0:d2b901ef8f4a 62 /***********************************************************************
relef 0:d2b901ef8f4a 63 * ht1632_chipselect / ht1632_chipfree
relef 0:d2b901ef8f4a 64 * Select or de-select a particular ht1632 chip.
relef 0:d2b901ef8f4a 65 * De-selecting a chip ends the commands being sent to a chip.
relef 0:d2b901ef8f4a 66 * CD pins are active-low; writing 0 to the pin selects the chip.
relef 0:d2b901ef8f4a 67 ***********************************************************************/
relef 0:d2b901ef8f4a 68
relef 0:d2b901ef8f4a 69 void ht1632_chipselect(byte chipno)
relef 0:d2b901ef8f4a 70 {
relef 0:d2b901ef8f4a 71 ht1632_cs = 0;
relef 0:d2b901ef8f4a 72 }
relef 0:d2b901ef8f4a 73
relef 0:d2b901ef8f4a 74 void ht1632_chipfree(byte chipno)
relef 0:d2b901ef8f4a 75 {
relef 0:d2b901ef8f4a 76 ht1632_cs = 1;
relef 0:d2b901ef8f4a 77 }
relef 0:d2b901ef8f4a 78
relef 0:d2b901ef8f4a 79 /*
relef 0:d2b901ef8f4a 80 * we keep a copy of the display controller contents so that we can
relef 0:d2b901ef8f4a 81 * know which bits are on without having to (slowly) read the device.
relef 0:d2b901ef8f4a 82 * Note that we only use the low four bits of the shadow ram, since
relef 0:d2b901ef8f4a 83 * we're shadowing 4-bit memory. This makes things faster, and we
relef 0:d2b901ef8f4a 84 * use the other half for a "snapshot" when we want to plot new data
relef 0:d2b901ef8f4a 85 * based on older data...
relef 0:d2b901ef8f4a 86 */
relef 0:d2b901ef8f4a 87 // (fc) covers the case for 32x8 as well (64 bytes, 4 bits)
relef 0:d2b901ef8f4a 88 byte ht1632_shadowram[96]; // our copy of the display's RAM
relef 0:d2b901ef8f4a 89
relef 0:d2b901ef8f4a 90 /*
relef 0:d2b901ef8f4a 91 * ht1632_writebits
relef 0:d2b901ef8f4a 92 * Write bits (up to <img src="http://timewitharduino.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"> to h1632 on pins HT1632_DATA, HT1632_WRCLK
relef 0:d2b901ef8f4a 93 * Chip is assumed to already be chip-selected
relef 0:d2b901ef8f4a 94 * Bits are shifted out from MSB to LSB, with the first bit sent
relef 0:d2b901ef8f4a 95 * being (bits & firstbit), shifted till firsbit is zero.
relef 0:d2b901ef8f4a 96 */
relef 0:d2b901ef8f4a 97 void ht1632_writebits (byte bits, byte firstbit)
relef 0:d2b901ef8f4a 98 {
relef 0:d2b901ef8f4a 99 while (firstbit) {
relef 0:d2b901ef8f4a 100 ht1632_wrclk = 0;
relef 0:d2b901ef8f4a 101 if (bits & firstbit) {
relef 0:d2b901ef8f4a 102 ht1632_data = 1;
relef 0:d2b901ef8f4a 103 }
relef 0:d2b901ef8f4a 104 else {
relef 0:d2b901ef8f4a 105 ht1632_data = 0;
relef 0:d2b901ef8f4a 106 }
relef 0:d2b901ef8f4a 107 ht1632_wrclk = 1;
relef 0:d2b901ef8f4a 108 firstbit >>= 1;
relef 0:d2b901ef8f4a 109 }
relef 0:d2b901ef8f4a 110 }
relef 0:d2b901ef8f4a 111
relef 0:d2b901ef8f4a 112 /*
relef 0:d2b901ef8f4a 113 * ht1632_sendcmd
relef 0:d2b901ef8f4a 114 * Send a command to the ht1632 chip.
relef 0:d2b901ef8f4a 115 * A command consists of a 3-bit "CMD" ID, an 8bit command, and
relef 0:d2b901ef8f4a 116 * one "don't care bit".
relef 0:d2b901ef8f4a 117 * Select 1 0 0 c7 c6 c5 c4 c3 c2 c1 c0 xx Free
relef 0:d2b901ef8f4a 118 */
relef 0:d2b901ef8f4a 119 static void ht1632_sendcmd (byte command)
relef 0:d2b901ef8f4a 120 {
relef 0:d2b901ef8f4a 121 ht1632_chipselect(ht1632_cs); // Select chip
relef 0:d2b901ef8f4a 122 ht1632_writebits(ID_CMD, 1<<2); // send 3 bits of id: COMMMAND
relef 0:d2b901ef8f4a 123 ht1632_writebits(command, 1<<7); // send the actual command
relef 0:d2b901ef8f4a 124 ht1632_writebits(0, 1); /* one extra dont-care bit in commands. */
relef 0:d2b901ef8f4a 125 ht1632_chipfree(ht1632_cs); //done
relef 0:d2b901ef8f4a 126 }
relef 0:d2b901ef8f4a 127
relef 0:d2b901ef8f4a 128
relef 0:d2b901ef8f4a 129 /*
relef 0:d2b901ef8f4a 130 * ht1632_clear
relef 0:d2b901ef8f4a 131 * clear the display, and the shadow memory, and the snapshot
relef 0:d2b901ef8f4a 132 * memory. This uses the "write multiple words" capability of
relef 0:d2b901ef8f4a 133 * the chipset by writing all 96 words of memory without raising
relef 0:d2b901ef8f4a 134 * the chipselect signal.
relef 0:d2b901ef8f4a 135 */
relef 0:d2b901ef8f4a 136 void ht1632_clear()
relef 0:d2b901ef8f4a 137 {
relef 0:d2b901ef8f4a 138 char i;
relef 0:d2b901ef8f4a 139
relef 0:d2b901ef8f4a 140 ht1632_chipselect(HT1632_CS); // Select chip
relef 0:d2b901ef8f4a 141 ht1632_writebits(ID_WR, 1<<2); // send ID: WRITE to RAM
relef 0:d2b901ef8f4a 142 ht1632_writebits(0, 1<<6); // Send address
relef 0:d2b901ef8f4a 143 for (i = 0; i < 96/2; i++) // Clear entire display
relef 0:d2b901ef8f4a 144 ht1632_writebits(0, 1<<7); // send 8 bits of data
relef 0:d2b901ef8f4a 145 ht1632_chipfree(HT1632_CS); // done
relef 0:d2b901ef8f4a 146 for (i=0; i < 96; i++)
relef 0:d2b901ef8f4a 147 ht1632_shadowram[i] = 0;
relef 0:d2b901ef8f4a 148 }
relef 0:d2b901ef8f4a 149
relef 0:d2b901ef8f4a 150 /*
relef 0:d2b901ef8f4a 151 * ht1632_senddata
relef 0:d2b901ef8f4a 152 * send a nibble (4 bits) of data to a particular memory location of the
relef 0:d2b901ef8f4a 153 * ht1632. The command has 3 bit ID, 7 bits of address, and 4 bits of data.
relef 0:d2b901ef8f4a 154 * Select 1 0 1 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 D3 Free
relef 0:d2b901ef8f4a 155 * Note that the address is sent MSB first, while the data is sent LSB first!
relef 0:d2b901ef8f4a 156 * This means that somewhere a bit reversal will have to be done to get
relef 0:d2b901ef8f4a 157 * zero-based addressing of words and dots within words.
relef 0:d2b901ef8f4a 158 */
relef 0:d2b901ef8f4a 159 static void ht1632_senddata (byte address, byte data)
relef 0:d2b901ef8f4a 160 {
relef 0:d2b901ef8f4a 161 ht1632_chipselect(HT1632_CS); // Select chip
relef 0:d2b901ef8f4a 162 ht1632_writebits(ID_WR, 1<<2); // send ID: WRITE to RAM
relef 0:d2b901ef8f4a 163 ht1632_writebits(address, 1<<6); // Send address
relef 0:d2b901ef8f4a 164 ht1632_writebits(data, 1<<3); // send 4 bits of data
relef 0:d2b901ef8f4a 165 ht1632_chipfree(HT1632_CS); // done
relef 0:d2b901ef8f4a 166 }
relef 0:d2b901ef8f4a 167
relef 0:d2b901ef8f4a 168 void ht1632_setup()
relef 0:d2b901ef8f4a 169 {
relef 0:d2b901ef8f4a 170 ht1632_cs = HIGH; // unselect (active low)
relef 0:d2b901ef8f4a 171 ht1632_sendcmd(CMD_SYSDIS); // Disable system
relef 0:d2b901ef8f4a 172
relef 0:d2b901ef8f4a 173 #ifdef _16x24_
relef 0:d2b901ef8f4a 174 ht1632_sendcmd(CMD_COMS11); // 16*32, PMOS drivers
relef 0:d2b901ef8f4a 175 #else
relef 0:d2b901ef8f4a 176 // (fc)
relef 0:d2b901ef8f4a 177 ht1632_sendcmd(CMD_COMS10); // 32x8, PMOS drivers
relef 0:d2b901ef8f4a 178 #endif
relef 0:d2b901ef8f4a 179
relef 0:d2b901ef8f4a 180 ht1632_sendcmd(CMD_MSTMD); // Master Mode
relef 0:d2b901ef8f4a 181 ht1632_sendcmd(CMD_SYSON); // System on
relef 0:d2b901ef8f4a 182 ht1632_sendcmd(CMD_LEDON); // LEDs on
relef 0:d2b901ef8f4a 183
relef 0:d2b901ef8f4a 184 for (byte i=0; i<64; i++)
relef 0:d2b901ef8f4a 185 ht1632_senddata(i, 0); // clear the display!
relef 0:d2b901ef8f4a 186
relef 0:d2b901ef8f4a 187 wait(0.1); // ?
relef 0:d2b901ef8f4a 188 }
relef 0:d2b901ef8f4a 189
relef 0:d2b901ef8f4a 190 /*
relef 0:d2b901ef8f4a 191 * Copy a character glyph from the myfont data structure to
relef 0:d2b901ef8f4a 192 * display memory, with its upper left at the given coordinate
relef 0:d2b901ef8f4a 193 * This is unoptimized and simply uses plot() to draw each dot.
relef 0:d2b901ef8f4a 194 */
relef 0:d2b901ef8f4a 195 void ht1632_putchar(int x, int y, char c)
relef 0:d2b901ef8f4a 196 {
relef 0:d2b901ef8f4a 197 // fonts defined for ascii 32 and beyond (index 0 in font array is ascii 32);
relef 0:d2b901ef8f4a 198 byte charIndex;
relef 0:d2b901ef8f4a 199
relef 0:d2b901ef8f4a 200 // replace undisplayable characters with blank;
relef 0:d2b901ef8f4a 201 if (c < 32 || c > 126)
relef 0:d2b901ef8f4a 202 {
relef 0:d2b901ef8f4a 203 charIndex = 0;
relef 0:d2b901ef8f4a 204 }
relef 0:d2b901ef8f4a 205 else
relef 0:d2b901ef8f4a 206 {
relef 0:d2b901ef8f4a 207 charIndex = c - 32;
relef 0:d2b901ef8f4a 208 }
relef 0:d2b901ef8f4a 209
relef 0:d2b901ef8f4a 210 // move character definition, pixel by pixel, onto the display;
relef 0:d2b901ef8f4a 211 // fonts are defined as one byte per row;
relef 0:d2b901ef8f4a 212 for (byte row=0; row<8; row++)
relef 0:d2b901ef8f4a 213 {
relef 0:d2b901ef8f4a 214 byte rowDots = myfont[charIndex][row];
relef 0:d2b901ef8f4a 215 for (byte col=0; col<6; col++)
relef 0:d2b901ef8f4a 216 {
relef 0:d2b901ef8f4a 217 if (rowDots & (1<<(5-col)))
relef 0:d2b901ef8f4a 218 plot(x+col, y+row, 1);
relef 0:d2b901ef8f4a 219 else
relef 0:d2b901ef8f4a 220 plot(x+col, y+row, 0);
relef 0:d2b901ef8f4a 221 }
relef 0:d2b901ef8f4a 222 }
relef 0:d2b901ef8f4a 223 }
relef 0:d2b901ef8f4a 224
relef 0:d2b901ef8f4a 225 /*
relef 0:d2b901ef8f4a 226 * plot a point on the display, with the upper left hand corner
relef 0:d2b901ef8f4a 227 * being (0,0), and the lower right hand corner being (23, 15).
relef 0:d2b901ef8f4a 228 * Note that Y increases going "downward" in contrast with most
relef 0:d2b901ef8f4a 229 * mathematical coordiate systems, but in common with many displays
relef 0:d2b901ef8f4a 230 * No error checking; bad things may happen if arguments are out of
relef 0:d2b901ef8f4a 231 * bounds! (The ASSERTS compile to nothing by default
relef 0:d2b901ef8f4a 232 */
relef 0:d2b901ef8f4a 233 void ht1632_plot (int x, int y, char val)
relef 0:d2b901ef8f4a 234 {
relef 0:d2b901ef8f4a 235 if (x<0 || x>X_MAX || y<0 || y>Y_MAX)
relef 0:d2b901ef8f4a 236 return;
relef 0:d2b901ef8f4a 237
relef 0:d2b901ef8f4a 238 char addr, bitval;
relef 0:d2b901ef8f4a 239
relef 0:d2b901ef8f4a 240 /*
relef 0:d2b901ef8f4a 241 * The 4 bits in a single memory word go DOWN, with the LSB
relef 0:d2b901ef8f4a 242 * (first transmitted) bit being on top. However, writebits()
relef 0:d2b901ef8f4a 243 * sends the MSB first, so we have to do a sort of bit-reversal
relef 0:d2b901ef8f4a 244 * somewhere. Here, this is done by shifting the single bit in
relef 0:d2b901ef8f4a 245 * the opposite direction from what you might expect.
relef 0:d2b901ef8f4a 246 */
relef 0:d2b901ef8f4a 247 bitval = 8>>(y&3); // compute which bit will need set
relef 0:d2b901ef8f4a 248
relef 0:d2b901ef8f4a 249 #ifdef _16x24_
relef 0:d2b901ef8f4a 250 addr = (x<<2) + (y>>2); // compute which memory word this is in
relef 0:d2b901ef8f4a 251 #else
relef 0:d2b901ef8f4a 252 // (fc)
relef 0:d2b901ef8f4a 253 addr = (x<<1) + (y>>2); // compute which memory word this is in
relef 0:d2b901ef8f4a 254 #endif
relef 0:d2b901ef8f4a 255
relef 0:d2b901ef8f4a 256 if (val) { // Modify the shadow memory
relef 0:d2b901ef8f4a 257 ht1632_shadowram[addr] |= bitval;
relef 0:d2b901ef8f4a 258 }
relef 0:d2b901ef8f4a 259 else {
relef 0:d2b901ef8f4a 260 ht1632_shadowram[addr] &= ~bitval;
relef 0:d2b901ef8f4a 261 }
relef 0:d2b901ef8f4a 262 // Now copy the new memory value to the display
relef 0:d2b901ef8f4a 263 ht1632_senddata(addr, ht1632_shadowram[addr]);
relef 0:d2b901ef8f4a 264 }
relef 0:d2b901ef8f4a 265
relef 0:d2b901ef8f4a 266 /*
relef 0:d2b901ef8f4a 267 * get_shadowram
relef 0:d2b901ef8f4a 268 * return the value of a pixel from the shadow ram.
relef 0:d2b901ef8f4a 269 */
relef 0:d2b901ef8f4a 270 byte get_shadowram(byte x, byte y)
relef 0:d2b901ef8f4a 271 {
relef 0:d2b901ef8f4a 272 byte addr, bitval;
relef 0:d2b901ef8f4a 273
relef 0:d2b901ef8f4a 274 bitval = 8>>(y&3); // compute which bit will need set
relef 0:d2b901ef8f4a 275 addr = (x<<2) + (y>>2); // compute which memory word this is in
relef 0:d2b901ef8f4a 276 return (0 != (ht1632_shadowram[addr] & bitval));
relef 0:d2b901ef8f4a 277 }
relef 0:d2b901ef8f4a 278
relef 0:d2b901ef8f4a 279 /*
relef 0:d2b901ef8f4a 280 * snapshot_shadowram
relef 0:d2b901ef8f4a 281 * Copy the shadow ram into the snapshot ram (the upper bits)
relef 0:d2b901ef8f4a 282 * This gives us a separate copy so we can plot new data while
relef 0:d2b901ef8f4a 283 * still having a copy of the old data. snapshotram is NOT
relef 0:d2b901ef8f4a 284 * updated by the plot functions (except "clear")
relef 0:d2b901ef8f4a 285 */
relef 0:d2b901ef8f4a 286 void snapshot_shadowram()
relef 0:d2b901ef8f4a 287 {
relef 0:d2b901ef8f4a 288 for (char i=0; i< sizeof ht1632_shadowram; i++) {
relef 0:d2b901ef8f4a 289 ht1632_shadowram[i] = (ht1632_shadowram[i] & 0x0F) | ht1632_shadowram[i] << 4; // Use the upper bits
relef 0:d2b901ef8f4a 290 }
relef 0:d2b901ef8f4a 291 }
relef 0:d2b901ef8f4a 292
relef 0:d2b901ef8f4a 293 /*
relef 0:d2b901ef8f4a 294 * get_snapshotram
relef 0:d2b901ef8f4a 295 * get a pixel value from the snapshot ram (instead of
relef 0:d2b901ef8f4a 296 * the actual displayed (shadow) memory
relef 0:d2b901ef8f4a 297 */
relef 0:d2b901ef8f4a 298 byte get_snapshotram(byte x, byte y)
relef 0:d2b901ef8f4a 299 {
relef 0:d2b901ef8f4a 300 byte addr, bitval;
relef 0:d2b901ef8f4a 301
relef 0:d2b901ef8f4a 302 bitval = 128>>(y&3); // user upper bits!
relef 0:d2b901ef8f4a 303
relef 0:d2b901ef8f4a 304 #ifdef _16x24_
relef 0:d2b901ef8f4a 305 addr = (x<<2) + (y>>2); // compute which memory word this is in
relef 0:d2b901ef8f4a 306 #else
relef 0:d2b901ef8f4a 307 // (fc)
relef 0:d2b901ef8f4a 308 addr = (x<<1) + (y>>2); // compute which memory word this is in
relef 0:d2b901ef8f4a 309 #endif
relef 0:d2b901ef8f4a 310
relef 0:d2b901ef8f4a 311 if (ht1632_shadowram[addr] & bitval)
relef 0:d2b901ef8f4a 312 return 1;
relef 0:d2b901ef8f4a 313 return 0;
relef 0:d2b901ef8f4a 314 }
relef 0:d2b901ef8f4a 315
relef 0:d2b901ef8f4a 316 /*
relef 0:d2b901ef8f4a 317 * This works equally well for both 16x24 and 8x32 matrices.
relef 0:d2b901ef8f4a 318 */
relef 0:d2b901ef8f4a 319 void displayScrollingLine()
relef 0:d2b901ef8f4a 320 {
relef 0:d2b901ef8f4a 321 // shift the whole screen 6 times, one column at a time;
relef 0:d2b901ef8f4a 322 for (int x=0; x < 6; x++)
relef 0:d2b901ef8f4a 323 {
relef 0:d2b901ef8f4a 324 ht1632_putchar(-x, 0, msg[crtPos]);
relef 0:d2b901ef8f4a 325 ht1632_putchar(-x+6, 0, ((crtPos+1 < strlen(msg)) ? msg[crtPos+1] : ' '));
relef 0:d2b901ef8f4a 326 ht1632_putchar(-x+12, 0, ((crtPos+2 < strlen(msg)) ? msg[crtPos+2] : ' '));
relef 0:d2b901ef8f4a 327 ht1632_putchar(-x+18, 0, ((crtPos+3 < strlen(msg)) ? msg[crtPos+3] : ' '));
relef 0:d2b901ef8f4a 328 ht1632_putchar(-x+24, 0, ((crtPos+4 < strlen(msg)) ? msg[crtPos+4] : ' '));
relef 0:d2b901ef8f4a 329 ht1632_putchar(-x+30, 0, ((crtPos+5 < strlen(msg)) ? msg[crtPos+5] : ' '));
relef 0:d2b901ef8f4a 330 ht1632_putchar(-x+36, 0, ((crtPos+6 < strlen(msg)) ? msg[crtPos+6] : ' '));
relef 0:d2b901ef8f4a 331 wait(0.05);
relef 0:d2b901ef8f4a 332 }
relef 0:d2b901ef8f4a 333
relef 0:d2b901ef8f4a 334 crtPos++;
relef 0:d2b901ef8f4a 335 if (crtPos >= strlen(msg))
relef 0:d2b901ef8f4a 336 {
relef 0:d2b901ef8f4a 337 crtPos = 0;
relef 0:d2b901ef8f4a 338 }
relef 0:d2b901ef8f4a 339 }
relef 0:d2b901ef8f4a 340
relef 0:d2b901ef8f4a 341 /***********************************************************************
relef 0:d2b901ef8f4a 342 * traditional Arduino sketch functions: setup and loop.
relef 0:d2b901ef8f4a 343 ***********************************************************************/
relef 0:d2b901ef8f4a 344
relef 0:d2b901ef8f4a 345 void setup ()
relef 0:d2b901ef8f4a 346 {
relef 0:d2b901ef8f4a 347 ht1632_setup();
relef 0:d2b901ef8f4a 348 cls();
relef 0:d2b901ef8f4a 349 }
relef 0:d2b901ef8f4a 350
relef 0:d2b901ef8f4a 351 void loop ()
relef 0:d2b901ef8f4a 352 {
relef 0:d2b901ef8f4a 353 // display line;
relef 0:d2b901ef8f4a 354 displayScrollingLine();
relef 0:d2b901ef8f4a 355 }