单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD12864超新颖游戏之贪吃蛇Proteus仿真+单片机C语言代码

  [复制链接]
跳转到指定楼层
楼主
基于12864液晶显示的单片机贪吃蛇仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机c语言源程序:

//---------- 终于用上结构体了!哈哈哈!

  1. #include <reg52.h>
  2. #include <12864.h>
  3. #include <resource.h>
  4. #include <menu.h>

  5. struct menu_index
  6. {
  7.         unsigned char up_num;
  8.         unsigned char down_num;
  9.         unsigned char confirm_num;
  10.         unsigned char cansel_num;
  11. };

  12. struct menu_index code menu_num[14]=
  13. {
  14.         {3,1,4,0},
  15.         {0,2,5,1},
  16.         {1,3,9,2},
  17.         {2,0,12,3},

  18.         {0,0,0,0},

  19.         {8,6,5,1},
  20.         {5,7,6,1},
  21.         {6,8,7,1},
  22.         {7,5,8,1},

  23.         {11,10,9,2},
  24.         {9,11,10,2},
  25.         {10,9,11,2},

  26.         {13,13,12,3},
  27.         {12,12,13,3},
  28. };

  29. unsigned char present_menu_num;
  30. extern unsigned char flag_exit_game;
  31. extern unsigned char tcs_nd;
  32. extern unsigned char tcs_dt;

  33. void tcs_game();

  34. void main()
  35. {
  36.         present_menu_num=0;
  37.         tcs_nd=1;
  38.         tcs_dt=1;
  39.         initial_lcd();
  40.         clear_lcd();
  41.         huihui(present_menu_num);
  42.                         
  43.         while(1)
  44.         {
  45.                 key_down();
  46.         }
  47. }



  48. void key_down()
  49. {
  50.         unsigned char h;
  51.         if((P2&0x7f)!=0x7f)
  52.         {
  53.                 delay_ms(10);
  54.                 if ((P2&0x7f)!=0x7f)
  55.                 {
  56.                         h=P2&0x7f;
  57.                         switch(h)
  58.                         {
  59.                                 case 0x6f:        {
  60.                                                                 present_menu_num=menu_num[present_menu_num].confirm_num;
  61.                                                                 huihui(present_menu_num);
  62.                                                                 break;
  63.                                                         }
  64.         
  65.                                 case 0x5f:        {
  66.                                                                 present_menu_num=menu_num[present_menu_num].cansel_num;
  67.                                                                 huihui(present_menu_num);
  68.                                                                 break;
  69.                                                         }

  70.                                 case 0x7e:        {
  71.                                                                 present_menu_num=menu_num[present_menu_num].up_num;
  72.                                                                 huihui(present_menu_num);
  73.                                                                 break;
  74.                                                         }
  75.                                 case 0x7b:         break;

  76.                                 case 0x7d:  {
  77.                                                                 present_menu_num=menu_num[present_menu_num].down_num;
  78.                                                                 huihui(present_menu_num);
  79.                                                                 break;
  80.                                                         }

  81.                                 case 0x77:  break;
  82.                         }
  83.                         while( (P2&0x7f)!=0x7f );
  84.                         P2=0xff;
  85.                         delay_ms(10);
  86.                 }
  87.                                 
  88.         }
  89. }

  90. void menu1 ()
  91. {
  92.         unsigned char i;
  93.         clear_lcd();
  94.         cs1=0; cs2=1;
  95.         for(i=0;i<4;i++)
  96.         {               
  97.                 write_lcd_hanzi(0,i*16,ksyx[i]);               
  98.                 write_lcd_hanzi(2,i*16,dtsz[i]);        
  99.                 write_lcd_hanzi(4,i*16,ndsz[i]);
  100.                 write_lcd_hanzi(6,i*16,yykg[i]);               
  101.         }
  102. }


  103. void menu2 ()
  104. {
  105.         unsigned char i;
  106.         clear_lcd();
  107.         cs1=0; cs2=1;
  108.         for(i=0;i<4;i++)
  109.         {               
  110.                 write_lcd_hanzi(0,i*16,dtyi[i]);               
  111.                 write_lcd_hanzi(2,i*16,dter[i]);        
  112.                 write_lcd_hanzi(4,i*16,dtsa[i]);
  113.                 write_lcd_hanzi(6,i*16,dtsi[i]);               
  114.         }
  115. }

  116. void menu3()
  117. {
  118.         unsigned i;
  119.         clear_lcd();
  120.         cs1=0;cs2=1;
  121.         for(i=2;i<4;i++)
  122.         {               
  123.                 write_lcd_hanzi(0,i*16,bt[i-2]);
  124.                 write_lcd_hanzi(2,i*16,kn[i-2]);               
  125.                 write_lcd_hanzi(4,i*16,jd[i-2]);               
  126.         }
  127. }

  128. void menu4 ()
  129. {
  130.         unsigned char i;
  131.         clear_lcd();
  132.         cs1=0; cs2=1;
  133.         for(i=0;i<4;i++)
  134.         {               
  135.                 write_lcd_hanzi(0,i*16,yyk[i]);               
  136.                 write_lcd_hanzi(2,i*16,yyg[i]);                        
  137.         }
  138. }

  139. void game_over()  
  140. {
  141.         unsigned i,j;
  142.         clear_lcd();
  143.         cs1=0;cs2=1;
  144.         for(i=0;i<8;i++)
  145.         {        
  146.                 j=i;        
  147.                 if(i>3)
  148.                         {cs1=1;cs2=0;j=i-4;}
  149.                 write_lcd_hanzi(2,j*16,sbnbjcs[i]);
  150.                 write_lcd_hanzi(4,j*16,dxqcxlg[i]);
  151.         }        
  152. }


  153. void choose_difficulty(unsigned char x)
  154. {
  155.         unsigned char i;
  156.         cs1=0;cs2=1;
  157.         write_lcd_hanzi(x,0,jt[0]);
  158.         
  159.         cs1=1;cs2=0;

  160.         for(i=0;i<16;i++)
  161.         {
  162.                 delay_ms(20);
  163.                 set_lcd_xy(x,i);
  164.                 write_lcd_dat(dg[i]);
  165.                 delay_ms(20);
  166.                 set_lcd_xy(x+1,i);
  167.                 write_lcd_dat(dg[i+16]);
  168.         }
  169. }


  170. void shadow(unsigned char x)
  171. {
  172.         unsigned char i,j;
  173.         unsigned char he;

  174.         for(i=x;i<x+2;i++)
  175.         {
  176.                 for(j=0;j<64;j++)
  177.                 {
  178.                         cs1=1;cs2=0;                        
  179.                         set_lcd_xy(i,j);
  180.                         he=read_lcd_dat();
  181.                         he=read_lcd_dat();
  182.                         he=he^(0xff);
  183.                         set_lcd_xy(i,j);
  184.                         write_lcd_dat(he);

  185.                         cs1=0;cs2=1;                        
  186.                         set_lcd_xy(i,j);
  187.                         he=read_lcd_dat();
  188.                         he=read_lcd_dat();
  189.                         he=he^(0xff);
  190.                         set_lcd_xy(i,j);
  191.                         write_lcd_dat(he);        
  192.                 }
  193.         }
  194. }


  195. void huihui(unsigned char he)
  196. {
  197.         switch(he)
  198.         {
  199.                 case 0 : { menu1();  shadow(0); break; }
  200.                 case 1 : { menu1();  shadow(2); break; }
  201.                 case 2 : { menu1();  shadow(4); break; }
  202.                 case 3 : { menu1();  shadow(6); break; }

  203.                 case 4:  {         tcs_game();
  204.                                          if(flag_exit_game==1)
  205.                                          {
  206.                                                  present_menu_num=0 ;
  207.                                                 menu1();  
  208.                                                 shadow(0);
  209.                                                 break;
  210.                                          }  
  211.                                          else
  212.                                          {
  213.                                                  game_over();
  214.                                                 read_lcd_dat();
  215.                                                  break;
  216.                                          }
  217.                                  }   

  218.                    case 5 : { menu2();  choose_difficulty(0); tcs_dt=1; read_lcd_dat(); break; }
  219.                 case 6 : { menu2();  choose_difficulty(2); tcs_dt=2; read_lcd_dat(); break; }
  220.                 case 7 : { menu2();  choose_difficulty(4); tcs_dt=3; read_lcd_dat(); break; }
  221.                 case 8 : { menu2();  choose_difficulty(6); tcs_dt=4; read_lcd_dat(); break; }

  222.                 case 9:   {menu3(); choose_difficulty(0); tcs_nd=0; read_lcd_dat(); break; }
  223.                 case 10:  {menu3(); choose_difficulty(2); tcs_nd=1; read_lcd_dat(); break; }
  224.                 case 11:  {menu3(); choose_difficulty(4); tcs_nd=2; read_lcd_dat(); break; }

  225.                 case 12: { menu4();  choose_difficulty(0); read_lcd_dat(); break; }
  226.                 case 13: { menu4();  choose_difficulty(2); read_lcd_dat(); break; }        
  227.         }
  228. }
