- 締切済み
表示パターンを作りたいです。
7セグメント表示(1A~G・2A~G)とその他のマーク(T1・T2)を表示する液晶の表示パターンを作りたいのですが、ポートのアドレス内のビット配置が 1A・1B・1C・1D・T1・1E・1F・1G とセグメントとその他のマークが混在していたり、 2A・2B・2C・2D・ー・ー・ー・ー ー・ー・ー・ー・T2・2E・2F・2G と、さらに2つのアドレスにまたがって配置されていたりします。 各アドレスとポートはヘッダで union tag_IOPORT { unsigned char byPORT; struct { unsigned char B7:1; unsigned char B6:1; unsigned char B5:1; unsigned char B4:1; unsigned char B3:1; unsigned char B2:1; unsigned char B1:1; unsigned char B0:1; } BIT; }; #define IOPORT1_addr (*(volatile union tag_IOPORT *)0xffff) #define port1 IOPORT1_addr.byPORT #define 1A IOPORT1_addr.BIT.B7 #define 1B IOPORT1_addr.BIT.B6 #define 1C IOPORT1_addr.BIT.B5 #define 1D IOPORT1_addr.BIT.B4 #define T1 IOPORT1_addr.BIT.B3 #define 1E IOPORT1_addr.BIT.B2 #define 1F IOPORT1_addr.BIT.B1 #define 1G IOPORT1_addr.BIT.B0 という感じで#defineで宣言してあって、バイト単位でもビット単位でも操作出来るようにしてあります。 そこで、セグメントとマークを ・セグメント1 ・セグメント2 ・マーク などのそれぞれのグループごとにまとめて操作する方法はないでしょうか? イメージとしては disp_T[4][2]={{0,0},{0,1},{1,0},{1,1}} というような表示パターンの配列を作って代入すればマークの表示が出来るような感じにしたいのですが、代入する先を作れば良いかわかりません。 イメージ通りに作る事は可能なのか、どう作れば良いのか、他に良い方法など教えてください。 わかりにくい文章かもしれませんがお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
関数にするのが楽でしょう。 とりあえず書かれている例だけ考えれば、disp_Tの型がcharの2次元配列だと仮定して以下のような関数を作り、引数にdisp_T[0]~disp_T[3]を渡せば事足りるはずです。 void ctrl_Mark(char *pattern) { T1 = pattern[0]; T2 = pattern[1]; } 同様に7セグの方も void ctrl_7SEG1(char *pattern) { 1A = pattern[0]; // 以下1G = pattern[6];まで記述 } とでもしておけばいいでしょう。