久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2518|回復: 2
打印 上一主題 下一主題
收起左側

為什么用12864仿真推箱子游戲,什么都不顯示,只是黑屏變藍屏

[復制鏈接]
跳轉到指定樓層
樓主
請各位幫看看為啥這個在仿真里顯示不出來,是哪里有問題嗎?


單片機源程序如下:
  1. #include<reg52.h>          //此處省略定義uint,uchar
  2. #define DATA_PORT P0
  3. sbit LCD12864_RS   = P2^0;           //寄存器選擇
  4. sbit LCD12864_RW  = P2^1;           //讀/寫控制
  5. sbit LCD12864_E   = P2^2;                //使能,此處PSB為并行方式
  6. sbit LCD12864_RST   = P2^4;

  7. //此處省略定義按鍵IO口

  8. xdata uchar game=0;           //當前第幾關
  9. xdata uchar renwu_x,renwu_y;  //人所在位置的坐標

  10. //關卡8*8點陣 人物1,磚頭2,箱子3,目的4,成功5,人物目的6
  11. uchar idata map_ram[8][8]={
  12.    0,0,0,0,0,0,0,0,
  13.    0,1,0,0,0,0,0,0,
  14.    0,0,0,0,0,0,0,0,
  15.    0,0,0,0,0,0,0,0,
  16.    0,0,0,0,0,0,0,0,
  17.    0,0,0,0,0,0,0,0,
  18.    0,0,0,0,0,0,0,0,
  19.    0,0,0,0,0,0,0,0,
  20. };

  21. uchar code map[][8][8]={
  22.   2,2,2,2,2,2,2,2,                //第一關
  23.   2,0,0,0,0,0,1,2,
  24.   2,0,0,0,5,0,0,2,
  25.   2,0,0,2,2,2,2,2,
  26.   2,2,0,0,2,0,0,0,
  27.   2,0,3,0,2,0,0,0,
  28.   2,0,0,4,2,0,0,0,
  29.   2,2,2,2,2,0,0,0,
  30. };                                 //此處省略剩余關卡

  31. uchar code map0[]={
  32.                         
  33.                         "  推箱子  "
  34.                         "  學電子  "
  35.                         "         "
  36.                         "         "
  37.             };

  38. uchar code tuxiang[7][8]={
  39.    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//空白
  40.    0x3C,0x3C,0x18,0x7E,0x5A,0x24,0x42,0x81,//人物
  41.    0x77,0x77,0x77,0x00,0xEE,0xEE,0xEE,0x00,//磚頭
  42.    0xFF,0xC3,0xA5,0x99,0x99,0xA5,0xC3,0xFF,//箱子
  43.    0x00,0x3C,0x5A,0x66,0x66,0x5A,0x3C,0x00,//目的
  44.    0xFF,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0xFF,//成功
  45.    0x3C,0x3C,0x18,0x7E,0x5A,0x24,0x42,0x81,//人物目的
  46. };

  47. //--定義全局函數--//
  48. void Lcd_WriteCmd(cmd);
  49. void Lcd_WriteData(dat);
  50. void delay_1ms();
  51. void Lcd_Init();     //初始化界面
  52. void Lcd_ClearScreen(void);         //清除顯示整個圖片
  53. void busy(void);          //忙標志位檢查
  54. void Init_0(void);     //初始化開始界面,等待進入游戲
  55. void guoguan(void);            //過關后刷新界面
  56. //在指定位置一次顯示兩個標題
  57. void print_title(uchar xx,uchar yy,uchar code*title1,uchar code*title2);
  58. //在指定位置打印
  59. void print_onetitle(uchar xx,uchar yy,uchar code*title);
  60. void shuaxin(void);     //刷新屏幕
  61. void key_scan(char sx,char zy);        
  62. //此處省略延時函數

  63. void key_scan(char sx,char zy)
  64. {
  65.    if(map_ram[renwu_x][renwu_y]==1)   //人物
  66.    {
  67.      if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  68.          {
  69.            print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  70.            map_ram[renwu_x][renwu_y]=0;
  71.            renwu_x = renwu_x+sx;
  72.            renwu_y=renwu_y+zy;
  73.            print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  74.            map_ram[renwu_x][renwu_y]=1;
  75.          }
  76. //         else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  77. //         {
  78. //           print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  79. //           map_ram[renwu_x][renwu_y]=0;
  80. //           renwu_x = renwu_x+sx;
  81. //           renwu_y=renwu_y+zy;
  82. //           print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  83. //           map_ram[renwu_x][renwu_y]=6;
  84. //         }
  85. //         else if(map_ram[renwu_x+sx][renwu_y+zy]==3)
  86. //         {
  87. //           if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  88. //                 { print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  89. //                   map_ram[renwu_x][renwu_y]=0;
  90. //                   renwu_x = renwu_x+sx;
  91. //                   renwu_y=renwu_y+zy;
  92. //                   print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  93. //                   map_ram[renwu_x][renwu_y]=1;
  94. //                   print_onetitle(renwu_x,renwu_y,tuxiang[3]);
  95. //                   map_ram[renwu_x][renwu_y]=3;
  96. //                  }
  97. //         else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  98. //         {
  99. //           print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  100. //           map_ram[renwu_x][renwu_y]=0;
  101. //           renwu_x = renwu_x+sx;
  102. //           renwu_y=renwu_y+zy;
  103. //           print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  104. //           map_ram[renwu_x][renwu_y]=1;
  105. //           print_onetitle(renwu_x,renwu_y,tuxiang[5]);
  106. //           map_ram[renwu_x][renwu_y]=5;
  107. //         }
  108. //         }
  109. //         else if(map_ram[renwu_x+sx][renwu_y+zy]==5)
  110. //         {
  111. //           if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  112. //                 { print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  113. //                   map_ram[renwu_x][renwu_y]=0;
  114. //                   renwu_x = renwu_x+sx;
  115. //                   renwu_y=renwu_y+zy;
  116. //                   print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  117. //                   map_ram[renwu_x][renwu_y]=6;
  118. //                   print_onetitle(renwu_x,renwu_y,tuxiang[3]);
  119. //                   map_ram[renwu_x][renwu_y]=3;
  120. //                  }
  121. //          else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  122. //          {
  123. //           print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  124. //           map_ram[renwu_x][renwu_y]=0;
  125. //           renwu_x = renwu_x+sx;
  126. //           renwu_y=renwu_y+zy;
  127. //           print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  128. //           map_ram[renwu_x][renwu_y]=6;
  129. //           print_onetitle(renwu_x,renwu_y,tuxiang[5]);
  130. //           map_ram[renwu_x][renwu_y]=5;
  131. //          }
  132. //          }
  133.    }
  134. //   else if(map_ram[renwu_x+sx][renwu_y+zy]==6)
  135. //         {
  136. //           if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  137. //                 { print_onetitle(renwu_x,renwu_y,tuxiang[0]);
  138. //                   map_ram[renwu_x][renwu_y]=0;
  139. //                   renwu_x = renwu_x+sx;
  140. //                   renwu_y=renwu_y+zy;
  141. //                   print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  142. //                   map_ram[renwu_x][renwu_y]=4;
  143. //                   print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  144. //                   map_ram[renwu_x][renwu_y]=1;
  145. //                  }
  146. //          else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  147. //          {
  148. //           print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  149. //           map_ram[renwu_x][renwu_y]=4;
  150. //           renwu_x = renwu_x+sx;
  151. //           renwu_y=renwu_y+zy;
  152. //           print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  153. //           map_ram[renwu_x][renwu_y]=6;
  154. //           print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  155. //           map_ram[renwu_x][renwu_y]=6;
  156. //          }
  157. //          else if(map_ram[renwu_x+sx][renwu_y+zy]==3)
  158. //         {
  159. //           if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  160. //                 { print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  161. //                   map_ram[renwu_x][renwu_y]=4;
  162. //                   renwu_x = renwu_x+sx;
  163. //                   renwu_y=renwu_y+zy;
  164. //                   print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  165. //                   map_ram[renwu_x][renwu_y]=1;
  166. //                   print_onetitle(renwu_x,renwu_y,tuxiang[3]);
  167. //                   map_ram[renwu_x][renwu_y]=3;
  168. //                  }
  169. //          else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  170. //          {
  171. //           print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  172. //           map_ram[renwu_x][renwu_y]=4;
  173. //           renwu_x = renwu_x+sx;
  174. //           renwu_y=renwu_y+zy;
  175. //           print_onetitle(renwu_x,renwu_y,tuxiang[1]);
  176. //           map_ram[renwu_x][renwu_y]=1;
  177. //           print_onetitle(renwu_x,renwu_y,tuxiang[5]);
  178. //           map_ram[renwu_x][renwu_y]=5;
  179. //          }
  180. //         }
  181. //         else if(map_ram[renwu_x+sx][renwu_y+zy]==5)
  182. //         {
  183. //           if(map_ram[renwu_x+sx][renwu_y+zy]==0)
  184. //                 { print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  185. //                   map_ram[renwu_x][renwu_y]=4;
  186. //                   renwu_x = renwu_x+sx;
  187. //                   renwu_y=renwu_y+zy;
  188. //                   print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  189. //                   map_ram[renwu_x][renwu_y]=6;
  190. //                   print_onetitle(renwu_x,renwu_y,tuxiang[3]);
  191. //                   map_ram[renwu_x][renwu_y]=3;
  192. //                  }
  193. //          else if(map_ram[renwu_x+sx][renwu_y+zy]==4)
  194. //          {
  195. //           print_onetitle(renwu_x,renwu_y,tuxiang[4]);
  196. //           map_ram[renwu_x][renwu_y]=4;
  197. //           renwu_x = renwu_x+sx;
  198. //           renwu_y=renwu_y+zy;
  199. //           print_onetitle(renwu_x,renwu_y,tuxiang[6]);
  200. //           map_ram[renwu_x][renwu_y]=6;
  201. //           print_onetitle(renwu_x,renwu_y,tuxiang[5]);
  202. //           map_ram[renwu_x][renwu_y]=5;
  203. //          }
  204. //        }
  205. //  }
  206. }

  207. void Init_0(void)          //初始化界面,等待進入游戲
  208. {
  209.   uchar lala=0;
  210.   Lcd_Init();
  211.   delay_1ms(10);
  212.   while(lala==0)
  213.   {
  214.     if(KEY_START==0)
  215.             { delay_1ms(10);
  216.               if(KEY_START==0)
  217.             {
  218.                           Lcd_WriteCmd(0x01);
  219. //                        Lcd_WriteCmd(0x01);
  220.                         Lcd_ClearScreen();
  221.                         guoguan();
  222.                         lala=1;
  223.             }
  224.           }
  225.   }
  226. }

  227. void busy(void)           //忙標志位檢查
  228. {
  229.   LCD12864_RS=0;
  230.   LCD12864_RW=1;
  231.   LCD12864_E=1;
  232.   P0=0xff;
  233.   while((P0&0x80)==0x80)
  234.   delay_1ms(5);
  235.   LCD12864_E=0;
  236. }

  237. void Lcd_WriteCmd(cmd)                   //寫入一個命令到12864
  238. {
  239.     busy();
  240.         LCD12864_E  = 1;           //使能        
  241.         LCD12864_RS = 0;       //select command,選擇命令
  242.         LCD12864_RW = 0;       //select write,選擇寫模式
  243.         delay_1ms(5);
  244.         DATA_PORT = cmd; //put command,放置命令
  245.     LCD12864_E = 0;
  246.         
  247. }

  248. void Lcd_WriteData(dat)                        //寫入一個數據到12864
  249. {        
  250.     busy();
  251.         LCD12864_E  = 1;           //disable read,讀使能        
  252.         LCD12864_RS = 1;       //select data,選擇數據
  253.         LCD12864_RW = 0;       //select write,選擇寫模式        
  254.         delay_1ms(5);
  255.         DATA_PORT = dat;       //put data,放置數據
  256.         LCD12864_E = 0;
  257.                   
  258. }

  259. void Lcd_Init()                 //LCD初始化
  260. {
  261.     uchar i;
  262.         uchar code *p;
  263.         p=map0;
  264.         Lcd_WriteCmd(0x30);  //基本指令操作,地址歸位
  265.         delay_1ms(5);
  266.         Lcd_WriteCmd(0x0C);  //顯示開,關光標
  267.         delay_1ms(5);
  268.         Lcd_WriteCmd(0x01);   //清除LCD的顯示
  269.         delay_1ms(5);                          
  270.         Lcd_WriteCmd(0x06);          //指定在資料的讀取及寫入
  271.         for(i=0;i<64;i++)                //自動右移
  272.         {
  273.           Lcd_WriteData(*p);
  274.           p++;
  275.         }
  276. }

  277. void Lcd_ClearScreen(void)
  278. {
  279.   uchar x,y;
  280.   Lcd_WriteCmd(0x34);          //使用擴充指令
  281.   for(y=0;y<64;y++)
  282.    {
  283.             Lcd_WriteCmd(y+0x80);          //讀忙碌狀態                  
  284.          Lcd_WriteCmd(x+0x80);
  285.          Lcd_WriteData(0x00);   }
  286. }

  287. void guoguan(void)               //過關后刷新界面
  288. {
  289.           uchar i,j;
  290.         Lcd_ClearScreen();
  291.         for(i=0;i<8;i++)
  292.         for(j=0;j<8;j++)
  293.         {
  294.           map_ram[i][j]=map[game][j][i];
  295.           if(map_ram[i][j]==1)
  296.           {
  297.             renwu_x=i;
  298.                 renwu_y=j;
  299.           }
  300.         }
  301.         for(i=0;i<4;i++)
  302.         for(j=0;j<8;j++)
  303.         {
  304.           print_title(i,j,tuxiang[map_ram[2*i][j]],tuxiang[map_ram[2*i+1][j]]);
  305.         }
  306.          game++;
  307. }

  308. void print_title(uchar xx,uchar yy,uchar code*title1,uchar code*title2)
  309. {
  310.    uchar j=0;
  311.    uchar i=0;
  312.    uchar y;
  313.    if(yy>3)
  314.    {
  315.      xx=xx+8;
  316.          yy=yy-4;
  317.    }
  318.    yy=yy*8;
  319.    y=yy+8;
  320.    Lcd_WriteCmd(0x36);        //8bit控制,擴充指,開顯示
  321.    for(;yy<y;yy++)                //上面32行
  322.    {
  323.      Lcd_WriteCmd(yy+0x80);             //y行地址
  324.          Lcd_WriteCmd(xx+0x80);                 //x行地址
  325.          Lcd_WriteData(title1[i++]);
  326.          Lcd_WriteData(title2[j++]);
  327.    }
  328. }

  329. //在指定位置打印
  330. void print_onetitle(uchar xx,uchar yy,uchar code*title)
  331. {
  332.           uchar j=0;
  333.         uchar i=0;
  334.         uchar code *title1;
  335.         uchar x,y,z;
  336.         x=xx%2;
  337.         if(x==1)
  338.         {
  339.           z=map[xx-1][yy];
  340.           title1=tuxiang[z];
  341.           if(yy>3)
  342.           {
  343.             xx=xx+8;
  344.                 yy=yy-4;
  345.           }
  346.           yy=yy*8;
  347.           y=yy+8;
  348.           Lcd_WriteCmd(0x36);        //8bit控制,擴充指,開顯示
  349.            for(;yy<y;yy++)                //上面32行
  350.            {
  351.              Lcd_WriteCmd(yy+0x80);             //y行地址
  352.                  Lcd_WriteCmd(xx+0x80);                 //x行地址
  353.                  Lcd_WriteData(title1[i++]);
  354.                  Lcd_WriteData(title[j++]);
  355.            }
  356.         }
  357.                 if(x==0)
  358.         {
  359.           z=map[xx+1][yy];
  360.           title1=tuxiang[z];
  361.           if(yy>3)
  362.           {
  363.             xx=xx+8;
  364.                 yy=yy-4;
  365.           }
  366.           yy=yy*8;
  367.           y=yy+8;
  368.           Lcd_WriteCmd(0x36);        //8bit控制,擴充指,開顯示
  369.            for(;yy<y;yy++)                //上面32行
  370.            {
  371.              Lcd_WriteCmd(yy+0x80);             //y行地址
  372.                  Lcd_WriteCmd(xx+0x80);                 //x行地址
  373.                  Lcd_WriteData(title[i++]);
  374.                  Lcd_WriteData(title1[j++]);
  375.            }
  376.         }
  377. }

  378. void shuanxin(void)
  379. {
  380.     uchar i,j;
  381.     for(i=0;i<4;i++)
  382.         for(j=0;j<8;j++)
  383.         {
  384.           print_title(i,j,tuxiang[map_ram[2*i][j]],tuxiang[map_ram[2*i+1][j]]);
  385.         }
  386. }

  387. //主程序
  388. void main()
  389. {
  390.   Lcd_Init();
  391.   Init_0();
  392.   Lcd_ClearScreen();
  393.   while(1)
  394.   {
  395.             if(KEY_UP==0)
  396.                   {
  397.                    delay_1ms(20);
  398.                    if(KEY_UP==0)
  399.                    {key_scan(1,0); }           
  400.                   }
  401.            if(KEY_DOWN ==0)
  402.                   {
  403.                    delay_1ms(20);
  404.                    if(KEY_DOWN==0)
  405.                    {key_scan(-1,0); }           
  406.                   }
  407.          if(KEY_LEFT ==0)
  408.                   {
  409.                    delay_1ms(20);
  410.                    if(KEY_LEFT==0)
  411.                    {key_scan(0,-1); }           
  412.                   }
  413.           if(KEY_RIGHT ==0)
  414.                   {
  415.                    delay_1ms(20);
  416.                    if(KEY_RIGHT==0)
  417.                    {key_scan(0,-1); }           
  418.                   }
  419.            if(KEY_START ==0)
  420.                   {
  421.                    delay_1ms(20);
  422.                    if(KEY_LEFT==0)
  423.                    { Lcd_ClearScreen();
  424.                             shuaxin();
  425.                    }           
  426.                   }
  427.   }
  428. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2019-4-21 01:52 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片
回復

使用道具 舉報

板凳
ID:497670 發表于 2019-4-22 09:17 | 只看該作者
你好!
看程序是用的帶字庫液晶,你仿真里面用的是沒有字庫的液晶;
液晶類型型號不同,肯定不能正常顯示,具體修改可以聯系我!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜久久久| 日本不卡一区 | 日韩三级在线观看 | 亚洲高清在线 | 精品国产一区二区三区日日嗨 | 成人国产精品一级毛片视频毛片 | 在线色网 | 男女又爽又黄视频 | 国产 日韩 欧美 在线 | 色av一区二区三区 | 亚洲不卡在线观看 | 国产一区二区精品在线观看 | 国产一极毛片 | 亚洲精品福利在线 | 亚洲精品成人av久久 | 国产精品女人久久久 | 日韩在线免费 | 国产精品国产三级国产aⅴ无密码 | 久热精品在线 | 最新黄色在线观看 | 欧美激情一区 | 日韩精品一区二区三区视频播放 | 一区二区三区免费在线观看 | 国产福利在线 | 三级av在线 | 欧美激情亚洲激情 | 在线a视频网站 | 久久91| 天天澡天天狠天天天做 | 精品亚洲永久免费精品 | www.天堂av.com| 国产一级免费视频 | 日本精品视频 | 一二区电影| 美女在线视频一区二区三区 | 欧美性网| 久久久久久久av | 欧美激情国产精品 | 一区二区三区欧美 | 国产一区二区不卡 | 九九精品视频在线 |