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 |