仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計(jì)編號(hào):【D06】
1.? 簡(jiǎn)介
? 本文介紹一種用AT89C51作為核心部件進(jìn)行邏輯控制及信號(hào)產(chǎn)生的單片機(jī)技術(shù)和C語言編程設(shè)計(jì)的籃球比賽計(jì)時(shí)器。此籃球計(jì)時(shí)計(jì)分器在硬件方面主要采用AT89C51單片機(jī)作為主控核心,由獨(dú)立按鍵、蜂鳴器、數(shù)碼管顯示屏顯示。具有靈活方便、適用范圍廣的特點(diǎn),基本能夠滿足實(shí)踐需求。
2.? 主要功能
a.支持按鍵設(shè)置開始、暫停、24S倒計(jì)時(shí)復(fù)位、A隊(duì)加減分、B隊(duì)加減分、交換場(chǎng)地。
b.支持?jǐn)?shù)碼管顯示A隊(duì)、B隊(duì)分?jǐn)?shù)、比賽時(shí)間、24S倒計(jì)時(shí)。
c.支持比賽結(jié)束后蜂鳴器告警。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用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; //分,秒,計(jì)數(shù)器
char min=12,sec=0;
sbit add1=P1^0; //甲對(duì)加分,每按一次加1分 /在未開始比賽時(shí)為加時(shí)間分
sbit dec1=P1^1; //甲對(duì)減分,每按一次減1分 /在未開始比賽時(shí)為減時(shí)間分
sbit exchange=P1^2; //交換場(chǎng)地
sbit add2=P1^3; //乙對(duì)加分,每按一次加1分 /在未開始比賽時(shí)為加時(shí)間秒
sbit dec2=P1^4; //乙對(duì)減分,每按一次減1分 /在未開始比賽時(shí)為減時(shí)間秒
sbit p24_sec=P1^5;
sbit secondpoint=P0^7; //秒閃動(dòng)點(diǎn)
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; //報(bào)警
bit playon=0; //比賽進(jìn)行標(biāo)志位,為1時(shí)表示比賽開始,計(jì)時(shí)開啟
bit timeover=0; //比賽結(jié)束標(biāo)志位,為1時(shí)表示時(shí)間已經(jīng)完
bit AorB=0; //甲乙對(duì)交換位置標(biāo)志位
bit halfsecond=0; //半秒標(biāo)志位
unsigned int scoreA; //甲隊(duì)得分
unsigned int scoreB; //乙隊(duì)得分
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)
{
//-----------顯示時(shí)間分--------------
LEDData=LEDCode[minit/10];
led1=0;
Delay5ms();
led1=1;
LEDData=LEDCode[minit%10];
led2=0;
Delay5ms();
led2=1;
//-------------秒點(diǎn)閃動(dòng)------------
if(halfsecond==1)
LEDData=0x7f;
else
LEDData=0xff;
led2=0;
Delay5ms();
led2=1;
secondpoint=0;
//-----------顯示時(shí)間秒------------
LEDData=LEDCode[second/10];
led3=0;
Delay5ms();
led3=1;
LEDData=LEDCode[second%10];
led4=0;
Delay5ms();
led4=1;
//-----------顯示1組的分?jǐn)?shù)百位-------
if(AorB==0)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led5=0;
Delay5ms();
led5=1;
//---------------顯示1組分?jǐn)?shù)的十位-----------
if(AorB==0)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led6=0;
Delay5ms();
led6=1;
//---------------顯示1組分?jǐn)?shù)的個(gè)位-----------
if(AorB==0)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led7=0;
Delay5ms();
led7=1;
//-----------顯示2組分?jǐn)?shù)的百位-------
if(AorB==1)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led8=0;
Delay5ms();
led8=1;
//-----------顯示2組分?jǐn)?shù)的十位-----------
if(AorB==1)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led9=0;
Delay5ms();
led9=1;
//-----------顯示2組分?jǐn)?shù)的個(gè)位-----------
if(AorB==1)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led10=0;
Delay5ms();
led10=1;
4.? 仿真proteus8.6
? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
開始:
加分:
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【D06】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集