标题:
单片机数字游戏源程序
[打印本页]
作者:
daniu
时间:
2014-12-25 13:09
标题:
单片机数字游戏源程序
本帖最后由 daniu 于 2014-12-25 13:16 编辑
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,
0X80,0X90,0xff,0x7f};
sbit dd=P1^1;
uchar t,tt;
void delay(uchar x) //毫秒级延时函数
{
uchar y;
for(;x>0;x--)
for(y=110;y>0;y--);
}
scanf() //按键处理函数
{
uchar temp,temp1,i;
P0=0xf0; //给P0口赋值为oxf0,用于列扫描
if(P0!=0xf0) //判别是否有键按下
{
delay(2);
if(P0!=0xf0) //再次判别是否有键按下
{
temp1=P0; //P0值赋给temp1
P0=0x0f; //P0值赋为0x0f,用于行扫描
temp=temp1|P0; //将行列扫描值合并,赋给temp
}
switch(temp)
{
case 0xee:i=1; break;
case 0xed:i=2; break;
case 0xeb:i=3; break;
case 0xe7:i=4; break;
case 0xde:i=5; break;
case 0xdd:i=6; break;
case 0xdb:i=7; break;
case 0xd7:i=8; break;
case 0xbe:i=9; break;
case 0xbd:i=0; break;
}
}
else return 10;
return i;
}
void main()
{
uchar z[7]={8,0,9,2,3,4};
uchar a=0,e=0,i,k=0;
SCON=0;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=15536/256;
TL0=15536%256;
while(1)
{
z[0]=8-z[1]-t;if(z[0]==0){z[2]--;t=0;}
if(e==4){e=0;z[1]++;}
if(k==1)
{
z[5]=TH0%10;
z[3]=TL0%10; k=0;
z[4]=tt%10;
}
for(i=0;i<6;i++)
{
SBUF=tab[z[ i]];
while(!TI);
TI=0;
}
delay(100);
if(scanf()!=10)
{
delay(15);
if(scanf()!=10)
{
z[6]=scanf();
while(scanf()!=10);
TR0=0;
a=z[4]*10+z[5]+z[6]+z[3];
if(a%7==0)
{
e++;
k=1;
t=0;
dd=0;
delay(200);
dd=1;
}
else
{
z[2]--;
k=0;
}
}
while(z[2]==0){P0=0xff;P2=0xff;dd=0;SBUF=tab[10];}
while(z[1]==3){P0=0;P2=0;dd=0;delay(200); dd=1;delay(200);SBUF=tab[8];}
TR0=1;
}
}
}
void tiemr0(void) interrupt 1
{
TH0=15536/256;
TL0=15536%256;
tt++;
if(tt==100){tt=0;t++;}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1