篮球赛计时计分器的设计_第1页
篮球赛计时计分器的设计_第2页
篮球赛计时计分器的设计_第3页
篮球赛计时计分器的设计_第4页
篮球赛计时计分器的设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 题 目 篮球赛计时计分器的设计 学生姓名 李照明 学号 所在学院 陕西理工学院 专业班级 电子1203班 指导教师 梁芳 完成地点 物理与电信工程学院实验室 2016 年 6 月 2 日 篮球赛计时计分器的设计 作者:李照明 (陕西理工学院 物理与电信工程学院 电子信息工程专业12级3班,陕西 ) 指导老师:梁芳 摘要介绍基于STC89C51单片机的篮球比赛计时计分系统。本次设计的篮球赛计时计分系统通过STC89C51编 程控制LED七段数码管来实现计时和计分的功能。通过按键控制电路设置比赛定时时间,暂停时间,立即刷新甲、 乙两队的比分, 比赛进行到半场结束交换场地时,两队比分能交换显示的位

2、置,比赛结束时,系统可以发出报警的指令以及在赛后 及时暂存成绩等功能。该系统价格低廉,性能稳定,携带方便且操作简洁,广泛应用于各类学校或者小型团体作为 赛程计时计分。 关键词单片机;篮球比赛计时计分器;数码管 Design of timing and scoring device for basketball match Author:Zhaoming Li (Grade 12,Class 03,Major in Electronics /数码管0-9的编码 unsigned char minit,second,count,count1; /分,秒,计数器 sbit add1=P10;/甲对加

3、分,每按一次加1分 /在未开始比赛时为加时间分 sbit dec1=P11;/甲对减分,每按一次减1分 /在未开始比赛时为减时间分 sbit exchange=P12;/交换场地 sbit add2=P13;/乙对加分,每按一次加1分 /在未开始比赛时为加时间秒 sbit dec2=P14;/乙对减分,每按一次减1分 /在未开始比赛时为减时间秒 sbit secondpoint=P07;/秒闪动点 /-数码管的位选控制脚,共有11位数码管- sbit led1=P27; sbit led2=P26; sbit led3=P25; sbit led4=P24; sbit led5=P23; sb

4、it led6=P22; sbit led7=P21; sbit led8=P20; sbit led9=P37; sbit led10=P36; sbit led11=P35; sbit alam=P17;/报警 bit playon=0;/比赛进行标志位,为1时表示比赛开始,计时开启 bit timeover=0;/比赛结束标志位,为1时表示时间已经完 bit AorB=0;/甲乙对交换位置标志位 bit halfsecond=0;/半秒标志位 unsigned int scoreA;/甲队得分 unsigned int scoreB;/乙队得分 /=延时= void Delay5ms(v

5、oid) unsigned int i; for(i=100;i0;i-); void display(void) /-显示时间分- LEDData=LEDCodeminit/10; /显示分钟的十位 led1=0;/开启位选 Delay5ms();/延时,以便足以点亮数码管。 led1=1;/关闭位选 LEDData=LEDCodeminit%10;/显示分钟的个位 led2=0; Delay5ms(); led2=1; /-秒点闪动- if(halfsecond=1) LEDData=0 x80; else LEDData=0 x00; led2=0; Delay5ms(); led2=1

6、; secondpoint=0; /-显示时间秒- LEDData=LEDCodesecond/10;/显示秒钟的十位 led3=0; Delay5ms(); led3=1; LEDData=LEDCodesecond%10;/显示秒钟的个位 led4=0; Delay5ms(); led4=1; /-显示1组的分数百位- if(AorB=0) LEDData=LEDCodescoreA/100; else LEDData=LEDCodescoreB/100; led5=0; Delay5ms(); led5=1; /-显示1组分数的十位- if(AorB=0) LEDData=LEDCode

7、(scoreA%100)/10; else LEDData=LEDCode(scoreB%100)/10; led6=0; Delay5ms(); led6=1; /-显示1组分数的个位- if(AorB=0) LEDData=LEDCodescoreA%10; else LEDData=LEDCodescoreB%10; led7=0; Delay5ms(); led7=1; /-显示2组分数的百位- if(AorB=1) LEDData=LEDCodescoreA/100; else LEDData=LEDCodescoreB/100; led8=0; Delay5ms(); led8=1

8、; /-显示2组分数的十位- if(AorB=1) LEDData=LEDCode(scoreA%100)/10; else LEDData=LEDCode(scoreB%100)/10; led9=0; Delay5ms(); led9=1; /-显示2组分数的个位- if(AorB=1) LEDData=LEDCodescoreA%10; else LEDData=LEDCodescoreB%10; led10=0; Delay5ms(); led10=1; /=按键检测程序= = void keyscan(void) if(playon=0)/在比赛未开始的状态下 if(add1=0)/

9、当add1按键按下时 display();/调用显示,同时作为延时消抖 if(add1=0);/延时消抖后,依然检查到按键按下 if(minit0) minit-; else minit=0; do display(); while(dec1=0); if(add2=0)/调整秒,与上原理相同 display(); if(add2=0); if(second0) second-; else second=0; do display(); while(dec2=0); if(exchange=0)/换场键 display(); if(exchange=0); TR1=0;/关闭T1计数器 ala

10、m=1;/关报警 AorB=AorB;/开启交换 minit=15;/并将时间预设为15:00 second=0; do display(); while(exchange=0); else/在比赛开始时。 if(add1=0)/当add1键按下时, display();/调用显示,同时作为延时消抖, if(add1=0); if(AorB=0)/当场地标志位=0时, if(scoreA999)/当A方的比分小于999时,比分加1 scoreA+; else scoreA=999;/否则最大值为999分 else/当场地标志位=1时, if(scoreB0) scoreA-; else sco

11、reA=0; else if(scoreB0) scoreB-; else scoreB=0; do display(); while(dec1=0); if(add2=0)/原理与上一样 display(); if(add2=0); if(AorB=1) if(scoreA999) scoreA+; else scoreA=999; else if(scoreB0) scoreA-; else scoreA=0; else if(scoreB0) scoreB-; else scoreB=0; do display(); while(dec2=0); /*主函数* * void main(v

12、oid) TMOD=0 x11;/TMOD设置 TL0=0 xb0;/定时器0,初值为0 x3CB0,既定时0.05s TH0=0 x3c; TL1=0 xb0;/定时器1,初值为0 x3CB0,即定时0.05s TH1=0 x3c; minit=15;/初始值为15:00 second=0; EA=1;/开总中断 ET0=1;/开T0中断 ET1=1;/开T1中断 TR0=0; TR1=0; EX0=1;/开外部中断0 IT0=1; IT1=1; /EX1=1; PX0=1; /PX1=1; PT0=0; P1=0 xFF; P3=0 xFF; while(1) keyscan();/按键检

13、查 display();/显示程序 /=外部中断0中断程序= void PxInt0(void) interrupt 0 Delay5ms(); EX0=0;/关中断使能 alam=1;/关蜂鸣器 TR1=0;/关定时器0 if(timeover=1)/当一节比较时间结束时,结束标志位=1 timeover=0;/清除标志位 if(playon=0)/当比赛结束或暂停时 playon=1;/开始标志位 TR0=1;/开启计时 else playon=0;/开始标志位清零,表示暂停 TR0=0;/暂停计时 EX0=1;/重新开中断 /=定时器0中断服务函数= void time0_int(voi

14、d) interrupt 1 TL0=0 xb0;/重赋初值 TH0=0 x3c; TR0=1;/启动计时 count+;/软件计数器加1 if(count=10)/0.05s*10=0.5s,即0.5秒钟时 halfsecond=0;/半秒标志位清零 if(count=20)/0.05s*20=1s,即1秒钟 count=0;/清除计数器 halfsecond=1;/半秒标志置1 if(second=0) /倒计时,每计时1秒钟,时间减1,当秒=0时,秒=59,分钟减1 if(minit0) second=59; minit-; else/当分,秒都为0时,表示倒计时时间到, timeove

15、r=1;/时间标志位置1 playon=0;/比赛标志清0,表示1节比赛结束 TR0=0;/关闭定时器0 TR1=1;/开启定时1,使蜂鸣器报警 else second-; /=定时器1中断服务函数= void time1_int(void) interrupt 3 TL1=0 xb0;/重赋初值 TH1=0 x3c; TR1=1;/启动计时 count1+;/软件计数器加1 if(count1=10)/0.05s*10=0.5s,也就是半秒钟 alam=0;/开启蜂鸣器 if(count1=20)/0.05s*20=1s,也就是1秒钟 count1=0;/清除软件计数器, alam=1;/关闭蜂鸣器,也就是蜂鸣器以1秒的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论