📄 ball.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 + -