#include<reg51.h> #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; u8 code gwx[27]={1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7}; u8 code gwy[27]={6,5,5,6,7,4,3,4,5,6,7,3,5,6,2,4,3,4,5,6,7,5,6,7,4,5,6}; u8 code gx[47]={9,9,9,9,9,10,11,13,13,13,13,13,14,14,15,15,15,15,15,17,17,17,17,18,18,18,19,19,19,19,21,21,21,21,21,22,22,22,23,23,23}; u8 code gy[47]={7,6,5,4,3, 3, 3, 7, 6, 5, 4, 3, 7, 3, 7, 6, 5, 4, 3, 7, 6, 5, 3, 7, 5, 3, 7, 5, 4, 3, 7, 6, 5, 4, 3, 7, 5, 3, 7 ,5, 3}; u8 x[20];u8 y[20];u8 length;u8 direction; u8 tt1,tt2,tt3,tt4,dianx,diany; u8 p1,p0,sb,j; u8 panduan; u8 dix[20],diy[20]; sbit k1=P3^1; sbit k2=P3^0; sbit k3=P3^2; sbit k4=P3^3; sbit yiwei=P3^6; sbit cunchu=P3^5; sbit chuanshu=P3^4; void delay(u16 t) { while(t--); } void chuanxing(u8 by) { u8 i; yiwei=0; cunchu=0; for(i=0;i<8;i++) { chuanshu=by>>7; by=by<<1; yiwei=1; _nop_(); _nop_(); yiwei=0; } cunchu=1; _nop_(); _nop_(); cunchu=0; } void peizhi() { TMOD|=0x01; TH0=0xd8; TL0=0xf0; ET0=1; EA=1; } void zouwei() { u8 i; for(i=0;i<length;i++) { dix[i]=x[i]; diy[i]=y[i]; } if(direction==1) x[0]=x[0]-1; if(direction==2) y[0]=y[0]+1; if(direction==3) x[0]=x[0]+1; if(direction==4) y[0]=y[0]-1; } void gen() { u8 i; for(i=1;i<length;i++) { x[i]=dix[i-1]; y[i]=diy[i-1]; } } void date() { u8 i; for(i=0;i<length;i++) { switch(x[i]) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; } switch(y[i]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; } P0=p0; chuanxing(p1); delay(25); chuanxing(0x00); switch(dianx) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; } switch(diany) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; } P0=p0; chuanxing(p1); delay(25); chuanxing(0x00); } } void key() { if(k1==0) { delay(30); if(k1==0) { direction=1; TR0=1; panduan=1; tt2=tt2+5; while(!k1); } } if(k2==0) { delay(30); if(k2==0) { direction=2; tt2=tt2-2; while(!k2); } } if(k3==0) { delay(30); if(k3==0) { direction=3; tt2=tt2+3; while(!k3); } } if(k4==0) { delay(30); if(k4==0) { direction=4; tt2=tt2-1; while(!k4); } } } void winorlose() { u8 ii; u16 iii; for(ii=1;ii<length;ii++) { if((x[0]==x[ii])&&(y[0]==y[ii])) { panduan=2; while(iii<10000) { delay(10); iii++; for(ii=0;ii<41;ii++) { switch(gx[ii]-sb) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); } } } } if((x[0]==0)||(x[0]>8)||(y[0]==0)||(y[0]>8)) { panduan=2; while(iii<10000) { delay(10); iii++; for(ii=0;ii<41;ii++) { switch(gx[ii]-sb) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); } } } if(length==20) { TR0=0; while(iii<10000) { delay(10); iii++; for(ii=0;ii<27;ii++) { switch(gwx[ii]) { case(1):p0=0x7f;break; case(2):p0=0xbf;break; case(3):p0=0xdf;break; case(4):p0=0xef;break; case(5):p0=0xf7;break; case(6):p0=0xfb;break; case(7):p0=0xfd;break; case(8):p0=0xfe;break; default:p0=0xff;break; } switch(gwy[ii]) { case(1):p1=0x01;break; case(2):p1=0x02;break; case(3):p1=0x04;break; case(4):p1=0x08;break; case(5):p1=0x10;break; case(6):p1=0x20;break; case(7):p1=0x40;break; case(8):p1=0x80;break; default:p1=0x00;break; } P0=p0; chuanxing(p1); delay(30); chuanxing(0x00); } } } } void main() { dianx=2; diany=6; x[0]=4; y[0]=4; x[1]=5; y[1]=4; x[2]=6; y[2]=4; length=3; direction=1; peizhi(); while(1) { date(); key(); winorlose(); } } void time0() interrupt 1 { TH0=0xd8; TL0=0xf0; if(panduan==1) { tt1++; tt3++; if(tt3==17) { tt2=tt2+3; tt3=0; } if(tt1==50) { tt1=0; zouwei(); gen(); if((tt2>8)&&(tt2%8)) tt2=tt2%8; else tt2=8; } if((x[0]==dianx)&&(y[0]==diany)) { dianx=tt2; diany=tt3%8; if(dianx>8) dianx=tt2%8; if(diany>8) { diany=tt2%8+3; if(diany>8) diany=diany-5; } if(dianx==0) dianx=4; if(diany==0) diany=4; length=length+1; } } if(panduan==2) { j++; if(j==30) { sb++; if(sb>41) sb=0; j=0; } } } |