LEDマトリクスについて質問です。
今LEDマトリクスを制御しようとしているのですが、プログラムの方法がいまちよく分かりません。
LEDマトリクスはアノードコモン、アノード側の制御はPNPトランジスタ、
カソード側の制御はNPNトランジスタで行っています。
なので、自分は1行目(アノード)1列目(カソード)のLEDを表示させるために1行目
(PNPトランジスタ)に0を、1列目(NPNトランジスタ)に1を出力しているのですが点灯してくれません。
アノード側のPNPトランジスタに接続しているのはポートAで、カソード側NPNトランジスタに接続しているのはポートBです。
以下にソースコードを示すので、間違いの指摘のことよろしくお願いします。
void wait(long wait) /* 時間を指定できる時間稼ぎ関数 */
{
while(wait--);
}
int main(void) /* 実際に表示をする関数 */
{
PADDR = 0xff; /* ポートA全ビット入力 */
PAPCR = 0xff;
PBDDR = 0xff; /* ポートB全ビット出力 */
int i;
for(;;) {
for(i = 0;i <= 8;i++) { /* 1列目の表示 */
PADR = 0x01 ;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 8;i >= 0;i--) { /* 2列目の表示 */
PADR = 0x01 << 1;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 0;i <= 8;i++) { /* 3列目の表示 */
PADR = 0x01 << 2;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 8;i >= 0;i--) { /* 4列目の表示 */
PADR = 0x01 << 3;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 0;i <= 8;i++) { /* 5列目の表示 */
PADR = 0x01 << 4;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 8;i >= 0;i--) { /* 6列目の表示 */
PADR = 0x01 << 5;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 0;i <= 8;i++) { /* 7列目の表示 */
PADR = 0x01 << 6;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
for(i = 8;i >= 0;i--) { /* 8列目の表示 */
PADR = 0x01 << 7;
PBDR = 0x01 << i;
wait(50000);
PBDR = 0;
}
PADR = 0;
wait(1000);
}
}
No.1ベストアンサー
- 回答日時:
マトリックスLEDには「アノードコモン」などという概念はありません。
アノードもカソードもどちらも共通配線が入っているのが「マトリックス」ですから。
(前回の質問からすると、「2色LEDなマトリックスで、2色のアノードがコモンになっている」のだと思いますが、
今回のプログラムでは、その接続がどうなっているか書かれていません。
8x8の2色LEDマトリックスなら、8bit×3ポート必要になりますが、今回のプログラムでは2ポートしか制御していないようですし)
それと、PADR と PBDR のどちらがアノードでどちらがカソードなのかもわかりません。
(コード的にも「1行目(PNPトランジスタ)に0を、」に該当するコードがありません。2つのポートのどちらも、1ビットだけ1に出力してますし。)
といった質問の不明点があるので、まともに答えようがないというか、
さらに、使用しているマイコンが何かわからないので、以下の文章は多分に推測が入っています。
> PADDR = 0xff; /* ポートA全ビット入力 */
入力とコメントに書かれていますが、それでいいのでしょうか?
あと、まずはダイナミック点灯ではなくスタティック点灯で、
LEDがハードウェア的に正しく接続されているかどうかを確認する方がいいかと。
もし、PADRがアノード側PNPトランジスタ、PBDRがカソード側NPNトランジスタに繋がっているのなら、
---
PADR = 0x00;
PBDR = 0xFF;
for (;;) ;
---
で、全てのLEDが点灯するはずです。(PADRがカソード、PBDRがアノードなら、PADR/PBDRを入れ替えてください。以下同じ)
これでLEDが点灯しないのなら、ダイナミック点灯以前の問題です。
ハードウェア回りか、ソフト側のポートの初期化回りか、どちらかの問題だと思いますが、
エミュレータでポートの入出力を確認するとか、テスタでポートの出力電圧を確認するとかして
まずLEDをスタティック点灯できるようにしてください。
これでLEDが点灯したなら、次にダイナミック点灯ですが、
まずは簡単な例で、市松模様を表示させてみると、
おそらく
---
for(;;) {
PADR=~(0x01 << 0); PBDR=0xaa; wait(50000);// 1列目に「○●○●○●○●」表示
PADR=~(0x01 << 1); PBDR=0x55; wait(50000);// 2列目に「●○●○●○●○」表示
PADR=~(0x01 << 2); PBDR=0xaa; wait(50000);// 3列目に「○●○●○●○●」表示
PADR=~(0x01 << 3); PBDR=0x55; wait(50000);// 4列目に「●○●○●○●○」表示
PADR=~(0x01 << 4); PBDR=0xaa; wait(50000);// 5列目に「○●○●○●○●」表示
PADR=~(0x01 << 5); PBDR=0x55; wait(50000);// 6列目に「●○●○●○●○」表示
PADR=~(0x01 << 6); PBDR=0xaa; wait(50000);// 7列目に「○●○●○●○●」表示
PADR=~(0x01 << 7); PBDR=0x55; wait(50000);// 8列目に「●○●○●○●○」表示
}
---
こんな感じになるはずです。基本的に「8回の操作」の繰り返しになります。
2重ループにして64回のポート出力があるというのは間違えています。
(PADRがカソード、PBDRがアノードなら、PADR/PBDRを入れ替えてください)
もうボロボロですね…
今度はもうちょっとじっくりと作っていきたいと思います。
あの後判明したのですが、PNPトランジスタが悪かったようです。
細かいご指摘ありがとうございます、これを参考に今後も頑張ります!
(またお世話になるかもしれません…)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 be sorry for doingとbe sorry to have doneの意味の違いについて 2 2023/06/09 13:57
- 英語 未来なのにwillを使わないことについて 3 2023/06/26 10:48
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- その他(プログラミング・Web制作) ポケコンの文字移動が上手くできない… 3 2022/04/25 01:34
- ブルーレイ・プレーヤー・レコーダー 東芝vardiaの難しそうな修理 5 2022/09/10 13:26
- 英語 英文の経済記事ですが、 4 2022/07/23 18:01
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オートライトではなく ライトの...
-
ルームランプ消えなくなってし...
-
ライト類がつかない
-
日産モコです。 このマークは、...
-
字光式ナンバー。フロントが点...
-
ZZ-R 1100 C2型(9...
-
パーフェクトクオン
-
車のフォグランプを青にしたい...
-
エアバック警告灯
-
アドレスV125(CF-4EA)FIランプ...
-
バイクのライトが点灯しない。
-
ABSの警告灯が点灯する・・・
-
フォード エクスプローラー EGR...
-
バイクでの質問! 前に回転灯の...
-
昼間でも尾灯をつけた方がいいの?
-
ライトが片方だけ消えてしまいます
-
24V仕様の灯を12Vに装着...
-
自転車のライトが「点灯」から...
-
緊急!たった今タイミングベル...
-
ホンダタクトAB07です。 エンジ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
字光式ナンバー。フロントが点...
-
オートライトではなく ライトの...
-
24V仕様の灯を12Vに装着...
-
日産モコです。 このマークは、...
-
ヘッドライトの右のハイビーム...
-
緊急!たった今タイミングベル...
-
自転車のライトが「点灯」から...
-
レッツ4に乗っています
-
ライト点灯でアイドリング低下する
-
ハイビームにすると、ロービー...
-
スズキのラパンのライトについ...
-
ウィンカーの光が極端によわい。
-
ヘッドライトのHIとLO同時...
-
車のESPランプが点灯
-
オフロードバイクのフロントゼ...
-
ウインカーポジションランプに...
-
HIDヘッドライトの片側が点灯し...
-
ドライブレコーダーの周波数とは
-
デイライトは何電源に繋ぐものなの
-
中華モンキー アクセル開ける...
おすすめ情報