标题:
单片机点阵五子棋程序加仿真电路分享给大家
[打印本页]
作者:
liuzhichao666
时间:
2017-6-20 19:22
标题:
单片机点阵五子棋程序加仿真电路分享给大家
给大家分享一个51单片机做的点阵五子棋的程序源码附带proteus仿真电路图。。。。。。。测试成功.
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(29.75 KB, 下载次数: 109)
下载附件
2017-6-20 19:30 上传
0.png
(42.6 KB, 下载次数: 108)
下载附件
2017-6-20 19:30 上传
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
sbit SD=P2^4;
sbit STCK=P2^5;
sbit SHCK=P2^6;
sbit K2=P1^0; //左移
sbit K1=P1^1; //右移
sbit K3=P1^2; //上移
sbit K4=P1^3; //下移
sbit K5=P1^4; //确定
unsigned char player;
unsigned char x=0,y=0,k=0;
unsigned char player1lie[8]={ 0 };
unsigned char player2lie[8]={ 0 };
unsigned char code lie[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char code hang[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char code zimoP1[]={0xE1,0x41,0x41,0x4F,0x49,0x49,0x69,0x4F};
unsigned char code zimoP2[]={0xE1,0x21,0x21,0xE1,0x8F,0x89,0x89,0xEF};
unsigned char code zimo[]={0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81};
unsigned char nowplayer;
unsigned char player1=1;
unsigned char player2=2;
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
for(j=0;j<115;j++)
;
}
void shuru(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SHCK=0;
SD=dat&0x80;
dat<<=1;
SHCK=1;
}
}
void shuchu()
{
STCK=0;
STCK=1;
}
void player2win()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
shuru(zimoP2[i]);
shuru(hang[i]);
shuchu();
}
}
}
//2胜显示
void player1win()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
shuru(zimoP1[i]);
shuru(hang[i]);
shuchu();
}
}
}
//1胜显示
void pinju()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
shuru(zimo[i]);
shuru(hang[i]);
shuchu();
}
}
}
//平局显示
void pingju()
{
if(k>=32)
pinju();
}
void checkplayer1()
{
unsigned char i,m,n=0,k1=0;
for(i=0;i<8;i++)
{
player=0x1f;
for(m=0;m<4;m++)
{
if((player&player1lie[i])==player)
player1win();
else
player=player<<1;
}
}
//左右判断
for(i=0;i<8;i++)
{
for(m=0;m<8;m++)
{
if(player1lie[m]&lie[i])
{
k1++;
if(k1>=5)
player1win();
}
else k1=0;
}
} //上下判断
for(i=0;i<4;i++)
{
for(m=0;m<8;m++)
{
if((player1lie[0+m]>>(m+i))&0x01)
k1++;
else
{
if(k1>=5)
player1win();
k1=0;
continue;
}
}
}
for(i=1;i<4;i++)
{
for(m=0;m<8;m++)
{
if((player1lie[7-m]>>(7-i-m))&0x01)
k1++;
else
{ if(k1>=5)
player1win();
k1=0;
continue;
}
}
}
//斜向判断
}
//判断2胜
void checkplayer2()
{
unsigned char i,m,n=0,k1=0;
for(i=0;i<8;i++)
{
player=0x1f;
for(m=0;m<4;m++)
{
if((player&player2lie[i])==player)
player2win();
else
player=player<<1;
}
}
//左右判断
for(i=0;i<8;i++)
{
for(m=0;m<8;m++)
{
if(player2lie[m]&lie[i])
{
k1++;
if(k1>=5)
player2win();
}
else k1=0;
}
} //上下判断
for(i=0;i<4;i++)
{
for(m=0;m<8;m++)
{
if((player2lie[0+m]>>(m+i))&0x01)
k1++;
else
{
if(k1>=5)
player2win();
k1=0;
continue;
}
}
}
for(i=1;i<4;i++)
{
for(m=0;m<8;m++)
{
if((player2lie[7-m]>>(7-i-m))&0x01)
k1++;
else
{ if(k1>=5)
player2win();
k1=0;
continue;
}
}
}
//斜向判断
}
unsigned char anjian()
{
if(K1==0)
{
delay1ms(200);
if(K1==0)
{
if(x>=1)
x--;
}
}
if(K2==0)
{
delay1ms(200);
if(K2==0)
{
if(x<7)
x++;
}
}
if(K3==0)
{
delay1ms(200);
if(K3==0)
{
if(y>=1)
y--;
else ;
}
}
if(K4==0)
{
delay1ms(200);
if(K4==0)
{
if(y<7)
y++;
}
}
shuru(lie[x]);
shuru(hang[y]);
shuchu();
if(K5==0)
{
delay1ms(200);
if(K5==0)
{
switch(nowplayer)
{
case 1:player1lie[y]=player1lie[y]|(0x80>>x);k++;nowplayer=player2;break;
case 2:player2lie[y]=player2lie[y]|(0x80>>x);nowplayer=player1;break;
}
}
}
return k;
}
//按键移位与确定
void display()
{
unsigned int a,b;
for(b=0;b<20;b++)
{
for(a=0;a<8;a++)
{
shuru(player1lie[a]);
shuru(hang[a]);
shuchu();
shuru(player2lie[a]);
shuru(hang[a]);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
点阵五子棋.zip
(59.6 KB, 下载次数: 90)
2017-6-20 19:21 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
eagle_wing
时间:
2017-10-18 23:57
想下载,研究研究
作者:
jxdianqi
时间:
2017-10-19 09:44
还以为是人机对战呢,不过还是谢谢分享
作者:
Baby_He
时间:
2019-7-7 13:00
现在是真的想获取基于51单片机的五子棋代码啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1