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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機貪吃蛇仿真程序 160128液晶屏驅動程序

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機做的貪吃蛇程序和仿真圖都有,是用的160128液晶屏做的,比較大氣。 希望對大家有幫助.下面是proteus仿真原理圖:


單片機源程序如下(含160128液晶屏的驅動程序):
  1. /*---------------------------------------------------------------------------
  2. 文件功能:貪吃蛇游戲主程序
  3. 編寫者:笨小孩
  4. 版本:最終版本
  5. 作者郵箱:liaoguobao19860822@163.com
  6. 單片機類型:AT89C51
  7. 仿真軟件:Proteus7.2
  8. 代碼編譯軟件:Keil2  
  9. ----------------------------------------------------------------------------*/
  10. #include "t6963c.h"
  11. #include "at89x51.h"
  12. #include "MoveDeal.h"
  13. #include "160128_driver.h"
  14.                                                         /*+-----------------------+
  15.                                                           | 注意:晶振為22.1184MHz |
  16.                                                           +-----------------------+*/
  17. /*---------------------------------------------------------------*/
  18. //按鍵端口宏定義
  19. #define                         KEY_UP_MOVE                                P1_0                        //上移鍵端口
  20. #define                         KEY_LEFT_MOVE                        P1_1                        //左移鍵端口
  21. #define                         KEY_RIGHT_MOVE                        P1_2                        //右移鍵端口
  22. #define                         KEY_DOWN_MOVE                        P1_3                        //下移鍵端口
  23. #define                         KEY_OK                                        P1_4                        //確定鍵端口
  24. #define                         KEY_SPEED_MOVE                        P3_2                        //加速鍵端口
  25. #define                         KEY_CUSTOMS                                P3_3                        //選關鍵端口
  26. #define                         KEY_RESTORAL                        P3_4                        //復位鍵端口
  27. /*----------------------------------------------------------------------------*/
  28. //全局變量定義
  29. //游戲速度,初始值為GRADE_1(1秒移動一次蛇頭)
  30. unsigned char           m_Speed = GRADE_1;
  31. //更新顯示標志,當m_Flag為1時要刷新界面
  32. bit                                 m_Flag = 0;
  33. //更新時間標志,當m_TimeFlag為1時要刷新時間
  34. bit                                 m_TimeFlag = 0;
  35. //選關按鈕是否被按下標志位
  36. bit                                 m_IsChoose = 0;
  37. //時間變量
  38. unsigned int            m_Time = 0;
  39. //蛇頭運動方向,初始值為MOVE_DOWN(默認向下運動)
  40. unsigned char                 m_MoveState = MOVE_DOWN;
  41. /*----------------------------------------------------------------------------*/
  42. //延時10ms子程序(為鍵盤消抖服務)
  43. void Delay_10ms()
  44. {
  45.         unsigned char a, b, c;
  46.         for (a = 0; a < 10;  a++)
  47.         for (b = 0; b < 3;   b++)
  48.         for (c = 0; c < 220; c++);
  49. }

  50. /*----------------------------------------------------------------------------*/
  51. /*清除字符函數*/
  52. void ClearChar()                                       
  53. {
  54.         Set_xy(7,9);
  55.         Write_8_Data(0,NOC_WR);//G
  56.         Set_xy(7,10);
  57.         Write_8_Data(0,NOC_WR);//A
  58.         Set_xy(7,11);
  59.         Write_8_Data(0,NOC_WR);//M
  60.         Set_xy(7,12);
  61.         Write_8_Data(0,NOC_WR);//E

  62.         Set_xy(7,15);
  63.         Write_8_Data(0,NOC_WR);//O
  64.         Set_xy(7,16);
  65.         Write_8_Data(0,NOC_WR);//V
  66.         Set_xy(7,17);
  67.         Write_8_Data(0,NOC_WR);//E
  68.         Set_xy(7,18);
  69.         Write_8_Data(0,NOC_WR);//R
  70. }
  71. /*----------------------------------------------------------------------------*/
  72. //游戲結束或復位時的while循環
  73. void Loop()
  74. {
  75.         while (1)                                                                                /*判斷確定建是否按下,屏蔽其他鍵的功能*/
  76.     {
  77.             if (!KEY_OK)
  78.             {
  79.                  Delay_10ms();
  80.                  if(!KEY_OK)
  81.                      while(!KEY_OK);                                                        /*等待確定鍵被按下*/
  82.                         m_Time = 0;                                                                /*初始時間*/
  83.                         ClearChar();                                                        /*清除字符*/
  84.                         RandFood();                                                                /*隨機食物生成*/
  85.                         break;
  86.                 }
  87.         }
  88. }
  89. /*-----------------------------主程序開始---------------------------------*/
  90. void main()                                                                                       
  91. {
  92.         TMOD = 0x01;                                                                        /*定時器設置(只用到了定時器1)*/
  93.     InitializeSeries();                             /*串口初始化*/
  94.         TH0 = 0x4C;TL0 = 0x00;                                                        /*定時器0初始值設定(25ms中斷一次)*/
  95.         EA = TR0 = 1;                                                                        /*開啟定時器0定時*/
  96.         Init_disply(0);                                                                        /*初始化開機界面顯示*/

  97.     SendString("Relive childhood popularity.");          /*虛擬終端顯示*/
  98.     SendString("Challenge the limits of intellectual.");
  99.     SendString("GreedySnaker based on single-chip design.\r");
  100.     SendString("Game instructions:");
  101.     SendString("[0] key is Choice_Customs.");
  102.     SendString("[1] key is Left_Move.");
  103.     SendString("[2] key is Down_Move.");
  104.     SendString("[3] key is Right_Move.");   
  105.     SendString("[5] key is On_Move.");   
  106.     SendString("[Enter] key is pause.");  
  107.     SendString("[SpaceBar] key is SpeedUp_Move.");

  108.         while(1)                                                                                /*判斷確定建是否按下,屏蔽其他鍵的功能*/
  109.     {
  110.             if(!KEY_OK)
  111.             {
  112.                  Delay_10ms();
  113.                  if(!KEY_OK)
  114.                      while(!KEY_OK);
  115.                         break;
  116.                 }
  117.         }
  118.         Circle(63, 79, 60, 0);                                                        /*清除圓*/
  119.         Clear_LCD();                                                                        /*清屏顯示*/
  120.         Line(63, 0, 63, 127, 1);                                                /*畫分隔線*/
  121.         InitStruct();                                                                        /*初始化結構體數組*/
  122.         Init_disply(1);                                                                        /*初始化游戲開始界面顯示*/
  123.         RandFood();                                                                                /*隨機食物生成*/
  124.         ET0=1;                                                                                        /*開啟定時器0中斷*/
  125.         while(1)                                                                                /*進入主循環,鍵盤掃描開始,響應按鍵事件*/
  126.         {
  127.                 if(!KEY_LEFT_MOVE)                                                        /*響應向左運動事件*/
  128.                   {
  129.                       Delay_10ms();
  130.                       if(!KEY_LEFT_MOVE)
  131.                  {
  132.                              while(!KEY_LEFT_MOVE);
  133.                                 if (m_MoveState != MOVE_RIGHT)                /*如果蛇頭運動方向向右,直接跳過*/
  134.                                 m_MoveState = MOVE_LEFT;                        /*刷新蛇頭運動方向(向左)*/
  135.                  }
  136.                   }

  137.                 if(!KEY_RIGHT_MOVE)                                                        /*響應向右運動事件*/
  138.                   {
  139.                       Delay_10ms();
  140.                       if(!KEY_RIGHT_MOVE)
  141.                  {
  142.                              while(!KEY_RIGHT_MOVE);
  143.                                 if (m_MoveState != MOVE_LEFT)                /*如果蛇頭運動方向向左,直接跳過*/
  144.                                 m_MoveState = MOVE_RIGHT;                        /*刷新蛇頭運動方向(向右)*/
  145.                  }
  146.                   }

  147.                 if(!KEY_UP_MOVE)                                                        /*響應向上運動事件*/
  148.                   {
  149.                       Delay_10ms();
  150.                       if(!KEY_UP_MOVE)
  151.                  {
  152.                              while(!KEY_UP_MOVE);
  153.                                 if (m_MoveState != MOVE_DOWN)                /*如果蛇頭運動方向向下,直接跳過*/
  154.                          m_MoveState = MOVE_UP;                                /*刷新蛇頭運動方向(向上)*/
  155.                  }
  156.                   }

  157.                 if (!KEY_DOWN_MOVE)                                                        /*響應向下運動事件*/
  158.                   {
  159.                       Delay_10ms();
  160.                       if (!KEY_DOWN_MOVE)
  161.                  {
  162.                              while (!KEY_DOWN_MOVE);
  163.                                 if (m_MoveState != MOVE_UP)                        /*如果蛇頭運動方向向上,直接跳過*/
  164.                                 m_MoveState = MOVE_DOWN;                        /*刷新蛇頭運動方向(向下)*/
  165.                  }
  166.                   }

  167.                 if(!KEY_CUSTOMS)                                                        /*響應選關事件*/
  168.                   {
  169.                       Delay_10ms();
  170.                       if(!KEY_CUSTOMS)
  171.                  {
  172.                              while(!KEY_CUSTOMS);
  173.                                 TR0 = 0;
  174.                                 m_IsChoose = 1;
  175.                          Choice_Customs();                                       
  176.                  }
  177.                   }
  178. /*******************為選關服務*********************/
  179. /**/        if(!KEY_OK && m_IsChoose)                                /**/
  180. /**/        {                                                                                /**/
  181. /**/             Delay_10ms();                                                /**/
  182. /**/               if(!KEY_OK)                                                        /**/
  183. /**/            while(!KEY_OK);                                                /**/
  184. /**/                m_IsChoose = 0;                                                /**/
  185. /**/                TR0 = 1;                                                                /**/
  186. /**/        }//只有選關后確定鍵才有效                                /**/
  187. /**************************************************/
  188.                 if(!KEY_RESTORAL)                                                        /*響應復位事件*/
  189.                   {
  190.                       Delay_10ms();
  191.                       if(!KEY_RESTORAL)
  192.                  {
  193.                              while(!KEY_RESTORAL);
  194.                                 Restoral();                                                        /*游戲復位處理*/
  195.                  }
  196.                   }

  197.                 if(!KEY_SPEED_MOVE)                                                        /*響應加速事件*/
  198.                   {
  199.                       Delay_10ms();
  200.                       if(!KEY_SPEED_MOVE)
  201.                  {
  202.                                 TR0 = 0;
  203.                              while(!KEY_SPEED_MOVE)
  204.                                 {
  205.                                         MoveProcess();                                        /*一直調用移動處理*/
  206.                                         Delay_100ms();                                        /*延時100毫秒,也就是加速速度*/
  207.                                 }
  208.                                 TR0 = 1;                                                                                               
  209.                  }
  210.                   }

  211.                 if (m_Flag)                                                                        /*響應正常的移動事件*/
  212.                 {
  213.                         m_Flag = 0;
  214.                         MoveProcess();                                                        /*移動處理*/
  215.                 }

  216.                 if (m_TimeFlag)                                                                /*刷新時間顯示*/
  217.                 {
  218.                         m_TimeFlag = 0;
  219.                         TimeDisplay();
  220.                 }

  221.         Terminal();                                 /*響應鍵盤消息*/
  222.           }
  223. }
  224. ……………………

  225. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
