仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【D06】
1. 简介
本文介绍一种用AT89C51作为核心部件进行逻辑控制及信号产生的单片机技术和C语言编程设计的篮球比赛计时器。此篮球计时计分器在硬件方面主要采用AT89C51单片机作为主控核心,由独立按键、蜂鸣器、数码管显示屏显示。具有灵活方便、适用范围广的特点,基本能够满足实践需求。
2. 主要功能
a.支持按键设置开始、暂停、24S倒计时复位、A队加减分、B队加减分、交换场地。
b.支持数码管显示A队、B队分数、比赛时间、24S倒计时。
c.支持比赛结束后蜂鸣器告警。
3. 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#include<reg51.h>
#define LEDData P0
unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int minit,second,count,count1; //分,秒,计数器
char min=12,sec=0;
sbit add1=P1^0; //甲对加分,每按一次加1分 /在未开始比赛时为加时间分
sbit dec1=P1^1; //甲对减分,每按一次减1分 /在未开始比赛时为减时间分
sbit exchange=P1^2; //交换场地
sbit add2=P1^3; //乙对加分,每按一次加1分 /在未开始比赛时为加时间秒
sbit dec2=P1^4; //乙对减分,每按一次减1分 /在未开始比赛时为减时间秒
sbit p24_sec=P1^5;
sbit secondpoint=P0^7; //秒闪动点
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
sbit led5=P2^3;
sbit led6=P2^2;
sbit led7=P2^1;
sbit led8=P2^0;
sbit led9=P3^7;
sbit led10=P3^6;
sbit led11=P3^5;
sbit led12=P3^4;
sbit alam=P1^7; //报警
bit playon=0; //比赛进行标志位,为1时表示比赛开始,计时开启
bit timeover=0; //比赛结束标志位,为1时表示时间已经完
bit AorB=0; //甲乙对交换位置标志位
bit halfsecond=0; //半秒标志位
unsigned int scoreA; //甲队得分
unsigned int scoreB; //乙队得分
char sec24=24;
void Delay5ms(void)
{
unsigned int i;
for(i=100;i>0;i--);
}
void Delay(void)
{
unsigned int i;
for(i=10000;i>0;i--);
}
void display(void)
{
//-----------显示时间分--------------
LEDData=LEDCode[minit/10];
led1=0;
Delay5ms();
led1=1;
LEDData=LEDCode[minit%10];
led2=0;
Delay5ms();
led2=1;
//-------------秒点闪动------------
if(halfsecond==1)
LEDData=0x7f;
else
LEDData=0xff;
led2=0;
Delay5ms();
led2=1;
secondpoint=0;
//-----------显示时间秒------------
LEDData=LEDCode[second/10];
led3=0;
Delay5ms();
led3=1;
LEDData=LEDCode[second%10];
led4=0;
Delay5ms();
led4=1;
//-----------显示1组的分数百位-------
if(AorB==0)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led5=0;
Delay5ms();
led5=1;
//---------------显示1组分数的十位-----------
if(AorB==0)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led6=0;
Delay5ms();
led6=1;
//---------------显示1组分数的个位-----------
if(AorB==0)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led7=0;
Delay5ms();
led7=1;
//-----------显示2组分数的百位-------
if(AorB==1)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led8=0;
Delay5ms();
led8=1;
//-----------显示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=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led10=0;
Delay5ms();
led10=1;
4. 仿真proteus8.6
本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
开始:
加分:
5. 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6. 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
7. 资料获取链接
百度网盘下载链接:【D06】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集