⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ball.c

📁 stc51的串口通讯和74HC595驱动程序调试过绝对正确
💻 C
字号:
#include<STC89C51.H>

#define   R_SIGN   0xff       //AVR接收成功标志
#define TIME0_COUNT   0xee18
#define TIME1_COUNT	  0xFDFD


sbit   TIME_G     =	  P1^5 ;
sbit   TIME_CLR   =	  P4^2	;
sbit   TIME_CLK   =	  P1^6	;
sbit   TIME1_IN   =	  P1^2	 ;
sbit   TIME2_IN   =	  P1^3	 ;
sbit   TIME3_IN   =	  P1^4	 ;
				  
sbit   SCORE_CLK  	=  P4^0	  ;
sbit    SCORE_CLR    =	  P2^0	 ;
sbit    SCORE_G       =  P2^1	;
sbit    SCORE1_IN    =   P2^2	;
sbit    SCORE2_IN     =  P2^3	;
sbit    SCORE3_IN    =  P2^4	 ;
sbit    MOTOR1    =  P2^5	 ;
							   


int  score;
int  gametime; 
int  motortime ;
int  ms	;
int  timer0_tick	;
bit motor ;

  void init(void);
  void dis_time(int) ;
//  void dis_score(int);
  void send(int);
  char receive();
  void  Send_Byte(unsigned char DSend);

code seven_seg[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F
,0X6F};


 void main(void)////////////////////主函数
 {
   init();	  //初始化函数
   while(1)
	{	
	   dis_time(gametime);					//显示时间
//	   dis_score(score);					//显示分数
//	   MOTOR1=motor;                 //开关电机
//       Send_Byte(0x56);
	   send(gametime);					//发送分数
//	   ms=receive();				//接受标志
//	   while(ms!=R_SIGN)
//	   {
//	   	;
//	   }
//	   ms=0;						//标志归0

   }

 }
 ////////////////////////////////////////////////////////////////////////////////初始化函数
void init(void)
{ 
	/////////////////全局变量初始化
//	score=0;
	gametime=999; 
//	motortime=0 ;
//	ms=0	;
	timer0_tick=0	;
//	motor=0;

	/////////////////////其他资源初始化
	EA=0;//关中断
	ES=0;
	ET2=0;
	TR0=0;
	TR1=0;
	TMOD=0x21;
//	PT1=1; //TIME1优先
//	IT0=1;//在TCON中INTO下降沿触发
//	IT1=1;
	PCON=0;//SMODE=0;  串口中使用
	SCON=0x50;//串口工作在方式1
  //  T2CON = 0x34;//由T2作为波特率发生器

	TL1=0xFD;// TIME1初始值  
	TH1=0xFD;	
				  					
	TL0=(TIME0_COUNT & 0x00FF);// TIME0初始值  
	TH0=(TIME0_COUNT>>8) ;
//	EX0=1;
//	EX1=1;
 

	ET0=1;
	ET1=0;
	TR0=1;
	TR1=1;
	EA=1;

}

////////////////////////////////////////////////////////////////////////////时间显示函数