貪吃蛇.rar (129.26 KB, 下載次數: 65)


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

使用道具 舉報

沙發
ID:209804 發表于 2017-6-12 21:59 | 只看該作者
準備課設做一個這個
回復

使用道具 舉報

板凳
ID:466857 發表于 2020-5-19 19:13 | 只看該作者
請問,這個中文字庫是怎么獲得的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 鲁大师一区影视 | m豆传媒在线链接观看 | 亚洲精品视频在线播放 | 国产精品久久久亚洲 | 操人网站 | 国产一区二区三区高清 | 国产欧美一区二区三区在线看 | 亚洲一区二区在线电影 | 欧美日韩久久精品 | 毛片毛片毛片毛片毛片 | av在线播放国产 | 一级毛片大全免费播放 | 国产精品二区三区在线观看 | 中文字幕欧美日韩一区 | 国产精品日韩 | 一区二区免费 | av高清| 日韩高清中文字幕 | 国产欧美一区二区三区免费 | 中文字幕在线一区二区三区 | 国产伦精品一区二区三区高清 | 亚洲国产成人精品久久 | 日韩电影免费在线观看中文字幕 | 国产精品电影在线观看 | 狠狠久久综合 | 久久在线免费 | 网络毛片 | 久久久久久中文字幕 | 99成人 | 成人欧美一区二区三区白人 | 蜜桃视频一区二区三区 | 色婷婷一区二区三区四区 | a黄在线观看 | 狠狠操天天操 | 亚洲欧美自拍偷拍视频 | 奇米四色在线观看 | www.亚洲一区二区三区 | 亚洲另类春色偷拍在线观看 | 日韩综合在线 | 国产精品久久久久久网站 | 久久99精品久久久久久秒播九色 |