PIC16F84電子遊戯(25)
最終更新日:2001年5月23日
マトリックス96(1ページ)へ (2ページ)

マトリックス96のフォント
前回のマトリックス64の文字フォントは8x8ドットでしたが、流れる電光掲示板を作るには大変不便なことがわかりました。流れる文字と文字の間に隙間がないと、大変読みづらくなります。そこで今回は新たに7x8ドットでデザインをし直しました。
また、LEDがモジュールになったため、LEDの方向に対してデータのビット位置が変わったのでそれも考慮に入れています。
1ドット分が次の文字との隙間になりますので、1文字自体の大きさは8x8です。
マトリックス96の流れる電光掲示板
今回のマトリックスは12x8ドットですので、文字を表示させると、1文字と半分が表示されることになります。
この文字を一列づつ左側にスクロールして、一番右側の列に新たなデータを1列表示することを連続して行うと、流れる電光掲示板のように見えることになります。
前回のマトリックス64では1文字づつ表示していたので、文字列から1文字づつ読み出せば良かったのですが、今回は文字がスクロールするので、一度に数文字読み出しておくことが必要になります。
上の図を見て下さい。左側の図が最初に文字を表示する状態です。1文字半の表示が必要ですので、少なくとも文字列の2文字目まで読み出しておくことが必要です。
さてそれがスクロールしていくとどうなるのでしょうか。右側の図は2文字目が丁度LEDの真中にきたときの状態です。1文字目が残っているのに3文字目が現れてきます。
ということで、最初に3文字目まで読み出しておけば、1文字目が消えるまで、新しい文字を読み出さなくても済みます。
ということで、今回は表示させたい文字列からまず3文字読み出しておく部分を考えます。
moji1 moji2 moji3
読み出した1文字目 読み出した2文字目 読み出した3文字目
count_sub2 taihi2
文字列ポインタ 退避用
文字列ポインタ(count_sub2)はLEDの一番左側に表示される文字列のポインタです。
実際にはこのポインタの指す文字から3文字分を読み出してmoji1,moji2,moji3に書き込みます。退避用(taihi2)はWレジスタを一時記憶するのに使用します。
マトリックス96の文字列からの読み出し
moji_set_sub20	movwf	taihi2
		call	moji_set0
		movwf	moji1
		movf	taihi2,0
		addlw	1
		call	moji_set0
		movwf	moji2
		movf	taihi2,0
		addlw	2
		call	moji_set0
		movwf	moji3
		return
このルーチンに来る前に予め文字列ポインタ(count_sub2)の値をWレジスタに入れておき、そこから3文字読み出します。
読み出す部分(上記ではmoji_set0)は前回のマトリックス64のときと全く同じです。
Wレジスタを1カウントづつ足しながら3回読み出しているだけですね。
マトリックス96のスクロール
最初に文字を表示するときは、1文字目の8列分と2文字目の4列分の合計12列分のデータを表示RAM(led_data0からled_data11)に書き込みます。
一方タイマー割り込みは0.1秒ごとにかかるようにしてあるので、この割り込みごとに1列づつ左にスクロールして、新たに一番右側の列に新しいデータを書き込みます。
これを8回繰り返せば1文字分が左に消えるので、文字列ポインタ(count_sub2)をひとつインクリメントして新たなデータを書き込みます。
そこで必要になるのが今どの列を表示しているかのポインタです。
retu_pointa
列ポインタ
この列ポインタ(retu_pointa)の内容によって、新たに右側に表示するデータが何文字目の何列目かがわかります。列ポインタ(retu_pointa)はPICの処理がしやすいようにビットシフトさせながら使用します。
一度表示したデータは11列分は左にスクロールさせて、新たに1列分だけ書き込みます。
retu_pointaのビット位置 新たに書き込むデータの位置
0 1文字目の1〜8列目、2文字目の1〜4列目
1 2文字目の5列目
2 2文字目の6列目
3 2文字目の7列目
4 2文字目の8列目
5 3文字目の1列目
6 3文字目の2列目
7 3文字目の3列目
説明がわかりにくい方は、あとでソースをしげしげと眺めて下さい。
マトリックス96の文字列の定義
今回も文字列はある範囲内で皆さんの自由に定義していただいてかまいません。
そのときひとつだけ注意していただきたいことがあります。
文字列の最後には文字列の最後を認識する00Hを書き込む必要があります。
その00Hの前には必ず、最初の2文字を繰り返して定義して下さい。
moji_set0		movwf	taihi
		movlw	low(moji00)
		addwf	taihi,1
		movlw	high(moji00)
		movwf	PCLATH
		addcf	PCLATH,1
		movf	taihi,0
		movwf	PCL
