Android计分器课程设计,课程设计题八:篮球比赛计分器

#define LDUAN  P0 //段选

#define LWEI   P2 //位选

#define RDUAN  P1 //段选

#define RWEI   P2 //位选

#define uchar unsigned char

#define uint  unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//  0    1    2    3    4    5    6    7    8    9    a    b    c    d    e   f

sbit key1=P3^0;   //左边加分

sbit key2=P3^1;  //左边减分

sbit key3=P3^2;  //右边加分

sbit key4=P3^3;  //右边减分

sbit key5=P3^6;  //交换场地

sbit led1=P3^4;  //左边 LED

sbit led2=P3^5;  //右边 LED

uchar lnum,rnum,a;//左方分数计数、右方分数计数、中间变量

void delay(unsigned int num)     //延时函数

{

unsigned i,j;

for(i=num;i>0;i--)

for(j=120;j>0;j--);

}

void main()

{

led1=0;   //关闭LED

led2=0;   //关闭LED

while(1)

{

/数码管显示/

P2=0xff;

LWEI=0xfb;

LDUAN=table[lnum%100/10];

delay(5);

P2=0xff;

LWEI=0xf7;

LDUAN=table[lnum%100%10];

delay(5);

LWEI=0xfd;

LDUAN=table[lnum/100];

delay(5);

P2=0xff;

RWEI=0xbf;

RDUAN=table[rnum%100/10];

delay(5);

P2=0xff;

RWEI=0x7f;

RDUAN=table[rnum%10];

delay(5);

RWEI=0xdf;

RDUAN=table[rnum/100];

delay(5);

/左边加分/

if(!key1)

{

delay(10);  //延时消抖

if(!key1)

{

lnum++;  //分数加1

led1=1;  //LED亮

delay(500);  //延时

led1=0;  //LED灭

while(!key1); //等待按键释放

}

}

/左边减分/

if(!key2)

{

delay(10);  //延时消抖

if(!key2)

{

lnum--;  //分数减1

led1=1;  //LED亮

delay(500);  //延时

led1=0;  //LED灭

while(!key2); //等待按键释放

}

}

/右边加分/

if(!key3)

{

delay(10);  //延时消抖

if(!key3)

{

rnum++;  //分数加1

led2=1;  //LED亮

delay(500);  //延时

led2=0;  //LED灭

while(!key3); //等待按键释放

}

}

/右边减分/

if(!key4)

{

delay(10);   //延时消抖

if(!key4)

{

rnum--;   //分数减1

led2=1;   //LED亮

delay(500);   //延时

led2=0;   //LED灭

while(!key4);   //等待按键释放

}

}

/左右分数交换/

if(!key5)

{

delay(10);   //延时消抖

if(!key5)

{

a=rnum;   //右边分数赋值给中间变量

rnum=lnum;   //左右分数交换

lnum=a;   //左右分数交换

while(!key5);   //等待按键释放

}

}

//

}

}

----------------------------------控制时间部分-------------------------------

/*******************************************************************************

================================================================================

【平    台】STC89C51_sumjess平台

【编    写】sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2019年06月10日

【相关信息参考下列地址】

【网    站】

https://blog.csdn.net/qq_38351824

http://www.51hei.com/bbs/mcu-2-1.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.02及以上版本

【Target  】STC89C51

第一次修订:2019/05/09

第二次修订:2019/05/21

第三次修订:2019/06/10

【problem 】

(1)库内补充的不全面;

(2)库内解释部分不全面;

(3)库内还存在一定的bug;

【direction】

下一步的目标就是把库继续集成!

【explain 】

为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!

【warning】

目前程序中暂无错误 !

---------------------------------------------------------------------------------

没有完美的代码,只有不断的奉献,大家一起努力;

赠人玫瑰手留余香,欢迎大家反馈bug!

================================================================================

********************************************************************************/

/控制时间单片机/

#include #define DUAN P0 //段选

#define WEI  P2 //位选

#define uchar unsigned char

#define uint  unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//  0   1   2     3    4    5    6    7    8    9a    b  c   de f

sbit key0=P3^0; //归零

sbit key1=P3^1;//归12

sbit key2=P3^2;//分钟加一

sbit key3=P3^3;//暂停/开始

sbit beep=P3^7;//蜂鸣器

uint addnum;//加一分钟

uchar miaonum,fennum;//秒数,分数

uchar b;

void delay(unsigned int num)     //延时函数

{

unsigned i,j;

for(i=num;i>0;i--)

for(j=120;j>0;j--);

}

/*

当用定时器的方式2时,设机器周期为Tcy,定时器产生一次中断的时间为t,

那么需要计数的个数N=t/Tcy,

装入THX和TLX中的数分别为THX=256-N,TLX=256-N

256 ---因为计数器是8位,所以最大装载值256 = 2^8

*/

void Init_TIMER0_2(void)        //使用定时器0  ---  11.0592M晶振  1次中断为271.275μs,3686次为1s

{

TMOD=0x02;//设置定时器0为工作方式2(M1M0为10)

TH0=256-250;     //装初值11.0592M晶振定时271.275μs数为250

TL0=256-250;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

}

void main()

{

Init_TIMER0_2();//定时器初始化

beep=0;//关闭蜂鸣器

b=10;//延时---蜂鸣器使用

fennum=12;//分钟初始化

miaonum=0;//秒钟初始化

while(1)

{

/数码管显示/

P2=0xff;

WEI=0xef;

DUAN=table[miaonum/10];

delay(5);

P2=0xff;

WEI=0xdf;

DUAN=table[miaonum%10];

delay(5);

P2=0xff;

WEI=0Xf7;

DUAN=0X40;

delay(5);

P2=0xff;

WEI=0xfd;

DUAN=table[fennum/10];

delay(5);

P2=0xff;

WEI=0xfb;

DUAN=table[fennum%10];

delay(5);

/按键---清零/

if(!key0) //清零

{

delay(10); //延时消抖

if(!key0)

{

fennum=0; //分钟赋值为0

miaonum=0; //秒钟赋值为0

}

while(!key0); //等待按键释放

}

/按键---分钟归12/

if(!key1) //分钟归12

{

delay(10); //延时消抖

if(!key1)

{

fennum=12;     //分钟赋值为12

miaonum=0;     //秒钟赋值为0

}

while(!key1); //等待按键释放

}

/按键---分钟加1/

if(!key2) //分钟加1

{

delay(10); //延时消抖

if(!key2) fennum++; //分钟加1

while(!key2); //等待按键释放

}

/按键---暂停/开始/

if(!key3)   //暂停/开始

{

delay(10);   //延时消抖

if(!key3)

{

TR0=~TR0;   //定时器开关

while(!key3);//等待按键释放

}

}

}

}

void timer0() interrupt 1

{

addnum++;

if(addnum==400)

{

if(fennum!=0)

{

if(miaonum==0)

miaonum=59,fennum--,addnum=0;

else

miaonum--;

addnum=0;

}

if(fennum==0)

{

if(miaonum==0)

miaonum=0;

else

miaonum--;

addnum=0;

}

if(fennum==0)

{

if(miaonum==0)

{

if(b==0)

beep=0;

else

beep=1,b--;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值