基于51单片机的串口乒乓球小游戏

基于51单片机的乒乓球小游戏

(仿真+程序)

功能介绍

具体功能:

1.用两块单片机串口进行通信;

2.一排LED模拟乒乓球运动(哪里亮表示运动到哪);

3.当最左边LED亮,表示球运动到左边,需要左方击球;

4.当最右边LED亮,表示球运动到右边,需要右方击球;

5.复位按键模拟发球;

​演示视频:

基于51单片机的乒乓球小游戏 

添加图片注释,不超过 140 字(可选)

主机程序

#include<reg51.h>	 
#define uchar unsigned char
#define uint unsigned int
/***公众号:木子单片机****/
uchar led_data=0x80;
uchar flag=0;
uchar send_data=0x80;
uchar send_flag=1;


//************************************
//串口初始化	
//************************************

void Init_Uart()
{
  SCON = 0X50;	//设置串口工作在方式1,允许接收
  TMOD |= 0x20;	//定时器工作在方式2
  TH1   = 0xfd;	//9600波特率
  TL1   = 0xfd;
  EA    = 1;  //总中断
  TR1   = 1;
  REN=1;//允许串口接收
  ES    = 1;  //允许中断
}
//定时器初始化
void Init_Time()
{
  //初始化定时器10ms
  TMOD|=0X01;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}

//串口输出数据
void TX_data(uchar num)
{
  
  SBUF = num;
  while(!TI);
  TI=0;
  
}

void Ex0_Init()  //外部中断
{
  EX0=1;//打开外部中断
  IT0=1;//下降沿中断
}

//主函数
void main(void)
{
  Ex0_Init();
  Init_Uart(); //串口初始化
  Init_Time();	//定时器初始化
  while(1)
  {		
    P0=~led_data;
	if(send_flag)
	{
	TX_data(send_data);
	send_flag=0;
	}
  }
}
void EX0_INTER() interrupt 0    //外部中断1
{
  if(led_data==0x01)//刚好按下此时反向
  {
     flag=1;
	send_flag=1; 
	send_data=0xff; 
  }
  else
  {
  	flag=2;
	led_data=0;
	send_flag=1; 
	send_data=0; 
  }
}
//串口中断子函数
void Uart_INT(void) interrupt 4     
{
  uchar temp=0;
  if(RI==1)	//如果接收到了数据  
  { 
    RI=0; 
    temp=SBUF;//接收数据
	if(temp==0xff)
	{
	  flag=0;
	  led_data=0x80;
	}
	else
	{
	led_data=temp;
	}
  }
}

//定时中断子程序
void time0(void) interrupt 1 using 1  
{
  static uchar temp_time=0;
  TH0=(65536-10000)/256;//10MS
  TL0=(65536-10000)%256;

    if(++temp_time>=30)//1s
    {
      temp_time=0;
	  if(flag==0) //左移
	  {
		  if(led_data==0x01)//移动到最左边也没有按键那就失败
		  {
		   	led_data=0;
			flag=2;
			send_flag=1; 
		    send_data=0; 
			return;
		  }
		  led_data=led_data>>1;;
		  send_flag=1; 
		  send_data=led_data;
	  }

    }

  
}



硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8版本设计,与其他版本不兼容!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

 

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)等。具体内容如下,全网最全! !

 

可以关注下方公众号!

点赞分享一起学习成长。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值