找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3472|回复: 3
打印 上一主题 下一主题
收起左侧

基于单片机的推箱子小游戏代码(带仿真)PG160128A液晶显示

[复制链接]
跳转到指定楼层
楼主
基于单片机的推箱子小游戏(带仿真)全套带仿真,带源码,hex文件等


单片机源程序如下:
  1. /*获取当前行,列*/
  2. /*设置当前行,列*/
  3. uchar g=0;
  4. void delay(int c){
  5.         int i, j;
  6.         for(i = 0; i < c; i++)
  7.                 for(j = 0; j < 1000; j++);
  8. }

  9. /*清屏 320 = (160/8) * (128/8) = 20 * 16 = 320*/
  10. void cls(void){
  11.         int i;
  12.         set_xy(0,0);
  13.         for(i = 0; i < 320; i++)
  14.                 write_one(0x94,INC_WR);
  15. }


  16. uchar curx,cury;        /*纪录当前人物所在位置*/

  17. uchar level_temp[8][8]={
  18.         0,0,0,0,0,0,0,0,
  19.         0,0,0,0,0,0,0,0,
  20.         0,0,0,0,0,0,0,0,
  21.         0,0,0,0,0,0,0,0,
  22.         0,0,0,0,0,0,0,0,
  23.         0,0,0,0,0,0,0,0,
  24.         0,0,0,0,0,0,0,0,
  25.         0,0,0,0,0,0,0,0,
  26. };


  27. void wirte_bg(void){
  28.         int i;
  29.         set_adr(0x50,0x01);
  30.         for(i = 0; i < 2560; i++)
  31.                 write_one(bg[i],INC_WR);
  32. }

  33. void wirte_cgrom(void){
  34.         int i;
  35. //        set_adr(0x50,0x01);
  36. //        for(i = 0; i < 2560; i++)
  37. //                write_one(0xff,INC_WR);
  38.         set_adr(0x00,0x0c);
  39.         /*自定义字符写入CGROM*/
  40.         for(i = 0; i < 848; i++)
  41.                 write_one(Lattice[i],INC_WR);
  42. }

  43. void start(void){
  44.         uchar i;
  45.         set_xy(0,0);
  46.         for(i=0;i<20;i++)
  47.                 write_one(0x95,INC_WR);
  48.         set_xy(0,15);
  49.         for(i=0;i<20;i++)
  50.                 write_one(0x95,INC_WR);
  51.         for(i=0;i<15;i++){
  52.                 set_xy(0,i);
  53.                 write_one(0x95,INC_WR);
  54.                 set_xy(19,i);
  55.                 write_one(0x95,INC_WR);
  56.         }
  57.         set_xy(18,1);
  58.         write_one(0x96,INC_WR);
  59.         set_xy(18,14);
  60.         write_one(0x97,INC_WR);
  61.         set_xy(1,1);
  62.         write_one(0x98,INC_WR);
  63.         set_xy(1,14);
  64.         write_one(0x99,INC_WR);

  65.         set_xy(7,6);
  66.         write_one(0xaa,INC_WR);
  67.         write_one(0xab,INC_WR);
  68.         write_one(0xae,INC_WR);
  69.         write_one(0xaf,INC_WR);
  70.         write_one(0xb2,INC_WR);
  71.         write_one(0xb3,INC_WR);
  72.         set_xy(7,7);
  73.         write_one(0xac,INC_WR);
  74.         write_one(0xad,INC_WR);
  75.         write_one(0xb0,INC_WR);
  76.         write_one(0xb1,INC_WR);
  77.         write_one(0xb4,INC_WR);
  78.         write_one(0xb5,INC_WR);

  79.         set_xy(6,8);
  80.         write_one(0x9a,INC_WR);
  81.         write_one(0x9b,INC_WR);
  82.         write_one(0x9e,INC_WR);
  83.         write_one(0x9f,INC_WR);
  84.         write_one(0xa2,INC_WR);
  85.         write_one(0xa3,INC_WR);
  86.         write_one(0xa6,INC_WR);
  87.         write_one(0xa7,INC_WR);
  88.         set_xy(6,9);
  89.         write_one(0x9c,INC_WR);
  90.         write_one(0x9d,INC_WR);
  91.         write_one(0xa0,INC_WR);
  92.         write_one(0xa1,INC_WR);
  93.         write_one(0xa4,INC_WR);
  94.         write_one(0xa5,INC_WR);
  95.         write_one(0xa8,INC_WR);
  96.         write_one(0xa9,INC_WR);
  97.         while(i){                        /*此while语句判断确定键超级技巧*/
  98.                 switch(P1&0x1f){
  99.                         case 0x0f:
  100.                                 i=0;
  101.                                 break;                                
  102.                 }
  103.         }
  104. }


  105. void guan(void){
  106.         /*推*/        
  107.         set_xy(16,0);
  108.         write_one(0xaa,INC_WR);
  109.         write_one(0xab,INC_WR);
  110.         set_xy(16,1);
  111.         write_one(0xac,INC_WR);
  112.         write_one(0xad,INC_WR);
  113.         /*箱*/
  114.         set_xy(16,2);
  115.         write_one(0xae,INC_WR);
  116.         write_one(0xaf,INC_WR);
  117.         set_xy(16,3);
  118.         write_one(0xb0,INC_WR);
  119.         write_one(0xb1,INC_WR);
  120.         /*子*/
  121.         set_xy(16,4);
  122.         write_one(0xb2,INC_WR);
  123.         write_one(0xb3,INC_WR);
  124.         set_xy(16,5);
  125.         write_one(0xb4,INC_WR);
  126.         write_one(0xb5,INC_WR);        
  127.         /*第*/
  128.         set_xy(16,8);
  129.         write_one(0xd2,INC_WR);
  130.         write_one(0xd3,INC_WR);        
  131.         set_xy(16,9);
  132.         write_one(0xd4,INC_WR);
  133.         write_one(0xd5,INC_WR);
  134.         /*几*/        
  135.         set_xy(16,10);
  136.         write_one(0xd6,INC_WR);
  137.         write_one(0xd6+2*(g+1),INC_WR);        
  138.         set_xy(16,11);
  139.         write_one(0xd7,INC_WR);
  140.         write_one(0xd7+2*(g+1),INC_WR);
  141.         /*关*/        
  142.         set_xy(16,12);
  143.         write_one(0xce,INC_WR);
  144.         write_one(0xcf,INC_WR);        
  145.         set_xy(16,13);
  146.         write_one(0xd0,INC_WR);
  147.         write_one(0xd1,INC_WR);
  148.         /*阿*/
  149.         set_xy(18,0);
  150.         write_one(0x9a,INC_WR);
  151.         write_one(0x9b,INC_WR);        
  152.         set_xy(18,1);
  153.         write_one(0x9c,INC_WR);
  154.         write_one(0x9d,INC_WR);
  155.         /*С*/        
  156.         set_xy(18,2);
  157.         write_one(0x9e,INC_WR);
  158.         write_one(0x9f,INC_WR);        
  159.         set_xy(18,3);
  160.         write_one(0xa0,INC_WR);
  161.         write_one(0xa1,INC_WR);
  162.         /*制*/        
  163.         set_xy(18,4);
  164.         write_one(0xa2,INC_WR);
  165.         write_one(0xa3,INC_WR);        
  166.         set_xy(18,5);
  167.         write_one(0xa4,INC_WR);
  168.         write_one(0xa5,INC_WR);
  169.         /*作*/        
  170.         set_xy(18,6);
  171.         write_one(0xa6,INC_WR);
  172.         write_one(0xa7,INC_WR);        
  173.         set_xy(18,7);
  174.         write_one(0xa8,INC_WR);
  175.         write_one(0xa9,INC_WR);
  176. }




  177. void printc(uchar i, uchar j, uchar c){
  178.         set_xy(i*2,j*2);
  179.         switch(c){        
  180.                 case 0:
  181.                            write_one(0x94,INC_WR);
  182.                            write_one(0x94,INC_WR);
  183.                            set_xy(i*2,j*2+1);
  184.                            write_one(0x94,INC_WR);
  185.                            write_one(0x94,INC_WR);
  186.                            break;                                          
  187.                 case 1:                /*人物1*/
  188.                            write_one(0x80,INC_WR);
  189.                            write_one(0x81,INC_WR);
  190.                            set_xy(i*2,j*2+1);
  191.                            write_one(0x82,INC_WR);
  192.                            write_one(0x83,INC_WR);
  193.                            break;
  194.                 case 2:                /*砖头2*/
  195.                            write_one(0x84,INC_WR);
  196.                            write_one(0x85,INC_WR);
  197.                            set_xy(i*2,j*2+1);
  198.                            write_one(0x86,INC_WR);
  199.                            write_one(0x87,INC_WR);
  200.                            break;
  201.                 case 3:                /*箱子3*/
  202.                            write_one(0x88,INC_WR);
  203.                            write_one(0x89,INC_WR);
  204.                            set_xy(i*2,j*2+1);
  205.                            write_one(0x8a,INC_WR);
  206.                            write_one(0x8b,INC_WR);
  207.                            break;
  208.                 case 4:                /*目的4*/
  209.                            write_one(0x8c,INC_WR);
  210.                            write_one(0x8d,INC_WR);
  211.                            set_xy(i*2,j*2+1);
  212.                            write_one(0x8e,INC_WR);
  213.                            write_one(0x8f,INC_WR);
  214.                            break;
  215.                 case 5:                /*成功5*/
  216.                            write_one(0x90,INC_WR);
  217.                            write_one(0x91,INC_WR);
  218.                            set_xy(i*2,j*2+1);
  219.                            write_one(0x92,INC_WR);
  220.                            write_one(0x93,INC_WR);
  221.                            break;
  222.         }
  223.         
  224. }



  225. void pushbox(){
  226.         uchar i,j;
  227.         /*根据level.h中的值进行输出单个字符点阵为16*16,显示8*8个字符*/
  228.         for(i = 0; i < 8; i++)
  229.                 for(j = 0; j < 8; j++){
  230.                         level_temp[i][j]=level[g][j][i];
  231.                         switch(level_temp[i][j]){        
  232.                                 case 0:
  233.                                            printc(i,j,0);
  234.                                            break;                                          
  235.                                 case 1:                /*人物1*/
  236.                                            curx=i;
  237.                                            cury=j;
  238.                                            printc(i,j,1);
  239.                                            break;
  240.                                 case 2:                /*砖头2*/
  241.                                            printc(i,j,2);
  242.                                            break;
  243.                                 case 3:                /*箱子3*/
  244.                                            printc(i,j,3);
  245.                                            break;
  246.                                 case 4:                /*目的4*/
  247.                                            printc(i,j,4);
  248.                                            break;
  249.                                 case 5:                /*成功5*/
  250.                                            printc(i,j,5);
  251.                                            break;

  252. ……………………

  253. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
推箱子Cargador.rar (50.1 KB, 下载次数: 60)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:998740 发表于 2021-12-30 22:05 | 只看该作者
set_xy是不是没定义
回复

使用道具 举报

板凳
ID:876099 发表于 2022-3-20 14:40 | 只看该作者
这个取字模用的什么什么字体大小方便说一下吗
回复

使用道具 举报

地板
ID:876099 发表于 2022-3-31 20:00 | 只看该作者
做不出实物
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表