#include <reg52.h> /* 包含单片机寄存器的头文件 */
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define dula P0 /* 段选信号的锁存器控制 */
unsigned char code table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e,0x79,0x71 };
unsigned char BUFFER[4] = { 0, 0, 0,0 };
sbit wei1 = P2 ^ 4;
sbit wei2 = P2 ^ 5;
sbit wei3 = P2 ^ 6;
sbit wei4 = P2 ^ 7;
sbit key_01 = P3 ^ 4;
sbit key_02 = P3 ^ 5;
sbit key_03 = P3 ^ 6;
sbit key_04 = P3 ^ 7;
void delay( uint count ) /* delay */
{
uint i;
while ( count )
{
i = 200;
while ( i > 0 )
i--;
count--;
}
}
/* ****************************************** */
/* ******** 定时器初始化函数 用了定时器1 */
/* ****************************************** */
void init_timer( void )
{
TMOD = 0x01;
TH0 = (65536 - 4000) / 256;
TL0 = (65536 - 4000) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
sbit KEYHONG = P3 ^ 2; /* 红外传感器 */
sbit BEEP = P2 ^ 3;
/*------------------------------------------------
* 主函数
* ------------------------------------------------*/
main()
{
unsigned char keyvalue = 0;
unsigned char key1_ifg=0,key2_ifg=0;
unsigned char led_S=3;//使用7个灯 初始在3位置 可以拔河到0或者6的位置游戏结束
while ( 1 )
{
/* 检测红外 */
if ( KEYHONG == 1 )
{
delay( 10 );
if ( KEYHONG == 1 )
{
break;
}
}
}
P1=~(0X01<<led_S);//小灯
init_timer();
while ( 1 )
{
//用户按键1
//按下
if ( key_01 == 0 )
{
key1_ifg=1;
}
//松开
if((key1_ifg==1)&&( key_01 == 1 ))
{
key1_ifg=0;
led_S--;
P1=~(0X01<<led_S);//小灯
//一局游戏结束
if((led_S==0)||(led_S==6))
{
BUFFER[0]+=1;
if(BUFFER[0]==3)
{
BEEP=0;
delay(200);
BEEP=1;
delay(200);
BEEP=0;
delay(200);
BEEP=1;
}
led_S=3;
P1=~(0X01<<led_S);//小灯
}
}
//用户按键2
//按下
if ( key_03 == 0 )
{
key2_ifg=1;
}
//松开
if((key2_ifg==1)&&( key_03 == 1 ))
{
key2_ifg=0;
led_S++;
P1=~(0X01<<led_S);//小灯
//一局游戏结束
if((led_S==0)||(led_S==6))
{
BUFFER[3]+=1;
if(BUFFER[3]==3)
{
BEEP=0;
delay(200);
BEEP=1;
delay(200);
BEEP=0;
delay(200);
BEEP=1;
}
led_S=3;
P1=~(0X01<<led_S);//小灯
}
}
delay( 1 );
}
}
//数码管显示控制
char jishua = 0;
void T0_time()
interrupt 1
{
TH0 = (65536 - 5000) / 256;
TL0 = (65536 - 5000) % 256;
jishua = (jishua + 1) % 2;
P0 = 0x00;
if ( jishua == 0 )
{
wei1 = 1; /* 显示分数 */
wei2 = 0;
wei3 = 0;
wei4 = 0;
P0 = table[BUFFER[0]];
}else if ( jishua == 1 )
{
wei1 = 0; /* 显示分数 */
wei2 = 0;
wei3 = 0;
wei4 = 1;
P0 = table[BUFFER[3]];
}
}
51单片机 电子拔河游戏
猜你喜欢
转载自blog.csdn.net/x1131230123/article/details/107367373
今日推荐
周排行