#include"reg52.h"
#define u8 unsigned char
#define u16 unsigned int
sbit UP_1 = P1^1 //第一队加分键
sbit DOWN_1 = P1^2 //第一队减分键
sbit UP_2 = P1^3 //第二队加分键
sbit DOWN_2 = P1^4 //第二队减分键
sbit Change = P1^5 //交换键
sbit Begin = P1^6 //开始键
sbit Pause = P1^7 //暂停键
sbit Beef = P2^4 //蜂鸣器
sbit duan = P2^3 //段选
sbit wei = P2^2 //位选
u8 Grate_1=0 //第一队计分
u8 Grate_2=0 //第二队计分
u8 Grate_change=0 //换场标志
u8 Time = 99 //总时间
u16 Flag=0 //计时次数
u8 leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
}
void InitTimer1(void)
{
TMOD = 0x10 //定时器1设为模式1
TH1 = 0xFC
TL1 = 0x18 //1ms
EA = 1 //开总中断
ET1 = 1 //开定时器1中断
// TR1 = 1 //
}
void delay(u8 d) //延时
{
u8 a,b,c
for(c=dc>0c--)
for(b=17b>0b--)
for(a=16a>0a--)
}
void beef(u8 d) //发声
{
u8 a,b,c
for(c=dc>0c--)
for(b=17b>0b--)
for(a=16a>0a--)
{
Beef=~Beef
}
}
void display(u8 grate_1,u8 grate_2,u8 time) //显示
{
u8 w1,w2,w3,w4,w7,w8
w1=grate_1/10 //计算第一队分数十位
w2=grate_1%10 //计算第一队分数个位
w3=grate_2/10 //计算第二队分数十位
w4=grate_2%10 //计算第二队分数个位
w7=time/10 //计算时间十位
w8=time%10 //计算时间个位
P0=0xff //消隐,该段显示第一队分数十位
wei=1
P0=0xfe //送位码
wei=0
P0=0xff
duan=1
P0=leddata[w1] //送段码
duan=0
delay(5)
P0=0xff //显示第一队分数个位
wei=1
P0=0xfd
wei=0
P0=0xff
duan=1
P0=leddata[w2]
duan=0
delay(5)
P0=0xff //显示第二队分数十位
wei=1
P0=0xf7
wei=0
P0=0xff
duan=1
P0=leddata[w3]
duan=0
delay(5)
P0=0xff //显示第二队分数个位
wei=1
P0=0xef
wei=0
P0=0xff
duan=1
P0=leddata[w4]
duan=0
delay(5)
P0=0xff //显示时间十位
wei=1
P0=0xbf
wei=0
P0=0xff
duan=1
P0=leddata[w7]
duan=0
delay(5)
P0=0xff //显示时间个位
wei=1
P0=0x7f
wei=0
P0=0xff
duan=1
P0=leddata[w8]
duan=0
delay(5)
}
void main()
{
InitTimer1() //初始化定时器1
UP_1 = 1 //以下初始化IO口
DOWN_1 = 1
UP_2 = 1
DOWN_2 = 1
Change = 1
Begin = 1
while(1)
{
if(UP_1==0) //如果第一队加分键按下
{
ET1 = 0 //关闭定时器1中断
delay(5) //稍加延时
while(UP_1==0)//等待按键抬起
Grate_1++ //第一队分数加1
ET1 = 1 //开启定时器1中断
}
if(DOWN_1==0) //如果第一队减分键按下
{
ET1 = 0
delay(5)
while(DOWN_1==0)
Grate_1-- //第一队分数减1
ET1 = 1
}
if(UP_2==0) //如果第二队加分键按下
{
ET1 = 0
delay(5)
while(UP_2==0)
Grate_2++ //第二队分数加1
ET1 = 1
}
if(DOWN_2==0) //如果第二队减分键按下
{
ET1 = 0
delay(5)
while(DOWN_2==0)
Grate_2-- //第二队分数减1
ET1 = 1
}
if(Change==0) //如果换场键按下
{
ET1 = 0
delay(5)
while(Change==0)
Grate_change=Grate_1 //一下三行语句完成分数交换显示
Grate_1=Grate_2
Grate_2=Grate_change
ET1 = 1
}
if(Begin==0) //如果开始键按下
{
delay(5)
while(Begin==0)
TR1 = 1 //开启定时器1
}
if(Pause==0)
{
delay(5)
while(Pause==0)
TR1=0
}
if(Time<=0) //如果时间计数到0
{
Time=99 //恢复初始时间
TR1 = 0 //关闭定时器1
beef(100) //发声
}
display(Grate_1,Grate_2,Time) //显示分数、时间
}
}
void Timer1Interrupt(void) interrupt 3 //定时器1中断函数
{
TH1 = 0xFC //重赋初值
TL1 = 0x18
Flag++ //中断次数加1
if(Flag>=1000)//1000次也就是1秒到
{
Flag=0
Time-- //秒变量减1
}
}
class Ball {public void play() {
System.out.println("玩球儿...")
}
}
class Football extends Ball {
public void play() {
System.out.println("使用足球运动")
}
}
class Basketball extends Ball {
public void play() {
System.out.println("使用篮球运动")
}
}
public class TestMain {
public static void main(String[] args) {
TestMain tm = new TestMain()
tm.testPlay()
}
public void testPlay() {
Ball ball = new Football()
ball.play()
ball = new Basketball()
ball.play()
}
}
/*
D:\>javac TestMain.java
D:\>java TestMain
使用足球运动
使用篮球运动
*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)