void dis_time(int gametime)
{           
	int ge,bai,shi;
	 bai=gametime/100;	//计算每个数码管要显示的数值
	 shi=gametime%100;
	shi=shi/10;
	ge=gametime%10 ;
	TIME_CLR=0;
	TIME_CLR=1;

	TIME_G=0;

	TIME_CLK=0;                 //写入百位的bit7
	if(seven_seg[bai]&0x80)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x80)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x80)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit6
	if(seven_seg[bai]&0x40)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x40)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x40)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit5
	if(seven_seg[bai]&0x20)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x20)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x20)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit4
	if(seven_seg[bai]&0x10)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x10)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x10)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit3
	if(seven_seg[bai]&0x08)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x08)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x08)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit2
	if(seven_seg[bai]&0x04)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x04)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x04)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit1
	if(seven_seg[bai]&0x02)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x02)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x02)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;
	TIME_CLK=0;                 //写入百位的bit0
	if(seven_seg[bai]&0x01)
	TIME1_IN=1;
 	else 
	TIME1_IN=0; 
	if(seven_seg[shi]&0x01)
	TIME2_IN=1;
 	else 
	TIME2_IN=0; 
	if(seven_seg[ge]&0x01)
	TIME3_IN=1;
 	else 
	TIME3_IN=0; 
	TIME_CLK=1;

	TIME_CLK=0;
	TIME_CLK=1;

	TIME_G=0;
}
 /*
///////////////////////////////////////////////////////////////////////////////分数显示函数

 void dis_score(int gamescore)
{
	char ge;
	char bai=gamescore/100;	//计算每个数码管要显示的数值
	char shi=gamescore%100;
	shi=shi/10;
	ge=gamescore%10;
	SCORE_CLR=0;
	SCORE_CLR=1;

	SCORE_CLK=0;                 //写入百位的bit7
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^7 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^7 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^7 ;
	SCORE_CLK=1;

	SCORE_CLK=0;                 //写入百位的bit6
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^6 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^6 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^6 ;
	SCORE_CLK=1;

	SCORE_CLK=0;                 //写入百位的bit5
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^5 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^5 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^5 ;
	SCORE_CLK=1;

 	SCORE_CLK=0;                 //写入百位的bit4
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^4 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^4 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^4 ;
	SCORE_CLK=1;

	SCORE_CLK=0;                 //写入百位的bit3
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^3 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^3 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^3 ;
	SCORE_CLK=1;

	SCORE_CLK=0;                 //写入百位的bit2
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^2 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^2 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^2 ;
	SCORE_CLK=1;


	SCORE_CLK=0;                 //写入百位的bit1
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^1 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^1 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^1 ;
	SCORE_CLK=1;

	SCORE_CLK=0;                 //写入百位的bit0
	ACC=seven_seg[bai];
	SCORE1_IN=ACC^0 ;
	ACC=seven_seg[shi];
	SCORE2_IN=ACC^0 ;
	ACC=seven_seg[ge];
	SCORE3_IN=ACC^0 ;
	SCORE_CLK=1;
}
*/

////////////////////////////////////////////////////////////////////////接受数据
 char receive( )
{
	while(1)
	{
		if(RI==1)
		 {		     
			 char temp=SBUF;
		     RI=0;
			 return(temp);
		 }
	}

}
//////////////////////////////////////////////////////////////发送数据
void Send_Byte(unsigned char DSend)
{
TI = 0;
SBUF = DSend;
while(TI == 0);
TI = 0;
}

 void send(int gamescore)
{
    char ge;
	char bai=gamescore/100;	//计算当前分数
	char shi=gamescore%100;
	shi=shi/10;
	ge=gamescore%10;
	TI=0;
	SBUF=ge;
	while(TI==0)
	{
		;
	}
	TI=0;////////////

receive( );

	SBUF=shi;//////////////////
	while(TI==0)
	{
		;
	}
	TI=0;////////////////
receive( );

	SBUF=bai;
	while(TI==0)
	{
		;
	}
	TI=0;
receive( );

}
//////////////////////////////////////////////////////////////////////中断服务函数


static void timer0_isr(void) interrupt 1 using 1	   
{
    TR0=0;
    TL0=(TIME0_COUNT & 0x00FF);
    TH0=(TIME0_COUNT >> 8);
    TR0=1;
	timer0_tick++;
	if (timer0_tick==200)
	 {
		timer0_tick=0;	//游戏时间计算
		gametime--;
		if(gametime<=0)
	     gametime=0;
		
/*		motortime++;  //电机时间计算
		if(motortime==60)
	     motortime=0;
		 motor=~motor;
*/
	 }
}

 /*
static void xint0_isr(void) interrupt 0		//投币中断
{
  gametime=gametime+60;
}

static void xint1_isr(void) interrupt 2   //进球中断
{
	if(motor)
	score=score+1;
	score=score+1;
}
   */












⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -