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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4809|回復(fù): 2
收起左側(cè)

51單片機(jī)LCD12864液晶貪吃蛇游戲Proteus仿真源程序制作

  [復(fù)制鏈接]
ID:22266 發(fā)表于 2021-5-16 04:50 | 顯示全部樓層 |閱讀模式
源碼+需要用到的輔助軟件分享
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png 2.png 3.png
我是一個(gè)普通二本學(xué)校電氣的學(xué)生。今年大三。
這個(gè)東西是我大二的時(shí)候做的玩的。

這里面有我做51單片機(jī)+12864液晶的貪吃蛇游戲機(jī)的詳細(xì)資料。仿真實(shí)物我都做過(guò),效果我自己比較滿意。花的精力也比較多,代碼也全都是自己一行一行的寫下來(lái)。所以做完之后想把這些東西都整理一下,然后放在上面,方便后面要做這些東西的人。
open精神在國(guó)內(nèi)是很重要的說(shuō)···0 0、

環(huán)境: keil V4.02    protues version 7.5
   
我先說(shuō)下我這個(gè)東西最主要的幾塊。

1.單片機(jī)用的是stc的,51內(nèi)核,你首先要會(huì)這個(gè)···

2.用狀態(tài)機(jī)實(shí)現(xiàn)按鍵。這個(gè)里面有別人寫的技術(shù)帖子··

3.液晶是12864,2種控制器都做過(guò),一個(gè)控制器是ST7920帶字庫(kù)的,一個(gè)控制器是KS0108不帶字庫(kù)的。2個(gè)的英文資料我都放在里面了。首先得弄懂液晶要怎么樣和單片機(jī)連接。
要在液晶上面做游戲,推薦先看英文資料,一定要看英文,研究液晶讀寫時(shí)序和初始化方法,然后找別人的程序,實(shí)現(xiàn)液晶的基本操作,畫點(diǎn),寫漢字什么的,讀液晶···然后自己寫程序?qū)崿F(xiàn)液晶的所有基本操作。這樣才能對(duì)液晶有充分的認(rèn)識(shí),才能開始在上面做游戲。有了這個(gè)基礎(chǔ),以后學(xué)別的液晶也會(huì)快的多。

4.菜單,游戲少不了要用到菜單,比如選擇難度,選擇地圖什么的。我里面放了一個(gè)別人的文檔,看了之后應(yīng)該就會(huì)自己寫了。(注意文檔里面講的是用函數(shù)指針實(shí)現(xiàn)菜單,但是KEIL這個(gè)環(huán)境下用51函數(shù)指針會(huì)很困難,推薦像我那樣直接傳菜單號(hào))

5.貪吃蛇游戲,推薦先不要看別人的程序,自己在電腦上面下個(gè)貪吃蛇游戲,玩的時(shí)候就觀察貪吃蛇游戲的特征···比如蛇在怎么動(dòng),蛇要怎么描述,是每個(gè)點(diǎn)都描述還是只要蛇頭蛇尾···蛇轉(zhuǎn)彎的時(shí)候怎么寫?  對(duì)于上面的問(wèn)題,可以參考別人的程序,然后就開始動(dòng)手畫圖什么的表示出來(lái)這些過(guò)程,一個(gè)功能一個(gè)功能逐一實(shí)現(xiàn)。(推薦看帶字庫(kù)的那個(gè)程序,那個(gè)程序代碼是最終優(yōu)化版本。思路很清晰···)

6.液晶的動(dòng)畫,動(dòng)畫實(shí)際上就是圖片一張一張的顯示,我在里面放了一個(gè)把彩色照片黑白二值化的工具,可以找到自己喜歡的GIF動(dòng)畫,用提取工具把照片一張一張?zhí)崛〕鰜?lái),然后黑白二值化,然后取模工具取模,然后實(shí)現(xiàn)···雖然過(guò)程蠻枯燥,但是效果還不過(guò),也可以學(xué)到不少東西。

