00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef TLC_SHIFTS_H
00020 #define TLC_SHIFTS_H
00021
00025 #include "Tlc5940.h"
00026
00027 uint16_t tlc_shiftUp(uint16_t zeroValue = 0);
00028 uint16_t tlc_shiftDown(uint16_t topValue = 0);
00029
00036
00037
00042 uint16_t tlc_shiftUp(uint16_t zeroValue)
00043 {
00044 uint16_t topValue = ((uint16_t)(*tlc_GSData) << 4)
00045 | (*(tlc_GSData + 1) >> 4);
00046 uint8_t *p = tlc_GSData + 1;
00047 while (p < tlc_GSData + NUM_TLCS * 24 - 1) {
00048 *(p - 1) = (*p << 4) | (*(p + 1) >> 4);
00049 *p = (*(p + 1) << 4) | (*(p + 2) >> 4);
00050 p += 2;
00051 }
00052 *(tlc_GSData + NUM_TLCS * 24 - 2) = (*(tlc_GSData + NUM_TLCS * 24 - 1) << 4)
00053 | ((zeroValue & 0x0F00) >> 8);
00054 *(tlc_GSData + NUM_TLCS * 24 - 1) = (uint8_t)zeroValue;
00055 return topValue;
00056 }
00057
00062 uint16_t tlc_shiftDown(uint16_t topValue)
00063 {
00064 uint8_t *p = tlc_GSData + NUM_TLCS * 24 - 2;
00065 uint16_t zeroValue =
00066 ((uint16_t)(*(tlc_GSData + NUM_TLCS * 24 - 2) & 0x0F) << 8)
00067 | *(tlc_GSData + NUM_TLCS * 24 - 1);
00068 while (p > tlc_GSData) {
00069 *(p + 1) = (*p >> 4) | (*(p - 1) << 4);
00070 *p = (*(p - 1) >> 4) | (*(p - 2) << 4);
00071 p -= 2;
00072 }
00073 *(tlc_GSData + 1) = (*tlc_GSData >> 4) | ((uint8_t)topValue << 4);
00074 *tlc_GSData = topValue >> 4;
00075 return zeroValue;
00076 }
00077
00078
00079
00080 #endif
00081