moji00		retlw	moji_I
		retlw	moji_love
		retlw	moji_N
		retlw	moji_E
		retlw	moji_W
		retlw	moji_Y
		retlw	moji_O
		retlw	moji_R
		retlw	moji_K
		retlw	moji_mk
		retlw	moji_sp
		retlw	moji_I
		retlw	moji_love
		retlw	00h
最初の2文字まで繰り返すと、スクロールしたときスムーズに表示されます。
理由は皆さんで考えましょう。
マトリックス96の文字列の切り換え
今回も4種類の文字列をSW1で切り換えます。前回のマトリックス64のときと全く同じですので、そちらを参照して下さい。
この切り換えに対応するために、文字列読み出しやスクロールの部分が少し複雑になっています。(でも難しくはありませんね。)
マトリックス96の全ソースリスト公開
今回のマトリックス96のソースです。皆さんで自由に改造してみて下さい。
長くなるので、別ページにしました。
ソースリストはこちらへ
マトリックス96の全HEXコード
HEXコードです。テキストエディタにコピー&ペーストしてファイルすればPICに書き込めるデータに出来ます。
:020000001428C2
:080008008C0003088D000B11B0
:1000100063308100950B0F2805309500DE200D0818
:1000200083008C0E0C0E0900D22300308500FF30B7
:10003000860001309400D9201208FA206B20D923C1
:1000400005309500051A2E28CD23051A2E28F220FA
:10005000D9201208FA206B20051E2C2800308500BC
:1000600020088600CD230130850021088600CD239D
:100070000230850022088600CD2303308500230846
:100080008600CD230430850024088600CD2305306A
:10009000850025088600CD230630850026088600C9
:1000A000CD230730850027088600CD230830850042
:1000B00028088600CD230930850029088600CD2335
:1000C0000A3085002A088600CD230B3085002B08D6
:1000D0008600CD23222811187A2891189F281119FB
:1000E000A4289119A928111AAE28911AB328111B16
:1000F000B828BD281808A521A0001808EA21A100E9
:1001000018082F22A20018087422A3001808B92288
:10011000A4001808FE22A50018084323A60018080A
:100120008823A7001908A521A8001908EA21A90019
:1001300019082F22AA0019087422AB000800C22057
:100140001908B922AB000800C2201908FE22AB0032
:100150000800C22019084323AB000800C220190878
:100160008823AB000800C2201A08A521AB000800B4
:10017000C2201A08EA21AB000800C2201A082F2268
:10018000AB0008002108A0002208A1002308A2005B
:100190002408A3002508A4002608A5002708A60017
:1001A0002808A7002908A8002A08A9002B08AA00E7
:1001B000080000309200013091000800911FEE28E5
:1001C00001309100920A1208FA201A08031DEC2847
:1001D000D9201208FA20F0286B200800910D111088
:1001E0006B200800941DF728013094000800940D3E
:1001F000141008001418012994180D29141919292C
:1002000025299B00312198001B08013E31219900CE
:100210001B08023E31219A0008009B0048219800EB
:100220001B08013E482199001B08023E48219A0004
:1002300008009B00692198001B08013E6921990074
:100240001B08023E69219A0008009B008321980048
:100250001B08013E832199001B08023E83219A005E
:10026000080093003A30930701308A0003188A0A85
:100270001308820009341D340E3405341734193440
:100280000F3412340B341C341B3409341D34003445
:1002900093005130930701308A0003188A0A13082B
:1002A00082000E340F340E340334083401340E341B
:1002B00013340F34063414341B341034093403342B
:1002C0001E3423340634253421341B340E340F34C9
:1002D000003493007230930701308A0003188A0AB1
:1002E000130882001E341F34203421342234233476
:1002F00024342534263433343434353436341B3402
:100300001E341F34003493008C30930701308A0070
:1003100003188A0A13088200143405340D3410348B
:1003200028341F342134393424343B341B3408340A
:1003300015340D3409342834233422343934253427
:100340003A341B341434053400349300AE30930730
:1003500001308A0003188A0A13088200FF34C0346F
:100360000034813400340034003481340034FF34EC
:10037000F9340034003400340034813400348134E2
:1003800000349D347F3401341F3401343C340F3445
:100390007C34FF34FC348734FF349C349934E334A8
:1003A000093481341F3499348D348134FF34E73477
:1003B000E734E734BD34E7349934FF349F34E7340D
:1003C0003C34EF34C734F734EF34E7349934FF3436
:1003D0001C341F349300F330930701308A00031854
:1003E0008A0A13088200FF34803400340034003459
:1003F00000340034003400347E34F83400340034E7
:100400000034003400340034003400340C347F34C1
:10041000003407340034183407347834FF34FC34A3
:100420000334BE34183418348334083400341F3491
:10043000003404340034FF34CF34E734E7349934E3
:10044000E7349934F7341F34C3343C34CF34C734E1
:10045000F334C734C3340034F93458345F34930070
:100460003830930702308A0003188A0A1308820082
:10047000FF34333466343C347E34663467343C3481
:10048000E7340034FC34C3347E349F34C7343C3406
:1004900067347E34673406340034FC34C134F834B5
:1004A0008134E0347034FF34E33401340034783480
:1004B0007E343B346E3466347F34663466347E3446
:1004C0009934C7340034E734C33424349934C33402
:1004D0007F34813418348134C73481348334813497
:1004E0000034F0341134813493007D3093070230AE
:1004F0008A0003188A0A13088200FF3433346634F2
:100500007E347E34663467346634E73400347E34B7
:100510008134FE34C734E3347E346734723461345A
:1005200066340034FE34F034C134C334E034423431
:10053000FF348334803400347234663400346E34D3
:10054000663470346634663466349934E334003487
:10055000E734003424349934C334723499349934F0
:10056000013401348034013400349934F034C73418
:1005700000349300C230930702308A0003188A0ABD
:1005800013088200FF34333466347E343C346634DE
:1005900067346634E7347E347C341834FE349F3458
:1005A000F1343C3467347834603460347F34FC3464
:1005B000C134F834813407340E34FF340734013445
:1005C000FE346634663400346C3466346034663429
:1005D00066347E34FF34F334E734E734C334E7342D
:1005E0009934E7346234183481348134833481346B
:1005F000C73481340034F93488343C3493000730F4
:10060000930703308A0003188A0A13088200FF3414
:1006100080340034183400346634673420340034B5
:10062000FF3400343C34FE340034003400340734EA
:100630000034043430347F34003407340034183448
:100640000F341E34FF340F340334FF3406340034C7
:10065000FB34603420340F34003400340034FF3471
:10066000F334E734E7349934E7349934FF340F3402
:100670003C34C334CF34C734F334C734C3340034C8
:10068000FF341A34183493004C30930703308A0037
:1006900003188A0A13088200FF34C034993499344D
:1006A00081347E347F3431340034FF3401347E347D
:1006B000FE340034003481348F3481348E34B934C4
:1006C000FF3401341F3401343C34FF343E34FF34F2
:1006D0001F348734FF348E349934FB347134B13491
:1006E0001F34993481348134FF34E734FF34E734E4
:1006F000BD34FF349934FF349F343C34E734EF3455
:10070000EF34F734C734E7349934FF34383499344C
:1007100093009130930703308A0003188A0A130864
:100720008200FF34FF34FF34FF34FF34FF34FF34E2
:10073000FF34FF34FF34FF34FF34FF34FF34FF3421
:10074000FF34FF34FF34FF34FF34FF34FF34FF3411
:10075000FF34FF34FF34FF34FF34FF34FF34FF3401
:10076000FF34FF34FF34FF34FF34FF34FF34FF34F1
:10077000FF34FF34FF34FF34FF34FF34FF34FF34E1
:10078000FF34FF34FF34FF34FF34FF34FF34FF34D1
:10079000FF34FF34FF34FF34FF34FF309000900B00
:1007A000CF2B0800831685010516000086018312F1
:1007B00008008316863081008312633081008B1617
:0407C0008B1708008B
:02400E00F13F80
:00000001FF
(matrix5.hex)
マトリックス96の完成
どうでしょうか、文字が流れていくのが綺麗ですね。近づいて見るより少し離して見るほうが良く見えるようです。
この装置こそ車の後ろから見せるようのすれば、ヒット間違い無しですね。
すいません、動いている雄姿を見せることが出来なくて。
デジカメで写真とってもうまく撮れません。さあ、皆さんもこの感動を体験するために、早速製作に取り掛かりましょう。
いかがでしたか、これからも益々面白くなる「PIC16F84電子遊戯」をよろしくです。

不明点などあればメールお願いいたします。nonchansoft@nifty.com