|

楼主 |
发表于 2022-11-5 08:00:15
|
显示全部楼层
老师这个是当时仿真时的程序,现在的程序还在修改
#include<reg51.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
sbit P2_4=P2^4;
uint tt,u,aa,i,aaa,bbb;
uchar temp,zuo ,you ,zuo1,you1,num,bb,flag=0;
uchar code led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code xianshi1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
void init_time0() //定时器
{
tt=0;
TMOD=0x02;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void time0() interrupt 1
{
tt++; //中断次数计数
}
uint suiji()
{
if(tt==100)
tt=0;
srand(tt);
u=(rand()%8); //产生0到7内的随机数
return u;
}
void display(uchar zuo1,uchar you1)
{
P2=0x12; //左边数码管
P0=xianshi1[zuo1];
delay(5);
P2=0x11; //右边数码管
P0=xianshi1[you1];
delay(5);
}
unsigned char key;
void keyscan(void)
{
P1=0xff;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee: if(led[aa]==0xfe) {flag=0; aaa=0;}
else{ P3=0xff; P2_4=0;delay(5); P2_4=1;}
break;
case 0xde: if(led[aa]==0xfd) {flag=0; aaa=0;}
else{ P3=0xff; P2_4=0;delay(5); P2_4=1;}
break;
// 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
case 0xbe: if(led[aa]==0xfb) {flag=0; aaa=0;}
else{ P3=0xff; P2_4=0;delay(5); P2_4=1;}
break;
case 0x7e: if(led[aa]==0xf7) {flag=0; aaa=0;}
else{ P3=0xff; P2_4=0;delay(5); P2_4=1;}
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
// P1=0xfd;
//
// temp=P1;
//
// temp=temp&0xf0;
//
// if(temp!=0xf0)
//
// {
//
// delay(10);
//
// if(temp!=0xf0)
//
// {
//
// temp=P1;
//
// switch(temp)
//
// {
//
// case 0xed: key=4;break;
//
// case 0xdd: key=5;break;
//
// case 0xbd: key=6;break;
//
// case 0x7d: key=7;break;
//
// }
//
// while(temp!=0xf0)
//
// {
//
// temp=P1;
//
// temp=temp&0xf0;
//
// }
//
// }
//
// }
// P1=0xfb;
//
// temp=P1;
//
// temp=temp&0xf0;
//
// if(temp!=0xf0)
//
// {
//
// delay(10);
//
// if(temp!=0xf0)
//
// {
//
// temp=P1;
//
// switch(temp)
//
// {
//
// case 0xeb: key=8;break;
//
// case 0xdb: key=9;break;
//
// case 0xbb: key=10;break;
//
// case 0x7b: key=11;break;
//
// }
//
//
//
// while(temp!=0xf0)
//
// {
//
// temp=P1;
//
// temp=temp&0xf0;
//
// }
//
// }
//
// }
//
// P1=0xf7;
//
// temp=P1;
//
// temp=temp&0xf0;
//
// if(temp!=0xf0)
//
// {
//
// delay(10);
//
// if(temp!=0xf0)
//
// {
//
// temp=P1;
//
// switch(temp)
//
// {
//
// case 0xe7: key=12;break;
//
// case 0xd7: key=13;break;
//
// case 0xb7: key=14;break;
//
// case 0x77: key=15;break;
//
// }
//
// while(temp!=0xf0)
//
// {
//
// temp=P1;
//
// temp=temp&0xf0;
//
// }
}
// }
//
//}
void main()
{
if((P2&0x08)==0x00)
{
display(16,16);
}
else
{
num=0;
init_time0(); //启动定时器
if((P2&0x04)==0x00) //开关被按下,开始游戏
{
while(1)
{
aaa=1;
bbb=0;
aa=suiji();
P3=led[aa];
for(i=0;i<200;i++)//出洞速度
{
if(aaa==1)
{ if(temp!=0xff)
{ flag=1;
keyscan();
// if((temp==led[aa])&&(flag==1)) //按键正确则下一个
// {
// num++;
// aaa=0;
// flag=0;
// }
// else
// {
// while(1)
// {
// P3=0xff;
// display(zuo,you);
// P2_4=0;
//
// delay(5);
// P2_4=1;
//
// }
//
// }
}
}
zuo=num/10;
you=num%10;
display(zuo,you);
}
}
}
}
}
|
|