#include <reg51.h>
#include <stdlib.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char result; //隨機數(shù)
unsigned char mousenum; //計時數(shù)
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};
/*************************基礎前置******************************/
/***
延時函數(shù)
***/
void delay(unsigned int x){
uchar i;
while (x--)
for (i=0;i<115;i++); //1ms
}
/***
隨機數(shù)生成
***/
void random(){
result=rand()%9; //隨機數(shù)
}
/*****************************程序內容***************************/
/***
蜂鳴器
***/
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; //老鼠出現(xiàn)標志位變0
}
}
}
/***
地鼠顯示程序
***/
void mouse(){
unsigned char holenum;
if(flag1==1){ //標志位1,開始出現(xiàn)老鼠
random(); //隨機數(shù)
holenum=result;
if(holenum==8&&holenum==9) random(); //8/9兩個數(shù)無效,重新隨機
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;
}
}
/***
主函數(shù)
***/
void main(){
led=1;
while(1){
scankey();
}
}
代碼如下,小白一個,希望有人解釋下 |