|
本PICマイコンには、あらかじめプログラムが書き込まれているので、PICマイコンをいじる必要はありませんが、PICマイコンのプログラムを拡張される方は、次の事項を参考にして下さい。
マイコン開発ソフトは、「マイクロチップ社のMPLAB IDE v8.10(無料)」を利用しています。
尚、プロジェクトファイル名は、ファイル名だけでなくそのファイルを置くパスも、すべて半角英数字にしないと、動きません。
日本語のフォルダーに入れ、ファイル名を半角英数字では動きませんので、注意して下さいね。
(例 C:\モータ\motor\motor.mcp は、「モータ」が日本語のフォルダーなので動きません。)
delay関数を利用していますので、次の作業をしています。(パソコンのシステムは、Cフォルダーにあることとします。)
C:\Program Files\HI-TECH Software\PICC\LITE\9.60\samples\delayのdelay.cとdelay.hを、プロジェクトファイルと同じフォルダーにコピーする。
そしてコピーしたdelay.hの #define XTAL_FREQ 4MHZ の4を10に変更。
ちなみに、使用したファイルをダウンロード(右クリックして、対象をファイルに保存)できるようにしておきました。
ダウンロード出来るファイルは、4を10に変更してあります。
delay.cファイルのダウンロードはこちらです。(delay.c)
delay.hファイルのダウンロードはこちらです。(delay.h)
PIC16F88マイコンには、次のC言語プログラムが書き込まれていますので、そのままコピーして利用することが出来ますが、マイコンへ書き込む機材によって、コンフィグの書き方が違うので、そのままソースをコピーして書き込んでも、上手く動作しないかもしれません。
その際は、HEXファイルをダウンロード(右クリックして、対象をファイルに保存)して、書き込んでみて下さい。
HEXファイルのダウンロードはこちらです。(picgame03.hex)
PIC16F88は、CONFIGが複雑です。
お持ちの開発ソフトによって、調整して下さい。
私のもっている開発ソフトはバージョンが古いので、次のようになっています。
__CONFIG(HS & WDTDIS & PWRTDIS & LVPDIS & BOREN & DEBUGDIS & UNPROTECT & MCLREN);
バージョンが新しい場合は、同じメーカーの、MPLABを使っていても、記載方法が違いますので、注意して下さい。
PIC16F88は、端子をアナログとデジタルともに使えます。
最初は、アナログに設定されているので、プログラムの最初に、
ANSEL = 0b00000000; //AD変換0ピンから6ピンはデジタルで使用
のように記載して、デジタル出力にしておいて下さい。
センスイカンの場所(アドレス)は、乱数で決めています。
C言語で、乱数字を得る方法は、#include <stdlib.h>と
#include <stdio.h>を使って、現在の時刻(TIME)を乱数の種として使うやり方が一般的です。
しかし、PICマイコンで現在の時刻を得ようとしても、どうしても上手く得る事ができなかったため、オープニングムービー後(センスイカン ハカイセヨを表示後)、ボタン待ちにして、その間にC言語でループさせて、ボタンを押した際に、そのループ回数を種として利用しました。
プログラムでは、次の部分となります。
while(RB2==0){
seed = seed + 1;
srand(seed);
ransuuzi7 = rand()%2;
ransuuzi4 = rand()%2;
ransuuzi3 = rand()%2;
ransuuzi2 = rand()%2;
ransuuzi1 = rand()%2;
}
また場所(アドレス)は二進法のため、乱数を2で割って、その余りを使いました。
例 0と1を得るための計算方法
1÷2=0 余り1
2÷2=1 余り0
3÷2=1 余り1
4÷2=2 余り0
5÷2=2 余り1
6÷2=3 余り0
この余りが0と1なので、これを使っています。
そのため、同じタイミングでボタンを押されると、同じ場所にセンスイカンがいることになります。(人間技では不可能ですが。)
DDRAMのアドレスカウンタの読み込みは、PICを読み込みモード TRISB = 0b11111111; にし、Wはハイレベルでなければ読み込めません。
読み込んだ後は、わすれずに出力 TRISB = 0b00000000; に戻し、Wもローレベルにして下さい。
このタイミングが悪いと、思うようにプログラムが動きませんので注意が必要です。
特に4ビットモードの場合は、1回目と2回目の信号の間に、この作業はいりませんの、注意して下さい。
2回目の信号を送った後に、戻せば十分です。
液晶からの読み込みは、即座に読み込める訳ではないようなので、Flag1を使って、完全に読み込めるまで待っています。
プログラムでは、次の部分です。
/* DDRAMのアドレスカウンタ 読み込みのための関数。 */
void yomikomi(void){
RS = 0 , W = 1 ,E = 1;
TRISB = 0b11111111; /* 入力 */
DelayUs(255);
do{DelayUs(255);
if(RB7==1){Flag1=1;}else{Flag1=0;
if(DB6 == 0){k7 = 0;}else{k7 = 1;}
if(DB5 == 0){k6 = 0;}else{k6 = 1;}
if(DB4 == 0){k5 = 0;}else{k5 = 1;}
DelayUs(255);
E = 0;
DelayUs(255);
E = 1;
DelayUs(255);
if(DB7 == 0){k4 = 0;}else{k4 = 1;}
if(DB6 == 0){k3 = 0;}else{k3 = 1;}
if(DB5 == 0){k2 = 0;}else{k2 = 1;}
if(DB4 == 0){k1 = 0;}else{k1 = 1;}
DelayUs(255);
E = 0;
DelayUs(255);
}
}while(Flag1 != 0);
TRISB = 0b00000000; /* 出力 */
W=0;
}/* 関数yomikomiの終わり。 */
尚、本プログラムでは、DDRAMと読み込み定数は、次のとおりです。
例 DDRAMアドレス 1000011
k7 k6 k5 k4 k3 k2 k1 の順番に設定してあるので、
k7=1 k6=0 k5=0 k4=0 k3=0 k2=1 k1=1
C言語ソースは、この下からコピーしてご利用下さい。
//PIC16F88
#include <pic.h>
#include "delay.h"
#include <stdlib.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTDIS & LVPDIS & BOREN & DEBUGDIS & UNPROTECT & MCLREN);
#define RS RA1
#define E RA0
#define DB4 RB4
#define DB5 RB5
#define DB6 RB6
#define DB7 RB7
#define W RA2
int c;
int k1;
int k2;
int k3;
int k4;
int k5;
int k6;
int k7;
int Flag1;
int ransuuzi1;
int ransuuzi2;
int ransuuzi3;
int ransuuzi4;
int ransuuzi7;
int seed;
int tama;
/* DDRAMのアドレスカウンタ 読み込みのための関数。 */
void yomikomi(void){
RS = 0 , W = 1 ,E = 1;
TRISB = 0b11111111; /* 入力 */
DelayUs(255);
do{DelayUs(255);
if(RB7==1){Flag1=1;}else{Flag1=0;
if(DB6 == 0){k7 = 0;}else{k7 = 1;}
if(DB5 == 0){k6 = 0;}else{k6 = 1;}
if(DB4 == 0){k5 = 0;}else{k5 = 1;}
DelayUs(255);
E = 0;
DelayUs(255);
E = 1;
DelayUs(255);
if(DB7 == 0){k4 = 0;}else{k4 = 1;}
if(DB6 == 0){k3 = 0;}else{k3 = 1;}
if(DB5 == 0){k2 = 0;}else{k2 = 1;}
if(DB4 == 0){k1 = 0;}else{k1 = 1;}
DelayUs(255);
E = 0;
DelayUs(255);
}
}while(Flag1 != 0);
TRISB = 0b00000000; /* 出力 */
W=0;
}/* 関数yomikomiの終わり。 */
/* ------------------ここからLCDの初期設定。------------------------- */
void main(void){
ANSEL = 0b00000000; //AD変換0ピンから6ピンはデジタルで使用
PORTA = 0; /* ポートAは全てロー */
TRISA = 0b00000000; /* 0は出力 1は入力 */
PORTB = 0; /* ポートBは全てロー */
TRISB = 0b00000000; /* 0は出力 1は入力 */
/* 15ms以上待つ */
DelayMs(100);
/* ファンクションセット */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 1 ;
E = 1;
DelayMs(1);
E = 0;
/* 4.1ms以上待つ */
DelayMs(10);
/* ファンクションセット */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
/* 100μs以上待つ */
DelayMs(1);
/* インターフェースデータ長8ビット */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* インターフェースデータ長4ビット */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* インターフェースデータ長4ビット、2行、文字形式を5×7ドットマトリクスに設定。ここから4ビット動作。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 表示オフ */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 表示オン */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* エントリーモード カーソル右に移動。表示全体はシフトしない。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 初期設定後 */
/* 表示をONし、カーソルをOFFさせます。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* -------------------オープニング画面-------------------- */
/* 1行目中央にDDRAMアドレス設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RB3 = 1;DelayMs(15);RB3 = 0;RB3 = 1;DelayMs(15);RB3 = 0;
DelayMs(30);
RB3 = 1;DelayMs(15);RB3 = 0;RB3 = 1;DelayMs(15);RB3 = 0;
while(RB2==0){
seed = seed + 1;
srand(seed);
ransuuzi7 = rand()%2;
ransuuzi4 = rand()%2;
ransuuzi3 = rand()%2;
ransuuzi2 = rand()%2;
ransuuzi1 = rand()%2;
}
DelayMs(125);
PORTB = 0; /* ポートBは全てロー */
DelayMs(1);
/* 表示クリア。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 1行目の先頭(DDRAMのアドレスは0)にアドレスを設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
//四角が流れるオープニング
int a;
for(a=0;a<2;a++){
int b;
for(b=0;b<16;b++){
/* DDRAM書き込み文字例「四角」を書き込みます。 */
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 音を出す。 */
RB3 = 1;
DelayMs(1);
RB3 = 0;
DelayMs(1);
}
/* 2行目の先頭(DDRAMのアドレスは16進法で40,2進法で1000000)にアドレスを設定。 */
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
}
/* 表示クリア。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* -------------------ゲームスタート-------------------- */
/* 表示をONし、カーソルをON、ブリンクON。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
tama = 0;
while(1){
yomikomi();
if(RB2==1){
/* カーソルを動かす。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
for(a=0;a<1;a++){
RB3 = 1;DelayMs(3);RB3 = 0;RB3 = 1;DelayMs(3);RB3 = 0;DelayMs(3);
}
PORTB = 0; /* ポートBは全てロー */
DelayMs(30);
yomikomi();
if(k7==0&&k6==0&&k5==1&&k4==0&&k3==0&&k2==0&&k1==0){
/* 2行目の先頭アドレスに設定。 */
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
}
if(k7==1&&k6==0&&k5==1&&k4==0&&k3==0&&k2==0&&k1==0){
/* 1行目の先頭アドレスに設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
}
}
//--------------潜水艦メイチュウ判定-----------------------
if(RB1==1){
if(k7==ransuuzi7 && k6==0 && k5==0 && k4==ransuuzi4 && k3==ransuuzi3 && k2==ransuuzi2 && k1==ransuuzi1){
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(10);
//メイチュウ音
for(a=0;a<12;a++){
RB3 = 1;DelayMs(30);RB3 = 0;RB3 = 1;DelayMs(30);RB3 = 0;
DelayMs(30);
/* 表示クリア。 */
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
/* 1行目中央にDDRAMアドレス設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 1;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
//GOODエンディング-------------------------
if(ransuuzi1==1){
/* 1行目中央にDDRAMアドレス設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
//ゲキハ
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
DelayMs(150);
/* 2行目中央にDDRAMアドレス設定。 */
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
//ニンムカンリョ
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
for(a=0;a<6;a++){
RB3 = 1;DelayMs(15);RB3 = 0;RB3 = 1;DelayMs(15);RB3 = 0;DelayMs(15);
}
DelayMs(255);
DelayMs(255);
while(RB2==0){}
PORTB = 0; /* ポートBは全てロー */
tama = 0;
return;
}
//メイチュウ
if(tama>=0 && tama<=15){
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 0 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 0 , DB5 = 1 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
DelayMs(150);
tama = 0;
return;
}
}
}else{
tama = tama +1;
RS = 1 , DB7 = 1 , DB6 = 0 , DB5 = 1 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 1;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
yomikomi();
for(a=0;a<3;a++){
RB3 = 1;DelayMs(8);RB3 = 0;RB3 = 1;DelayMs(8);RB3 = 0;DelayMs(8);
}
PORTB = 0; /* ポートBは全てロー */
DelayMs(3);
//--------------GAMEOVERの画面へ-----------------------
if(tama==15){
for(a=0;a<50;a++){
RB3 = 1;DelayMs(1);RB3 = 0;RB3 = 1;DelayMs(1);RB3 = 0;
DelayMs(1);
}
RS = 0 , DB7 = 1 , DB6=ransuuzi7 , DB5=0 , DB4=0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7=ransuuzi4 , DB6=ransuuzi3 , DB5=ransuuzi2 , DB4=ransuuzi1;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 1 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 1 , DB7 = 0 , DB6 = 1 , DB5 = 0 , DB4 = 1 , E = 1;
DelayMs(1) , E = 0 , DelayMs(1);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayMs(1);
E = 0;
DelayMs(1);
while(RB2==0){}
DelayMs(125);
PORTB = 0; /* ポートBは全てロー */
tama = 0;
return;
};
if(k7==0&&k6==0&&k5==1&&k4==0&&k3==0&&k2==0&&k1==0){
/* 2行目の先頭アドレスに設定。 */
RS = 0 , DB7 = 1 , DB6 = 1 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
}
if(k7==1&&k6==0&&k5==1&&k4==0&&k3==0&&k2==0&&k1==0){
/* 1行目の先頭アドレスに設定。 */
RS = 0 , DB7 = 1 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
RS = 0 , DB7 = 0 , DB6 = 0 , DB5 = 0 , DB4 = 0;
E = 1;
DelayUs(255);
E = 0;
DelayUs(255);
}
}
}
};
}/* mainの終わり。 */
|