PIC16F84電子遊戯(49)
最終更新日:2001年11月25日
掛け算九九マシーン(1ページ)へ (2ページ) (3ページ)へ (4ページ)へ

掛け算九九マシーンの基本仕様
では「掛け算九九マシーン」の基本仕様を説明します。
1)数字はテンキーで入力します。九九の暗記に連動するために、「X」、「=」の入力は行ないません。
2)「C」(クリア)キーでどの位置で数字を入力していても初期に戻ることが出来ます。
3)答えの部分は2桁のみ左シフトするので、入力を間違っても入れ直すことが出来ます。
答えの部分は上の桁が「ゼロサプレス」機能を有しています。
4)答えが正解かどうかは「R」(リターン)キーで確認することが出来ます。
正解時は答えに「◎◎」と表示、間違っているときは「XX」と表示します。
答えの確認は答えが入力済みのときのみ可能とします。
5)答えの確認後、次に数字を入力をすれば式の最初の入力に自動的になります。
以上が「掛け算九九マシーン」の基本仕様です。
掛け算九九マシーンのポート割付
ポート名 入出力 機能
RA0 OUT 74HC154駆動(A)
RA1 OUT 74HC154駆動(B)
RA2 OUT 74HC154駆動(C)
RA3 OUT 74HC154駆動(D)
RA4 OUT 74HC154制御
RB0 OUT シフトレジスタクロック
RB1 OUT シフトレジスタデータ
RB2 OUT LEDデータラッチ
RB3 OUT キースキャン:74HC138駆動(A)
RB4 OUT キースキャン:74HC138駆動(B)
RB5 OUT キースキャン:74HC138駆動(C)
RB6 IN キー入力(1)
RB7 IN キー入力(2)
掛け算九九マシーンのLED画面表示
今回のLED画面表示は今までと違って少々厄介です。
いつも固定の表示をしている部分と、キーが入力されたことに数字が表示する部分が混在するからです。
次のようにLED画面の数字を表示する部分にRAMを割り付けます。
LED表示はここのデータと固定のデータを合成(?)して行います。
メインルーチンではここのデータを読み出してLED表示するのに専念します。
数字を点灯したり、消したりするのはこのRAMを書き換えることで行います。
丁度パソコンのVRAMのような役目をしています。
1列目の表示を例に動作を簡単に説明します。
1列目を指定するデータを74HC154に出力
シフトレジスタのストローブをHにする
keta10のデータを出力
0xffを出力(表示がない部分のデータ)
シフトレジスタのストローブをLにしてデータラッチ
74HC154をアクティブにする(1列目LED点灯)
時間待ち
74HC154をノンアクティブにする(1列目LED消灯)
上記の作業を列と表示元のデータを変えながら16列目まで表示します。
ソース自体は固定データや参照RAMが複雑に変化するため、ベタ書きにしています。
掛け算九九マシーンの数字入力
キーボードから入力した数値は一旦次の図に示すRAMに入ります。
その時、どこの場所に入れるかはポインタが管理しています。
input_p
入力された数字を入れる位置を示すポインタ
ポインタの位置は上図のマスの右下に示しています。
ポインタは(0)から(4)まで変化します。その数値によって入力された数字を分岐処理しています。
ここに数値が書かれるごとに、次に説明するデータ変換ルーチンで数字を表示データに変換処理しています。
掛け算九九マシーンの数字から表示データへの変換
ひとつの数字を表示データにするためには5バイト分のデータを読み出して、指定のRAMに順に設定しなければなりません。ここではFSRレジスタとINDFレジスタを使用してデータを設定します。まずその前にデータを読み出すためのオフセットポインタを定義しましょう。
d_offset
表示データ読み出すためのオフセットポインタ
suji_k1のデータを例に簡単に説明します。
d_offsetを初期化する
Wレジスタにketa10のRAMアドレスを入れる
Wレジスタにd_offset分を加算する
Wレジスタの値をFSRレジスタに入れる
suji_k1の値をWレジスタに入れる
d_offsetを加味した表示データをWレジスタに読み出す
FSRレジスタで指定したRAMにWレジスタの値を入れる
d_offsetが5になるまで上記を繰り返す
FSRレジスタとd_offsetでRAMのアドレスを指定しながらd_offsetを「0」から「4」まで変化させてデータを読み出し、RAMに書き込みます。
この一連の作業をsuji_k4まで繰り返します。
掛け算九九マシーンの表示データ
データは8バイトごとに格納しています。表示データには5バイトしか使いませんが、データの格納アドレスを計算し易いように3バイトはダミーのデータにしています。
読み出し方の基本は今までの製作で使っている方法と同じですが d_offset で読み出す位置を変えています。
「0Ah」以上は特別な表示に割り当てています。
数字フォントは基本的な5x7ドットフォントにしていますが皆さんで見易いように自由に改造してみて下さい。一応私の作ったデータ作成ソフトを入れておきます。
フォントデータ作成ソフト(エクセル)のダウンロード:99_gamen.lzh(11kB)
データ値 表示
00h 0
01h 1
02h 2
03h 3
04h 4
05h 5
06h 6
07h 7
08h 8
09h 9
0Ah mark
0Bh space
0Ch OK
0Dh NG
ということで、今回はここまでとしましょう。次回はキースキャンを中心に説明予定です。
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

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

Copyright(c)2000-2001 nonchansoft