LPC1114FN28 drive 8x8 LED Matrix. http://jiwashin.blogspot.jp/2016/07/my-lpc1114-device-lose-before-game.html

Dependencies:   mbed-rtos mbed

Committer:
TareObjects
Date:
Sat Jun 27 22:02:07 2015 +0000
Revision:
1:badc825f9c7e
Parent:
0:070e4cb87478
Child:
2:adfdb6828250
i2c slave???????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TareObjects 0:070e4cb87478 1 #include "mbed.h"
TareObjects 0:070e4cb87478 2
TareObjects 0:070e4cb87478 3
TareObjects 1:badc825f9c7e 4 void setPNumLeftAndRight();
TareObjects 1:badc825f9c7e 5
TareObjects 1:badc825f9c7e 6 void disableTicker();
TareObjects 1:badc825f9c7e 7 void enableTicker();
TareObjects 1:badc825f9c7e 8
TareObjects 1:badc825f9c7e 9 void dynamicDriver();
TareObjects 1:badc825f9c7e 10 void count();
TareObjects 1:badc825f9c7e 11
TareObjects 1:badc825f9c7e 12
TareObjects 0:070e4cb87478 13 char num0[] = {126,129,129,129,129,129,126,0};
TareObjects 0:070e4cb87478 14 char num1[] = {0,1,65,255,1,1,0,0};
TareObjects 0:070e4cb87478 15 char num2[] = {33,67,133,137,137,113,1,0};
TareObjects 0:070e4cb87478 16 char num3[] = {66,129,145,145,145,145,110,0};
TareObjects 0:070e4cb87478 17 char num4[] = {24,40,72,136,8,255,8,0};
TareObjects 0:070e4cb87478 18 char num5[] = {242,145,145,145,145,145,142,0};
TareObjects 0:070e4cb87478 19 char num6[] = {126,145,145,145,145,145,78,0};
TareObjects 0:070e4cb87478 20 char num7[] = {192,128,128,143,144,160,192,0};
TareObjects 0:070e4cb87478 21 char num8[] = {110,145,145,145,145,145,110,0};
TareObjects 0:070e4cb87478 22 char num9[] = {114,137,137,137,137,137,126,0};
TareObjects 1:badc825f9c7e 23 char col[] = {0, 0, 0, 36, 0, 0, 0, 0};
TareObjects 1:badc825f9c7e 24 char space[] = {0, 0, 0, 0, 0, 0, 0, 0};
TareObjects 0:070e4cb87478 25
TareObjects 0:070e4cb87478 26 char *nums[] = {num0, num1, num2, num3, num4, num5, num6, num7, num8, num9};
TareObjects 0:070e4cb87478 27
TareObjects 0:070e4cb87478 28 //BusOut common(dp15,dp25,dp13,dp17, dp1,dp11, dp2); // anode
TareObjects 0:070e4cb87478 29 //BusOut row( dp18, dp4, dp6,dp14,dp10,dp16,dp26,dp28); // casode
TareObjects 0:070e4cb87478 30 BusOut common( dp9, dp2, dp11, dp1, dp17, dp13, dp25, dp15); // anode
TareObjects 0:070e4cb87478 31 BusOut row( dp28, dp26, dp16, dp10, dp14, dp6, dp4, dp18); // casode
TareObjects 0:070e4cb87478 32
TareObjects 1:badc825f9c7e 33 I2CSlave slave(dp5, dp27);
TareObjects 0:070e4cb87478 34
TareObjects 0:070e4cb87478 35
TareObjects 0:070e4cb87478 36 Ticker frameRate;
TareObjects 0:070e4cb87478 37 Ticker dynamicRate;
TareObjects 0:070e4cb87478 38
TareObjects 0:070e4cb87478 39
TareObjects 1:badc825f9c7e 40 char displayBuffer[100];
TareObjects 0:070e4cb87478 41 int nDisplayBuffer;
TareObjects 0:070e4cb87478 42 int iDisplayBuffer = 0;
TareObjects 0:070e4cb87478 43 char *pNumLeft; // 出力中の数字ビットパターン、左側
TareObjects 0:070e4cb87478 44 char *pNumRight; // 出力中の数字ビットパターン、右側
TareObjects 0:070e4cb87478 45 int iShift = 0; // 0 - 7 ... 現在何ビットずれているか
TareObjects 0:070e4cb87478 46
TareObjects 0:070e4cb87478 47
TareObjects 0:070e4cb87478 48 void setPNumLeftAndRight() {
TareObjects 0:070e4cb87478 49 char left = displayBuffer[iDisplayBuffer];
TareObjects 1:badc825f9c7e 50 if (left == ' ') {
TareObjects 1:badc825f9c7e 51 pNumLeft = space;
TareObjects 1:badc825f9c7e 52 } else if (left == ':') {
TareObjects 1:badc825f9c7e 53 pNumLeft = col;
TareObjects 1:badc825f9c7e 54 } else {
TareObjects 1:badc825f9c7e 55 pNumLeft = nums[left - '0'];
TareObjects 1:badc825f9c7e 56 }
TareObjects 0:070e4cb87478 57 char right = (iDisplayBuffer+1 >= nDisplayBuffer) ? displayBuffer[0] : displayBuffer[iDisplayBuffer+1];
TareObjects 1:badc825f9c7e 58 if (right == ' ') {
TareObjects 1:badc825f9c7e 59 pNumRight = space;
TareObjects 1:badc825f9c7e 60 } else if (right == ':') {
TareObjects 1:badc825f9c7e 61 pNumRight = col;
TareObjects 1:badc825f9c7e 62 } else {
TareObjects 1:badc825f9c7e 63 pNumRight = nums[right - '0'];
TareObjects 1:badc825f9c7e 64 }
TareObjects 0:070e4cb87478 65 }
TareObjects 0:070e4cb87478 66
TareObjects 0:070e4cb87478 67
TareObjects 0:070e4cb87478 68 void count() {
TareObjects 1:badc825f9c7e 69 disableTicker();
TareObjects 0:070e4cb87478 70
TareObjects 0:070e4cb87478 71 iShift++;
TareObjects 0:070e4cb87478 72 if (iShift >= 8) {
TareObjects 0:070e4cb87478 73 iShift = 0;
TareObjects 0:070e4cb87478 74
TareObjects 0:070e4cb87478 75 iDisplayBuffer++;
TareObjects 0:070e4cb87478 76 if (iDisplayBuffer >= nDisplayBuffer) {
TareObjects 0:070e4cb87478 77 iDisplayBuffer = 0;
TareObjects 0:070e4cb87478 78 }
TareObjects 0:070e4cb87478 79 setPNumLeftAndRight();
TareObjects 0:070e4cb87478 80 }
TareObjects 1:badc825f9c7e 81
TareObjects 1:badc825f9c7e 82 enableTicker();
TareObjects 0:070e4cb87478 83 }
TareObjects 0:070e4cb87478 84
TareObjects 0:070e4cb87478 85
TareObjects 0:070e4cb87478 86 int iYoko = 0;
TareObjects 0:070e4cb87478 87 int pYoko = 1;
TareObjects 0:070e4cb87478 88
TareObjects 0:070e4cb87478 89
TareObjects 0:070e4cb87478 90 void dynamicDriver() {
TareObjects 0:070e4cb87478 91 int i = iYoko + iShift;
TareObjects 0:070e4cb87478 92
TareObjects 0:070e4cb87478 93 common = 0x00;
TareObjects 0:070e4cb87478 94 // char rowData = (i < 8) ? iShift : iShift*16;
TareObjects 0:070e4cb87478 95 // char rowData = (i < 8) ? num0[iShift] : num1[iShift];
TareObjects 0:070e4cb87478 96 char rowData = (i < 8) ? pNumLeft[i] : pNumRight[i % 8];
TareObjects 0:070e4cb87478 97 row = (~rowData) & 0x00ff;
TareObjects 0:070e4cb87478 98 common = (pYoko) & 0x00ff;
TareObjects 0:070e4cb87478 99 iYoko++;
TareObjects 0:070e4cb87478 100 pYoko *= 2;
TareObjects 0:070e4cb87478 101 if (iYoko == 8) {
TareObjects 0:070e4cb87478 102 iYoko = 0;
TareObjects 0:070e4cb87478 103 pYoko = 1;
TareObjects 0:070e4cb87478 104 }
TareObjects 0:070e4cb87478 105 }
TareObjects 0:070e4cb87478 106
TareObjects 1:badc825f9c7e 107 void disableTicker() {
TareObjects 1:badc825f9c7e 108 frameRate.detach();
TareObjects 1:badc825f9c7e 109 dynamicRate.detach();
TareObjects 1:badc825f9c7e 110 }
TareObjects 1:badc825f9c7e 111
TareObjects 1:badc825f9c7e 112 void enableTicker() {
TareObjects 1:badc825f9c7e 113 frameRate.attach(count, 0.05);
TareObjects 1:badc825f9c7e 114 dynamicRate.attach(dynamicDriver, 0.0001);
TareObjects 1:badc825f9c7e 115 }
TareObjects 1:badc825f9c7e 116
TareObjects 0:070e4cb87478 117
TareObjects 0:070e4cb87478 118 int main() {
TareObjects 1:badc825f9c7e 119 int deviceOffset = 4;
TareObjects 1:badc825f9c7e 120 slave.address(0x10 + deviceOffset);
TareObjects 1:badc825f9c7e 121
TareObjects 1:badc825f9c7e 122 strcpy(displayBuffer, " :3: ");
TareObjects 1:badc825f9c7e 123 displayBuffer[2] = deviceOffset + '0';
TareObjects 0:070e4cb87478 124 nDisplayBuffer = strlen(displayBuffer);
TareObjects 0:070e4cb87478 125
TareObjects 0:070e4cb87478 126 iDisplayBuffer = 0;
TareObjects 0:070e4cb87478 127 iShift = 0;
TareObjects 0:070e4cb87478 128 setPNumLeftAndRight();
TareObjects 0:070e4cb87478 129
TareObjects 1:badc825f9c7e 130 enableTicker();
TareObjects 1:badc825f9c7e 131
TareObjects 1:badc825f9c7e 132 char buf[100];
TareObjects 1:badc825f9c7e 133 char *msg = "ok";
TareObjects 0:070e4cb87478 134
TareObjects 1:badc825f9c7e 135 while(1) {
TareObjects 1:badc825f9c7e 136 int status = slave.receive();
TareObjects 1:badc825f9c7e 137 switch (status) {
TareObjects 1:badc825f9c7e 138 case I2CSlave::ReadAddressed:
TareObjects 1:badc825f9c7e 139 slave.write(msg, strlen(msg) + 1); // Includes null char
TareObjects 1:badc825f9c7e 140 break;
TareObjects 1:badc825f9c7e 141
TareObjects 1:badc825f9c7e 142 case I2CSlave::WriteGeneral:
TareObjects 1:badc825f9c7e 143 disableTicker();
TareObjects 1:badc825f9c7e 144 if (slave.read(buf, 2)) {
TareObjects 1:badc825f9c7e 145 int charPos = buf[0] - '0' + deviceOffset;
TareObjects 1:badc825f9c7e 146 int shiftPos = buf[1] - '1';
TareObjects 1:badc825f9c7e 147
TareObjects 1:badc825f9c7e 148 if (charPos >= 0 && charPos < nDisplayBuffer) {
TareObjects 1:badc825f9c7e 149 iDisplayBuffer = charPos;
TareObjects 1:badc825f9c7e 150 }
TareObjects 1:badc825f9c7e 151 if (shiftPos >= 0 && shiftPos < 8) {
TareObjects 1:badc825f9c7e 152 iShift = shiftPos;
TareObjects 1:badc825f9c7e 153 }
TareObjects 1:badc825f9c7e 154 }
TareObjects 1:badc825f9c7e 155 enableTicker();
TareObjects 1:badc825f9c7e 156 break;
TareObjects 1:badc825f9c7e 157
TareObjects 1:badc825f9c7e 158 case I2CSlave::WriteAddressed:
TareObjects 1:badc825f9c7e 159 disableTicker();
TareObjects 1:badc825f9c7e 160 if (slave.read(buf, 10)) {
TareObjects 1:badc825f9c7e 161 strcpy(displayBuffer, buf);
TareObjects 1:badc825f9c7e 162 nDisplayBuffer = strlen(displayBuffer);
TareObjects 1:badc825f9c7e 163 iDisplayBuffer = 0;
TareObjects 1:badc825f9c7e 164 iShift = 0;
TareObjects 1:badc825f9c7e 165 setPNumLeftAndRight();
TareObjects 1:badc825f9c7e 166 slave.stop();
TareObjects 1:badc825f9c7e 167 }
TareObjects 1:badc825f9c7e 168 enableTicker();
TareObjects 1:badc825f9c7e 169 break;
TareObjects 1:badc825f9c7e 170
TareObjects 1:badc825f9c7e 171 default: break;
TareObjects 1:badc825f9c7e 172 }
TareObjects 1:badc825f9c7e 173
TareObjects 1:badc825f9c7e 174 }
TareObjects 0:070e4cb87478 175 }
TareObjects 1:badc825f9c7e 176