最后希望大家在看這個(gè)的時(shí)候,特別是貪吃蛇游戲?qū)崿F(xiàn)的時(shí)候,哪一個(gè)方面有更好的辦法一定通知我,因?yàn)槲矣X(jué)得我實(shí)現(xiàn)貪吃蛇游戲的方法已經(jīng)很不錯(cuò)了。如果能有更好的,我會(huì)非常希望學(xué)習(xí)下····

單片機(jī)源程序如下:
  1. #include <st7920.h>
  2. #include <tanchishe_resource.h>
  3. #define num 15

  4. //用來(lái)描述蛇在液晶上面一個(gè)點(diǎn)的結(jié)構(gòu)體
  5. struct she
  6. {
  7.         unsigned char x,y;
  8.         unsigned int value;
  9.         unsigned char direction;        
  10. };

  11. struct loop_queue  //利用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列,拐點(diǎn)不會(huì)超過(guò)15個(gè)。所以大小選15足以。
  12. {   
  13.         unsigned int front;
  14.         unsigned int rear;
  15.         unsigned int count;
  16.         struct she dat[num];
  17. };
  18. //不熟悉數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的可以在紙上畫一下操作過(guò)程

  19. struct she tou,wei,food; //蛇的頭尾節(jié)點(diǎn)  和食物點(diǎn)
  20. struct loop_queue queue;//循環(huán)隊(duì)列  蛇轉(zhuǎn)彎則形成拐點(diǎn) 將拐點(diǎn)入隊(duì)列  尾巴到達(dá)拐點(diǎn)則拐點(diǎn)出隊(duì)列

  21. unsigned char flag_exit_game; //返回標(biāo)志  為1時(shí)  從貪吃蛇游戲返回菜單
  22. unsigned char flag_game_over; //結(jié)束標(biāo)志  為1時(shí)  顯示游戲結(jié)束畫面 同時(shí)使返回標(biāo)志為1
  23. unsigned char tcs_key_flag;  //貪吃蛇在一次移動(dòng)中   只允許捕獲一次按鍵  也就是只能產(chǎn)生一個(gè)拐點(diǎn)
  24. unsigned char tcs_key_state; //用于按鍵狀態(tài)機(jī)的實(shí)現(xiàn)
  25. unsigned int  tcs_df;  //貪吃蛇得分
  26. unsigned char tcs_stop;//貪吃蛇暫定功能的實(shí)現(xiàn)

  27. unsigned char tcs_nd;  //貪吃蛇難度的選擇
  28. unsigned char tcs_dt;  //貪吃蛇地圖的選擇 這2個(gè)是全局變量  在menu里面要用到


  29. void tcs_bianjie(unsigned int he);//貪吃蛇游戲地圖的實(shí)現(xiàn)和邊界
  30. void timer0_initial();
  31. void timer1_initial();

  32. //循環(huán)隊(duì)列的基本操作
  33. void queue_initial(struct loop_queue *q);  
  34. void queue_in(struct loop_queue *q,struct she h)  ;
  35. struct she queue_out(struct loop_queue *q)  ;

  36. void tcs_game_initial();
  37. void food_produce();

  38. void tcs_game()
  39. {
  40.         struct she check;  //用與暫存蛇即將移動(dòng)的點(diǎn)  從而進(jìn)行判斷
  41.         unsigned int he;
  42.         unsigned char flag;//flag作為吃到食物的標(biāo)志

  43.         flag_exit_game=0;
  44.         flag_game_over=0;
  45.         tcs_key_state=0;
  46.         tcs_df=0;
  47.         tcs_stop=1;

  48. //        draw_lcd_picture(&tcs_picture[0]); //貪吃蛇游戲畫面
  49. //        delay_ms(2000);

  50.         tcs_bianjie(tcs_dt); //貪吃蛇游戲邊界
  51.         tcs_game_initial();//貪吃蛇初始化  主要是設(shè)定蛇頭蛇尾  并顯示蛇
  52.         timer0_initial(); //定時(shí)器0工作在方式2  8位自動(dòng)裝初值  只計(jì)數(shù)不中斷 用來(lái)產(chǎn)生隨機(jī)數(shù)
  53.         timer1_initial(); //定時(shí)器1工作在方式1        16位     10ms中斷一次掃描鍵盤

  54.         do
  55.         {
  56.                 food_produce();//產(chǎn)生一個(gè)隨機(jī)數(shù) 即隨即產(chǎn)生x y value3個(gè)值確定一個(gè)點(diǎn)為食物
  57.                 he=test_point_exist(food.x,food.y,food.value);//檢測(cè)產(chǎn)生的點(diǎn)的地方是否已經(jīng)有點(diǎn)存在
  58.         }
  59.         while(he==food.value);//如果隨機(jī)數(shù)產(chǎn)生在蛇的身體以及邊界上 則重新再產(chǎn)生一個(gè)  
  60.         draw_lcd_point(food.x,food.y,food.value);//顯示食物 先讀取這個(gè)點(diǎn)所在xy的情況 以免破壞現(xiàn)場(chǎng)
  61.         
  62.         queue_initial(&queue);//初始化循環(huán)隊(duì)列  使隊(duì)列空  front rear 即頭尾指針為0

  63.         while(1)
  64.         {
  65.                 if(flag_exit_game==1)//如果游戲過(guò)程中按下返回鍵  則立即結(jié)束游戲  返回菜單
  66.                         break;
  67.                 if(flag_game_over==1)//如果游戲過(guò)程中蛇死了  則立即結(jié)束游戲 顯示結(jié)束動(dòng)畫 按鍵后返回菜單
  68.                         break;
  69.                
  70.                 ET1=1;   //允許掃描按鍵          貪吃蛇游戲難度決定蛇2次移動(dòng)之間的間隔時(shí)間  也就是檢測(cè)按鍵的時(shí)間
  71.                 tcs_key_flag=0; //允許捕獲按鍵  在檢測(cè)按鍵時(shí)間內(nèi)  只允許生產(chǎn)一個(gè)拐點(diǎn)  即捕獲到一個(gè)有效的
  72.                                                 //按鍵以后  就置一這個(gè)變量 不允許再增加拐點(diǎn)
  73.                 while(tcs_stop==0);//暫定鍵按下會(huì)取反tcs_stop的值  從而實(shí)現(xiàn)暫停功能
  74.                 switch(tcs_nd)
  75.                 {
  76.                         case 0:  {delay_ms(10); break;}//0代表變態(tài)難度  蛇的2次移動(dòng)之間只有10ms的機(jī)會(huì)檢測(cè)鍵盤按下
  77.                         case 1:  {delay_ms(50); break;}//難度減小  2次移動(dòng)間隔增加
  78.                         case 2:  {delay_ms(100); break;}
  79.                 }
  80.                 ET1=0;

  81.                 switch(tou.direction)//這個(gè)switch用來(lái)根據(jù)蛇頭的x y value值以及當(dāng)前蛇頭移動(dòng)的方向
  82.                                                          //取出蛇頭要到達(dá)的下一個(gè)點(diǎn)  存入check中  來(lái)判斷是否撞墻 吃到食物 什么的···
  83.                 {        
  84.                         case 0: {         
  85.                                                 check.y=tou.y;
  86.                                                 if(tou.value==0x0001)//x的值要發(fā)生改變
  87.                                                 {
  88.                                                         if(tou.x==3)//蛇碰到上屏幕的右邊界  則回到左邊界
  89.                                                                 check.x=0;
  90.                                                         else if(tou.x==11)//蛇碰到下屏幕的右邊界  則回到左邊界
  91.                                                                 check.x=8;
  92.                                                         else
  93.                                                                 check.x=tou.x+1;
  94.                                                         check.value=0x8000;
  95.                                                 }
  96.                                                 else
  97.                                                 {
  98.                                                         check.x=tou.x;
  99.                                                         check.value=tou.value>>1;
  100.                                                 }
  101.                                                  break ;
  102.                                         }//->向右y不變

  103.                         case 1: {//向下value值不變                                          
  104.                                                 check.value=tou.value;
  105.                                                 if(tou.y==31) //蛇頭從在上下屏之間移動(dòng)
  106.                                                 {
  107.                                                         if(tou.x<=3)//蛇頭從上屏移動(dòng)到下屏
  108.                                                                 check.x=tou.x+8;
  109.                                                         else                 //蛇頭從下屏移動(dòng)到上屏
  110.                                                                 check.x=tou.x-8;
  111.                                                         check.y=0;
  112.                                                 }
  113.                                                 else
  114.                                                 {
  115.                                                         check.y=tou.y+1;
  116.                                                         check.x=tou.x;  //蛇頭的x值不變
  117.                                             }
  118.                                                 break ;
  119.                                         }

  120.                         case 2: {//<-向左y不變         
  121.                                                 check.y=tou.y;
  122.                                                 if(tou.value==0x8000)//x的值要發(fā)生改變
  123.                                                 {
  124.                                                         if(tou.x==0)//蛇碰到上屏幕的左邊界  則回到右邊界
  125.                                                                 check.x=3;
  126.                                                         else if(tou.x==8)//蛇碰到下屏幕的左邊界  則回到右邊界
  127.                                                                 check.x=11;
  128.                                                         else
  129.                                                                 check.x=tou.x-1;
  130.                                                         check.value=0x0001;
  131.                                                 }
  132.                                                 else
  133.                                                 {
  134.                                                         check.x=tou.x;
  135.                                                         check.value=tou.value<<1;
  136.                                                 }
  137.                                                  break ;
  138.                                         }

  139.                         case 3: { //↑         向上value不變
  140.                                                 check.value=tou.value;
  141.                                                 if(tou.y==0) //蛇頭從在上下屏之間移動(dòng)
  142.                                                 {
  143.                                                         if(tou.x<=3)//蛇頭從上屏移動(dòng)到下屏
  144.                                                                 check.x=tou.x+8;
  145.                                                         else                 //蛇頭從下屏移動(dòng)到上屏
  146.                                                                 check.x=tou.x-8;
  147.                                                         check.y=31;
  148.                                                 }
  149.                                                 else
  150.                                                 {
  151.                                                         check.y=tou.y-1;
  152.                                                         check.x=tou.x;  //蛇頭的x值不變
  153.                                             }
  154.                                                 break ;
  155.                                         }        
  156.                 }                        
  157.                 flag=0;//初始化吃到食物標(biāo)志  表示沒(méi)有吃到        
  158.                 he=test_point_exist(check.x,check.y,check.value); // 檢測(cè)蛇頭移動(dòng)的下一個(gè)點(diǎn)是否幾經(jīng)有點(diǎn)存在
  159.                 if(he==check.value) //如果前面的點(diǎn)已經(jīng)存在        則可以是食物 或者是墻和蛇身
  160.                 {
  161.                         if(        (check.x==food.x) && (check.y==food.y) && (check.value==food.value) )//吃到食物
  162.                         {
  163.                                 flag=1;//吃到食物
  164.                                 tcs_df++;
  165.                                 write_lcd_shuzi(5,16,tcs_shuzi[tcs_df/100]       );                         //顯示分?jǐn)?shù)的百位
  166.                                 write_lcd_shuzi(6,16,tcs_shuzi[ (tcs_df%100)/10] );                                //                        十
  167.                                 write_lcd_shuzi(7,16,tcs_shuzi[tcs_df%10]        );                                //          個(gè)
  168.                         
  169.                                 food.direction=tou.direction;//食物本沒(méi)有方向 但是為了下面的語(yǔ)句
  170.                                 tou=food; //食物就成了蛇頭···蛇頭的方向依然不變
  171.                                  
  172.                                 do
  173.                                 {
  174.                                         food_produce();
  175.                                         he=test_point_exist(food.x,food.y,food.value);
  176.                                 }
  177.                                 while(he==food.value);  
  178.                                 draw_lcd_point(food.x,food.y,food.value);//上面有說(shuō)過(guò)  這個(gè)是產(chǎn)生并顯示食物
  179.                         }
  180.                         else//撞到身體或者墻
  181.                         {
  182.                                 flag_game_over=1; // 游戲結(jié)束
  183.                         }
  184.                 }
  185.                 else  //什么都么有遇到 繼續(xù)前進(jìn)
  186.                 {
  187.                         check.direction=tou.direction;//這么做的理由同上 為了保持蛇頭當(dāng)前的移動(dòng)方向
  188.                         tou=check;
  189.                         draw_lcd_point(tou.x,tou.y,tou.value);//畫出此時(shí)的蛇頭
  190.                 }

  191.                 //下面是對(duì)尾巴的操作               
  192.                
  193.                 if(flag==1)//如果吃到食物 直接結(jié)束此輪循環(huán) 尾巴不做任何操作
  194.                 {
  195.                
  196.                 }
  197.                 else
  198.                 {
  199.                         if (  (wei.x == queue.dat[queue.front].x) && ( wei.y==queue.dat[queue.front].y ) && ( wei.value== queue.dat[queue.front].value)  ) //如果尾巴到達(dá)拐點(diǎn)
  200.                         {
  201.                                  check=queue_out(&queue);         
  202.                                 wei.direction=check.direction; //尾巴按照拐點(diǎn)指示的方向走
  203.                         }
  204.                         else //如果沒(méi)有到達(dá)拐點(diǎn) 尾巴移動(dòng)的方向不變
  205.                         {
  206.                                        
  207.                         }                                                
  208.                                                                         
  209.                         switch( wei.direction ) //這個(gè)是尾巴的移動(dòng)  以及尾巴節(jié)點(diǎn)數(shù)據(jù)的修改
  210.                         {
  211.                                 case 0:        {//->向右y不變        
  212.                                                         clear_lcd_point(wei.x,wei.y,wei.value);
  213.                                                         if(wei.value==0x0001)//x的值要發(fā)生改變
  214.                                                         {
  215.                                                                 if(wei.x==3)//蛇碰到上屏幕的右邊界  則回到左邊界
  216.                                                                         wei.x=0;
  217.                                                                 else if(wei.x==11)//蛇碰到下屏幕的右邊界  則回到左邊界
  218.                                                                         wei.x=8;
  219.                                                                 else
  220.                                                                         wei.x=wei.x+1;
  221.                                                                 wei.value=0x8000;
  222.                                                         }
  223.                                                         else
  224.                                                         {
  225.                                                                 wei.value=wei.value>>1;
  226.                                                         }
  227.                                                         break;
  228.                                                 }
  229.                                 case 1:        {//向下value值不變        
  230.                                                         clear_lcd_point(wei.x,wei.y,wei.value);
  231.                                                         if(wei.y==31) //蛇從在上下屏之間移動(dòng)
  232.                                                         {
  233.                                                                 if(wei.x<=3)//蛇從上屏移動(dòng)到下屏
  234.                                                                         wei.x=wei.x+8;
  235.                                                                 else                 //蛇從下屏移動(dòng)到上屏
  236.                                                                         wei.x=wei.x-8;
  237.                                                                 wei.y=0;
  238.                                                         }
  239.                                                         else
  240.                                                         {
  241.                                                                 wei.y=wei.y+1;
  242.                                                     }
  243.                                                         break ;
  244.                                                         
  245.                                                     }                                                                                
  246.                                 case 2:        {//<-向左y不變   
  247.                                                         clear_lcd_point(wei.x,wei.y,wei.value);
  248.                                                         if(wei.value==0x8000)//x的值要發(fā)生改變
  249.                                                         {
  250.                                                                 if(wei.x==0)//蛇碰到上屏幕的左邊界  則回到右邊界
  251.                                                                         wei.x=3;
  252.                                                                 else if(wei.x==8)//蛇碰到下屏幕的左邊界  則回到右邊界
  253.                                                                         wei.x=11;
  254.                                                                 else
  255.                                                                         wei.x=wei.x-1;
  256.                                                                 wei.value=0x0001;
  257.                                                         }
  258.                                                         else
  259.                                                         {
  260.                                                                 wei.value=wei.value<<1;
  261.                                                         }
  262.                                                         break;
  263.                                                  }
  264.                                 case 3:        {//↑         向上value不變  
  265.                                                         clear_lcd_point(wei.x,wei.y,wei.value);
  266.                                                         if(wei.y==0) //蛇從在上下屏之間移動(dòng)
  267.                                                         {
  268.                                                                 if(wei.x<=3)//蛇從上屏移動(dòng)到下屏
  269.                                                                         wei.x=wei.x+8;
  270.                                                                 else                 //蛇從下屏移動(dòng)到上屏
  271.                                                                         wei.x=wei.x-8;
  272.                                                                 wei.y=31;
  273.                                                         }
  274.                                                         else
  275.                                                         {
  276.                                                                 wei.y=wei.y-1;
  277.                                                             }
  278.                                                         break;
  279.                                                  }        
  280.                           }
  281.                 }                                                        
  282.         }        
  283.         TR0=0;
  284.         TR1=0;
  285.         ET1=0;  //退出游戲時(shí) 關(guān)閉游戲過(guò)程中用到的定時(shí)器0和1  然后定時(shí)器中斷也要關(guān)閉


  286. }

  287. //狀態(tài)機(jī)實(shí)現(xiàn)按鍵   參考里面資料別人的技術(shù)貼
  288. void timer1() interrupt 3
  289. {        
  290.         unsigned char tou_last_direction; //記錄蛇頭原來(lái)的移動(dòng)方向
  291.         
  292.         TR1=0;
  293.         TH1=0xDC;               
  294.         TL1=0x00;

  295.         switch (tcs_key_state)
  296.         {
  297.                 case 0:        {                // 按鍵初始態(tài)
  298.                                         if ( (P2 & 0xfe) != 0xfe )   tcs_key_state = 1;        // 鍵被按下,狀態(tài)轉(zhuǎn)換到鍵確認(rèn)態(tài)
  299.                                                 else          tcs_key_state = 0;
  300.                                         break;
  301.                                 }
  302.         
  303.                 case 1:        {                        // 按鍵確認(rèn)態(tài)
  304.                                         if ( (P2 & 0xfe) != 0xfe)
  305.                                         {
  306.                                                 // 按鍵仍按下,此時(shí)確定記錄一次有效按鍵
  307.                                                         tcs_key_state = 2;        // 狀態(tài)轉(zhuǎn)換到鍵釋放態(tài)
  308.                                                         if(tcs_key_flag==0)         //如果此時(shí)允許捕獲按鍵
  309.                                                         {
  310.                                                                 tou_last_direction=tou.direction;
  311.                                                                 switch(P2 & 0xfe)
  312.                                                                 {        
  313.                                                                         case 0xfc:        break; // 確定鍵  不進(jìn)行任何操作
  314.                                                                         case 0xfa:        {  flag_exit_game=1;   break; }//返回鍵           結(jié)束游戲 返回菜單
  315.                                                                         case 0xbe:        {  tou.direction=3;break; }//↑
  316.                                                                         case 0xee:        {  tou.direction=2;break; }//←
  317.                                                                         case 0xde:        {  tou.direction=1;break; }//↓
  318.                                                                         case 0x7e:        {  tou.direction=0;break; }//->         
  319.                                                                         case 0xf6:  {  if(tcs_stop==0) tcs_stop=1; else tcs_stop=0; break;}//暫停鍵
  320.                                                                 }
  321.                                                 
  322.                                                                 if( (tou.direction==tou_last_direction) || (tou.direction+tou_last_direction==2) || (tou.direction+tou_last_direction==4) )
  323.                                                                 //如果本來(lái)就是按此方向移動(dòng)   或者按鍵給的方向與蛇移動(dòng)方向相反 則不做任何操作 此次按鍵無(wú)效
  324.                                                                 {
  325.                                                                         tou.direction=tou_last_direction; //   還原蛇頭的移動(dòng)方向
  326.                                                                 }
  327.                                                                 else //否則記錄此頭結(jié)點(diǎn)成為拐點(diǎn)           
  328.                                                                 {                        
  329.                                                                         queue_in(&queue,tou);
  330.                                                                         tcs_key_flag=1; //已經(jīng)捕獲到一次按鍵信息 這次移動(dòng)拐點(diǎn)已經(jīng)產(chǎn)生 關(guān)閉捕獲鍵盤
  331.                                                                
  332. ……………………

  333. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
51單片機(jī) 12864液晶貪吃蛇游戲機(jī)(完美版).7z (6.69 MB, 下載次數(shù): 180)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:981320 發(fā)表于 2021-11-15 22:12 | 顯示全部樓層
本帖最后由 Shrink001 于 2021-11-15 22:24 編輯

你好,關(guān)于你的單片機(jī)實(shí)現(xiàn)的貪吃蛇游戲的程序,我現(xiàn)在想降低程序在data中的內(nèi)存,將一部分存儲(chǔ)到xdata中,但是嘗試了很久都沒(méi)有成功,會(huì)出現(xiàn)各種報(bào)錯(cuò),請(qǐng)問(wèn)您有沒(méi)有什么好的想法呢?求您解答一下我現(xiàn)在是把tcs_game.c文件中21,22行的兩個(gè)結(jié)構(gòu)體添加了xdata的前綴,data是降下來(lái)了程序也可以編譯通過(guò),但是在proteus仿真時(shí)會(huì)出現(xiàn)黃色的短路電平,不知道這個(gè)該怎么辦。。。
回復(fù)

使用道具 舉報(bào)

ID:981320 發(fā)表于 2021-11-15 22:19 | 顯示全部樓層
求助!關(guān)于你的單片機(jī)實(shí)現(xiàn)的貪吃蛇游戲的程序,我現(xiàn)在想降低程序在data中的內(nèi)存,將一部分存儲(chǔ)到xdata中,但是嘗試了很久都沒(méi)有成功,會(huì)出現(xiàn)各種報(bào)錯(cuò),請(qǐng)問(wèn)您有沒(méi)有什么好的想法呢?求您解答一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧洲一区在线观看 | 91成人小视频 | 91丨九色丨国产在线 | 91精品久久久久久综合五月天 | 中文字幕在线观看www | 欧美精品一区二区三区四区 在线 | 欧美性生活视频 | 国产专区视频 | 国产精品欧美一区二区三区不卡 | 毛片一级网站 | 91精品中文字幕一区二区三区 | 国产精品久久久一区二区三区 | 国产视频精品区 | 亚洲精品一区二区在线观看 | 密乳av| 亚洲成人观看 | 国产欧美一区二区三区在线看 | 在线视频日韩精品 | 99re在线视频 | 国产一区 在线视频 | 五月婷亚洲 | jlzzjlzz欧美大全| 国产免费一区二区 | 99热成人在线 | 亚洲国产一区二区三区, | 亚洲福利一区二区 | 国产资源在线观看 | 成人免费黄色片 | 亚洲精品一区二区久 | 亚洲欧美综合 | 激情福利视频 | 在线日韩不卡 | 精品国产一区二区三区日日嗨 | 91小视频在线 | 中国一级特黄真人毛片 | 一本一道久久a久久精品蜜桃 | 国产一区91精品张津瑜 | aaaaaa大片免费看最大的 | 亚洲综合久久精品 | 婷婷去俺也去 | 中文字幕在线一区 |