找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机点阵五子棋程序加仿真电路分享给大家

  [复制链接]
跳转到指定楼层
楼主
给大家分享一个51单片机做的点阵五子棋的程序源码附带proteus仿真电路图。。。。。。。测试成功.

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit SD=P2^4;
  4. sbit STCK=P2^5;
  5. sbit SHCK=P2^6;
  6. sbit K2=P1^0;     //左移
  7. sbit K1=P1^1;     //右移
  8. sbit K3=P1^2;     //上移
  9. sbit K4=P1^3;      //下移
  10. sbit K5=P1^4;  //确定
  11. unsigned char player;
  12.   unsigned char x=0,y=0,k=0;
  13.         unsigned char player1lie[8]={ 0 };
  14.         unsigned char player2lie[8]={ 0 };
  15.         unsigned char code lie[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  16.         unsigned char code hang[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  17.         unsigned char code  zimoP1[]={0xE1,0x41,0x41,0x4F,0x49,0x49,0x69,0x4F};
  18.         unsigned char code zimoP2[]={0xE1,0x21,0x21,0xE1,0x8F,0x89,0x89,0xEF};
  19.         unsigned char code zimo[]={0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81};
  20.         unsigned char nowplayer;
  21.         unsigned char player1=1;
  22.         unsigned char player2=2;
  23.         void delay1ms(unsigned int i)
  24.         {
  25.         unsigned char j;
  26.                 while(i--)
  27.                         for(j=0;j<115;j++)
  28.                 ;
  29.         }
  30.   void shuru(unsigned char dat)
  31.         {
  32.         unsigned char i;
  33.                 for(i=0;i<8;i++)
  34.                 {
  35.                 SHCK=0;
  36.                         SD=dat&0x80;
  37.                         dat<<=1;
  38.                         SHCK=1;
  39.                 }
  40.         }
  41.         void shuchu()
  42.         {
  43.         STCK=0;
  44.                 STCK=1;
  45.         }
  46.        
  47.         void player2win()
  48.         {
  49.                 unsigned char i;
  50.                 while(1)
  51.                 {
  52.                         for(i=0;i<8;i++)
  53.                         {
  54.                         shuru(zimoP2[i]);
  55.                 shuru(hang[i]);
  56.                 shuchu();
  57.                         }
  58.         }
  59. }
  60. //2胜显示
  61.         void player1win()
  62.         {
  63.                 unsigned char i;
  64.                 while(1)
  65.                 {

  66.                         for(i=0;i<8;i++)
  67.                         {
  68.                  shuru(zimoP1[i]);
  69.                                 shuru(hang[i]);
  70.                                 shuchu();
  71. }
  72. }
  73. }
  74. //1胜显示

  75. void pinju()
  76. {
  77. unsigned char i;
  78. while(1)       
  79. {
  80.         for(i=0;i<8;i++)
  81.         {
  82.     shuru(zimo[i]);
  83.                 shuru(hang[i]);
  84.                 shuchu();
  85. }
  86. }
  87. }
  88. //平局显示
  89.         void pingju()
  90.         {
  91. if(k>=32)
  92. pinju();

  93. }





  94.         void checkplayer1()
  95.         {
  96.                 unsigned char i,m,n=0,k1=0;
  97.                 for(i=0;i<8;i++)
  98.                 {
  99.                  player=0x1f;
  100.                 for(m=0;m<4;m++)
  101.                 {
  102.            if((player&player1lie[i])==player)
  103.            player1win();
  104.            else
  105.            player=player<<1;
  106.                 }                                       

  107.                  }
  108.                         //左右判断
  109.          
  110.          
  111.          
  112.          
  113.          for(i=0;i<8;i++)
  114.          {
  115.     for(m=0;m<8;m++)
  116.                  {
  117. if(player1lie[m]&lie[i])
  118. {
  119. k1++;
  120.   if(k1>=5)
  121.         player1win();
  122. }
  123. else k1=0;

  124. }
  125.          }        //上下判断


  126. for(i=0;i<4;i++)
  127. {
  128.         for(m=0;m<8;m++)
  129.         {
  130.                 if((player1lie[0+m]>>(m+i))&0x01)
  131.                 k1++;
  132.                 else
  133.                 {          
  134.                 if(k1>=5)
  135.                 player1win();
  136.                          k1=0;
  137.                         continue;
  138.                 }
  139.         }
  140.        
  141. }
  142. for(i=1;i<4;i++)
  143. {
  144.         for(m=0;m<8;m++)
  145.         {
  146.                 if((player1lie[7-m]>>(7-i-m))&0x01)
  147.                 k1++;
  148.                 else
  149.                 {         if(k1>=5)
  150.                         player1win();
  151.                          k1=0;
  152.                         continue;
  153.                 }
  154.         }
  155.        
  156. }
  157.          
  158.            //斜向判断


  159.         }

  160.                          




  161.         //判断2胜
  162.        

  163. void checkplayer2()
  164.         {
  165.                 unsigned char i,m,n=0,k1=0;
  166.         for(i=0;i<8;i++)
  167.                 {
  168.                  player=0x1f;
  169.                 for(m=0;m<4;m++)
  170.                 {
  171.            if((player&player2lie[i])==player)
  172.            player2win();
  173. else
  174.            player=player<<1;
  175.                 }                                       

  176.                  }
  177.                                  //左右判断
  178.          
  179.          
  180.          
  181.          
  182.          for(i=0;i<8;i++)
  183.          {
  184.     for(m=0;m<8;m++)
  185.                  {
  186. if(player2lie[m]&lie[i])
  187. {
  188. k1++;
  189.   if(k1>=5)
  190.         player2win();
  191. }
  192. else k1=0;

  193. }
  194.          }        //上下判断



  195. for(i=0;i<4;i++)
  196. {
  197.         for(m=0;m<8;m++)
  198.         {
  199.                 if((player2lie[0+m]>>(m+i))&0x01)
  200.                 k1++;
  201.                 else
  202.                 {          
  203.                 if(k1>=5)
  204.                 player2win();
  205.                          k1=0;
  206.                         continue;
  207.                 }
  208.         }
  209.        
  210. }
  211. for(i=1;i<4;i++)
  212. {
  213.         for(m=0;m<8;m++)
  214.         {
  215.                 if((player2lie[7-m]>>(7-i-m))&0x01)
  216.                 k1++;
  217.                 else
  218.                 {         if(k1>=5)
  219.                         player2win();
  220.                          k1=0;
  221.                         continue;
  222.                 }
  223.         }
  224.        
  225. }
  226.          
  227.            //斜向判断

  228. }       
  229.        
  230.         unsigned char anjian()
  231.         {
  232.                 if(K1==0)
  233.                 {
  234.                 delay1ms(200);
  235.                         if(K1==0)
  236.                         {
  237.                         if(x>=1)
  238.                                 x--;
  239.                         }
  240.                 }
  241.         if(K2==0)
  242.         {
  243.         delay1ms(200);
  244.                 if(K2==0)
  245.                 {
  246.                         if(x<7)
  247.                                 x++;
  248.                 }
  249.         }
  250.         if(K3==0)
  251.         {
  252.         delay1ms(200);
  253.                 if(K3==0)
  254.                 {
  255.                 if(y>=1)
  256.                         y--;
  257.                 else ;
  258.                 }
  259.         }
  260.         if(K4==0)
  261.         {
  262.         delay1ms(200);
  263.                 if(K4==0)
  264.                 {
  265.                         if(y<7)
  266.                                 y++;
  267.                 }
  268.                
  269.         }
  270.         shuru(lie[x]);
  271.                         shuru(hang[y]);
  272.                         shuchu();
  273.         if(K5==0)
  274.         {
  275.         delay1ms(200);
  276.                 if(K5==0)
  277.                 {
  278.                         switch(nowplayer)
  279.                         {
  280.                                 case 1:player1lie[y]=player1lie[y]|(0x80>>x);k++;nowplayer=player2;break;
  281.                                 case 2:player2lie[y]=player2lie[y]|(0x80>>x);nowplayer=player1;break;
  282.                         }
  283.                 }
  284.           }
  285.           return k;
  286.         }
  287.         //按键移位与确定

  288.         void display()
  289.         {
  290.                 unsigned int a,b;
  291.                 for(b=0;b<20;b++)
  292.                 {
  293.          for(a=0;a<8;a++)
  294.                 {
  295.                 shuru(player1lie[a]);
  296.                 shuru(hang[a]);
  297.                     shuchu();
  298.                 shuru(player2lie[a]);
  299.                 shuru(hang[a]);
  300. ……………………

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

所有资料51hei提供下载:
点阵五子棋.zip (59.6 KB, 下载次数: 87)


评分

参与人数 1黑币 +5 收起 理由
zzwk123456 + 5 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:240797 发表于 2017-10-18 23:57 | 只看该作者
想下载,研究研究
回复

使用道具 举报

板凳
ID:196311 发表于 2017-10-19 09:44 | 只看该作者
还以为是人机对战呢,不过还是谢谢分享
回复

使用道具 举报

地板
ID:579349 发表于 2019-7-7 13:00 | 只看该作者
现在是真的想获取基于51单片机的五子棋代码啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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