AVRによるマトリクスLED制御
AVRによるマトリクスLED制御
この度大学でAVRによるマトリクスLED制御を行う事になったのですが、プログラム面で今行き詰っています.
void PointDisplay(int* pointlist[8][8],int time)//指定した座標のLEDを点灯させる
{
PORTB=init_PORTB;
PORTD=init_PORTD;
for(int loop=0;loop<=time;loop++)
{
for(int k=0;k<=7;k++){
switch(k){
case 0:
ROW1_on;
break;
case 1:
ROW2_on;
break;
case 2:
ROW3_on;
break;
case 3:
ROW4_on;
break;
case 4:
ROW5_on;
break;
case 5:
ROW6_on;
break;
case 6:
ROW7_on;
break;
case 7:
ROW8_on;
break;
}
for(int j=0;j<=7;j++){
if(pointlist[k][j]==1){
switch(j){
case 0:
COL1_ready;
break;
case 1:
COL2_ready;
break;
case 2:
COL3_ready;
break;
case 3:
COL4_ready;
break;
case 4:
COL5_ready;
break;
case 5:
COL6_ready;
break;
case 6:
COL7_ready;
break;
case 7:
COL8_ready;
break;
}
}
}
PORTB=init_PORTB;
PORTD=init_PORTD;
}
}
}
以上が使用する関数で,実行内容としては2次配列pointlistを関数PointDisplayに渡し,time分だけループするという関数になります.
マトリクスLEDは8×8のTOM-1588BHです.(データシートも添付しております 引用)
使用しているAVRはATmega168Pで,PORTD0~7をLEDの1~8pinにPORTB0~7をLEDの9~16pinに接続しています.(回路がわかりやすくなるように)そしてそれを#defineで定義しそれぞれをビット制御しています.
行き詰っている理由はintの配列を4つまで定義してコンパイル>実行すると思ったとおりにLEDに表示されるのですが,5つ以上定義してコンパイル>実行すると3,4つめの配列が乱れてしまいます.(ひとつ右にずれたりひとつ上にずれたり)
4つまでは正常に動作しているのでハード面は問題ないと考えて,ソフト面を見直しているのですが,なぜ悪いのかが理解できません.(オーバーフローとかそんなんですかね?)
こういったマイコンを扱うプログラムは経験が少なく,データシートも英文なので困っています.どなたか詳しい方,知恵を貸していただけないでしょうか?お願い致します.
補足
説明不足ですみません・・・。 それが、 クラブ活動で使うのです・・・ 数日前に頼まれて、やることになってしまいました… なので学校のテキストとかはないです。 今春休みなので先生もいないです。 友達は自分と同じくわからないみたいなので・・・。