单片机源程序如下:
#include #include #include #define uchar unsigned char #define uint unsigned int sbit cd = P2^0; //=0,数据通道;=1,命令通道 sbit rd = P2^1; //=0,读选通有效 sbit wr = P2^2; //=0,写选通有效 sbit ce = P2^3; sbit md = P2^4; sbit rst= P2^5; uchar renh=6, renl=4, bu=0, guan=1; static uchar SB[8][10]; bit flag=1; void wrdat(uchar) ;//写数据 void wrcmd(uchar cmd); //写命令 void wrdcmd(uchar dat1, cmd);//写带有一个参数的命令 void lcddcmd(uchar dat1,dat2,cmd); //写带有两个参数的命令 void LCD24012864_init(); void dischar(uchar hang,uchar lie,uchar cha) ;//写ASCII码字符 void delay(); void disxg(); //显示选关提示 void clear(); //清屏 void disphz(uchar count) ; //数字和汉字代码写入自定义字符存储区 void dishan(uchar hang, lie,uchar bianma);//写汉字代码行,列,bianma汉字在自定义字符中的位置, void disshu(uchar hang, lie, bianma);//写数字代码行,列,bianma汉字在自定义字符中的位置, void bushu(); uchar key() ; //检测按键 void tupian() //画关卡地图 { uchar i,j; for(i=0;i<8;i++) for(j=0;j<10;j++) { dishan(2*i,2*j,han[map[guan-1][i][j]]); SB[i][j]=map[guan-1][i][j]; if(SB[i][j]==0x07) SB[i][j]=0x00; } dishan(4,22,han[4]); disshu(4,24,shu[0]); disshu(4,25,shu[guan]); dishan(4,26,han[5]); bushu(); dishan(2*renh,2*renl,han[1]); } void shengli() //过关判断 { uchar i,j,s1=0,s2=0; for(i=0;i<8;i++) for(j=0;j<10;j++) { if(map[guan-1][i][j]==0x07) //检视目标 { s1++; //目标计数 if(SB[i][j]==0x02) s2++; //目标上箱子计数 } } if(s1==s2) //目标计数和目标上箱子计数相同,则过关 { dishan(2,20,han[10]); //显示过关提示 dishan(2,22,han[11]); dishan(2,24,han[12]); dishan(2,26,han[5]); disshu(2,28,shu[11]); flag=0; //停止游戏 disxg(); //显示选关提示 } } void xuanguan(uchar k) //选关处理 { if((k==1||k==3)&&guan<3) {guan++;renh=6;renl=4;tupian();} if((k==2||k==4)&&guan>1) {guan--;renh=6;renl=4;tupian();} } void huintfumubiao() //恢复目标显示,(被人踩的目标) { uchar i,j; for(i=0;i<8;i++) for(j=0;j<10;j++) { if(map[guan-1][i][j]==0x07&&SB[i][j]!=0x02) //有目标且没有箱子 { if(renh!=i||renl!=j) dishan(2*i,2*j,han[7]); } } } void game(uchar k) //游戏控制 { if(k==1) //向上 { if(SB[renh-1][renl]==0x00) //上面是空白 { dishan(2*renh,2*renl,han[0]); //人原来的位置清0 renh--; //上移一行 dishan(2*renh,2*renl,han[1]); //人新位置显示 bu++; //步数加1 } else if((SB[renh-1][renl]==0x02)&&(SB[renh-2][renl]==0x00)) //上面是箱子,箱子上是空格 { dishan(2*renh,2*renl,han[0]);dishan(2*(renh-1),2*renl,han[0]); renh--; dishan(2*renh,2*renl,han[1]);dishan(2*(renh-1),2*renl,han[2]); SB[renh][renl]=0x00;SB[renh-1][renl]=0x02; bu++; } } if(k==4) { if(SB[renh+1][renl]==0x00) { dishan(2*renh,2*renl,han[0]); renh++; dishan(2*renh,2*renl,han[1]); bu++; } else if((SB[renh+1][renl]==0x02)&&(SB[renh+2][renl]==0x00)) { dishan(2*renh,2*renl,han[0]);dishan(2*(renh+1),2*renl,han[0]); renh++; dishan(2*renh,2*renl,han[1]);dishan(2*(renh+1),2*renl,han[2]); SB[renh][renl]=0x00;SB[renh+1][renl]=0x02; bu++;
上一篇:STM32温度传感器DS18B20测试程序 可通过TFT显示屏显示
下一篇:MAX30102空气质量监测模块STM32源程序与资料
推荐阅读最新更新时间:2024-11-02 10:39