#include <reg51.h>
#include <stdlib.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char result; //随机数
unsigned char mousenum; //计时数
unsigned char detime; //时间标志
unsigned char timess;
unsigned char ss;
unsigned char flag1;
unsigned char flag2;
sbit start=P3^7; //开始键
sbit led=P3^3;
sbit stop=P3^5;
sbit k0=P1^0; //锤子
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P1^6;
sbit k7=P1^7;
sbit speak=P3^6;
uchar code hole[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8};//地鼠编号
uchar code time[]={0xb0,0xa4,0xf9,0xc0};
/*************************基础前置******************************/
/***
延时函数
***/
void delay(unsigned int x){
uchar i;
while (x--)
for (i=0;i<115;i++); //1ms
}
/***
随机数生成
***/
void random(){
result=rand()%9; //随机数
}
/*****************************程序内容***************************/
/***
蜂鸣器
***/
void speaker(){
unsigned char i;
for(i=0;i<10;i++){
speak=~speak;
}
}
/***
3s倒计时
***/
void countdown(){
unsigned char i;
for(i=0;i<4;i++){
P0=time[i];
delay(1000);
}
P0=0xff;
}
/***
***/
void cheak(){
if(!k0){
delay(10);
if(!k0){
if(P2=hole[0]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k1){
delay(10);
if(!k1){
if(P1=hole[1]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k2){
delay(10);
if(!k2){
if(P2=hole[2]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k3){
delay(10);
if(!k3){
if(P3=hole[3]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k4){
delay(10);
if(!k4){
if(P4=hole[4]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k5){
delay(10);
if(!k5){
if(P5=hole[5]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k6){
delay(10);
if(!k6){
if(P2=hole[6]){
P2=0xff;
led=0;
detime=50;
}
}
}
else if(!k7){
delay(10);
if(!k7){
if(P2=hole[7]){
P2=0xff;
led=0;
detime=50;
}
}
}
}
/***
开始按键检测
***/
void scankey(){
if(!start){ //开始按键按下
delay(15); //消抖
if(!start){
TMOD=0x01; //开启计时
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
countdown(); //倒计时
flag1=1; //老鼠出现标志位变0
}
}
}
/***
地鼠显示程序
***/
void mouse(){
unsigned char holenum;
if(flag1==1){ //标志位1,开始出现老鼠
random(); //随机数
holenum=result;
if(holenum==8&&holenum==9) random(); //8/9两个数无效,重新随机
else{
P2=hole[holenum];
mousenum=holenum;
cheak(); //判断是否打中老鼠
}
}
if(ss==20){
P2=0xff;
IT0=0;
EA=0;
EX0=0;
flag1=0;
}
}
/***
计时
***/
void time0() interrupt 1{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
++detime;
if(detime==60){ //初速3s
mouse();
timess++;
ss++; //随时间变快
detime=timess;
}
}
/***
主函数
***/
void main(){
led=1;
while(1){
scankey();
}
}
代码如下,小白一个,希望有人解释下 |