历史上的今天
今天是:2025年08月06日(星期三)
2020年08月06日 | STM32单片机LCD240128搬货物Proteus仿真程序
2020-08-06 来源:51hei

单片机源程序如下:
#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++;
史海拾趣
|
ARM与Cygyin 为了在 Windows 下开发嵌入式操作系统应用程序,可以在 Windows 环境下装上 Cygwin 软件。 ARM开发论坛 Cygwin 是一个在 Windows 平台上运行的 Unix 模拟环境,是 Cygnus Solutions 公司开发的自由软件。它对于学习把握 Unix/Lin ...… 查看全部问答> |
|
VC2005嵌入式利用cximage库打开jpg图象,在exe里面可以,完全相同的代码移植到ocx里面,这个ocx在wm5的pda里面注册不了,有人遇到类似的问 VC2005嵌入式利用cximage库打开jpg图象,在exe里面可以,完全相同的代码移植到ocx里面,这个ocx在wm5的pda里面注册不了,有人遇到类似的问题吗?… 查看全部问答> |
|
本人想学习ARM嵌入式开发,想买一个开发板。 求达人推荐, 我希望 1:最重要的参考资料多,开发工具软件方便,多,免费。 2:开发板功能强大的。 另外新手学什么操作系统好?… 查看全部问答> |
|
看到一份ST的官方App Note,提到可以用STM32的FSMC直接驱动RGB接口的TFT屏,这真是个好消息,不知道坛子里有没有哪位大虾这样做过? 官方给出的例子是驱动QVGA的屏,是否可以驱动WVGA的呢? 恳请各路大虾赐教,不胜感激。… 查看全部问答> |