复制代码

全部资料51hei下载地址:
超新颖游戏之贪吃蛇.rar (24.14 KB, 下载次数: 35)


评分

参与人数 7黑币 +135 收起 理由
jinsheng7533967 + 35 赞一个!
sheng7533967 + 8 很给力!
Sawardeakar + 12 绝世好帖!
areyouok + 12 绝世好帖!
Trump1438 + 10 绝世好帖!
shuisheng60 + 8 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
shuisheng60 发表于 2019-1-29 03:49 | 只看该作者
很好很好,能打游戏咯!

评分

参与人数 7黑币 +159 收起 理由
shuisheng + 35
areyouok + 35
sheng7533967 + 12
yoxi + 15
#include51.h + 15
Sawardeakar + 35 很给力!
Trump1438 + 12 赞一个!

查看全部评分

回复

使用道具 举报

板凳
#include51.h 发表于 2019-1-29 11:44 | 只看该作者
杠杠的,不简单!

评分

参与人数 3黑币 +42 收起 理由
站着说话不腰疼 + 12
sheng7533967 + 15
Sawardeakar + 15 赞一个!

查看全部评分

回复

使用道具 举报

地板
zhengchong60 发表于 2019-1-30 15:46 | 只看该作者
好东西,顶上了!

评分

参与人数 2黑币 +22 收起 理由
找人PK + 12
sheng7533967 + 10

查看全部评分

回复

使用道具 举报

5#
yoxi 发表于 2019-2-6 21:56 | 只看该作者
有空也做一个来玩玩咯
回复

使用道具 举报

6#
钻牛尖滴刘尖尖 发表于 2019-2-8 17:00 | 只看该作者
不错,超棒的资料

评分

参与人数 2黑币 +27 收起 理由
找人PK + 12
zhengchong60 + 15

查看全部评分

回复

使用道具 举报

7#
还有谁? 发表于 2019-2-10 21:02 | 只看该作者
不错,超强的资料

评分

参与人数 2黑币 +20 收起 理由
就你?呸! + 10
shuisheng + 10

查看全部评分

回复

使用道具 举报

8#
sheng7533967 发表于 2019-2-13 16:38 | 只看该作者
能打游戏咯!
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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