#include #include "composite32-high4.h" #include "lib_composite32-high.h" //外付けクリスタル with PLL (15倍) #pragma config PMDL1WAY = OFF, IOL1WAY = OFF #pragma config FPLLIDIV = DIV_1, FPLLMUL = MUL_15, FPLLODIV = DIV_1 #pragma config FNOSC = PRIPLL, FSOSCEN = OFF, POSCMOD = XT, OSCIOFNC = OFF #pragma config FPBDIV = DIV_1, FWDTEN = OFF, JTAGEN = OFF, ICESEL = ICS_PGx1 const unsigned char bmp[14*13]={ 0,0,0,0,0,2,2,2,2,0,0,0,0,0, 0,0,0,2,2,2,2,2,2,2,2,0,0,0, 0,0,2,2,2,2,2,2,2,2,2,2,0,0, 0,2,2,2,7,7,2,2,2,2,7,7,2,0, 0,2,2,7,7,7,7,2,2,7,7,7,7,0, 0,2,2,7,7,8,8,2,2,7,7,8,8,0, 2,2,2,7,7,8,8,2,2,7,7,8,8,2, 2,2,2,2,7,7,2,2,2,2,7,7,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,0,2,2,2,0,0,2,2,2,0,2,2, 2,0,0,0,2,2,0,0,2,2,0,0,0,2 }; unsigned short keystatus=0,keystatus2,oldkey; //最新のボタン状態と前回のボタン状態 void keycheck(void){ //ボタン状態読み取り //keystatus :現在押されているボタンに対応するビットを1にする //keystatus2:前回押されていなくて、今回押されたボタンに対応するビットを1にする oldkey=keystatus; keystatus=~KEYPORT & (KEYUP | KEYDOWN | KEYLEFT | KEYRIGHT | KEYSTART | KEYFIRE); keystatus2=keystatus & ~oldkey; //ボタンから手を離したかチェック } void main(void){ int x,y; //ポートの初期設定 TRISA = 0x0010; // RA4は入力 CNPUA = 0x0010; // RA4をプルアップ ANSELA = 0x0000; // 全てデジタル TRISB = KEYSTART | KEYFIRE | KEYUP | KEYDOWN | KEYLEFT | KEYRIGHT;// ボタン接続ポート入力設定 CNPUBSET=KEYSTART | KEYFIRE | KEYUP | KEYDOWN | KEYLEFT | KEYRIGHT;// プルアップ設定 ANSELB = 0x0000; // 全てデジタル LATACLR=2;// RA1=0(ボタンモード) init_composite(); // ビデオ出力システムの初期化 x=100; //横位置 y=100; //縦位置 while(1){ //キャラクター表示 putbmpmn(x,y,14,13,bmp); //60分の1秒ウェイト drawcount=0; while(drawcount==0) asm("wait"); //キャラクター消去 clrbmpmn(x,y,14,13); //ボタン入力により移動 keycheck(); if(keystatus & KEYUP ) y--; //上ボタン押された if(keystatus & KEYDOWN ) y++; //下ボタン押された if(keystatus & KEYLEFT ) x--; //左ボタン押された if(keystatus & KEYRIGHT) x++; //右ボタン押された //端チェック if(x>200) x=200; else if(x<0) x=0; if(y>200) y=200; else if(y<0) y=0; } }