• 方案介紹
    • 1.? 簡介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的籃球比賽計(jì)時(shí)器(一)

04/07 09:50
511
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號(hào):【D01】

1.? 簡介

本文介紹一種用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è)置開始、暫停、清除、A加分、B加分。

b.支持?jǐn)?shù)碼管顯示A隊(duì)、B隊(duì)分?jǐn)?shù)、比賽時(shí)間。

c.支持LED燈顯示比賽運(yùn)行狀態(tài)。

d.支持比賽結(jié)束后蜂鳴器告警。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED_RED 	=	P1^0;		  //定義LED指示燈接口
sbit LED_YELLOW =	P1^1;		  //定義LED指示燈接口
sbit LED_GREEN	=	P1^2;		  //定義LED指示燈接口
sbit K1=P1^3; //定義按鍵接口
sbit K2=P1^4;
sbit K3=P1^5;
sbit K4=P1^6;
sbit K5=P1^7;
sbit BUZZ=P3^2;
uchar Display_data[6]= {0,0,0,0,0,0}; //存儲(chǔ)要顯示的數(shù)值
uchar time_count=0,time_1s=0;
uchar status=0;	//比賽的狀態(tài)
uchar A_val=0,B_val=0;	//AB得分
uchar Run_time=0;//比賽時(shí)間
uchar game_over_falg=0;//  比賽結(jié)束標(biāo)志位
uint game_over_delay=0;  //比賽結(jié)束后的延時(shí)

//************************************
//定時(shí)器初始化
//************************************
void Time0_init()
{
    TMOD |= 0x01;			 //使用模式1,16位定時(shí)器
    TH0   = (65536-10000)/256;	//定時(shí)器裝入初始值10ms
    TL0   = (65536-10000)%256;
    EA    = 1;  //總中斷
    ET0   = 1;//定時(shí)器0初始化
    TR0   = 1;
}
void delay_ms(uint i)//1ms延時(shí)
{
    uchar x,j;
    for(j=0; j<i; j++)
        for(x=0; x<=148; x++);
}
//掃描按鍵
uchar KEY_Scan()
{
    static uchar key_up=1;//按鍵松開標(biāo)志

    if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
    {
        delay_ms(5);//去除抖動(dòng)
        key_up=0;
        if(K1==0)return 1;
        else if(K2==0)return 2;
        else if(K3==0)return 3;
        else if(K4==0)return 4;
        else if(K5==0)return 5;
    } else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;
    return 0;// 無按鍵按下
}
//數(shù)碼管刷新函數(shù)
void Dis_num()
{
    uchar table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xf7,0XAF,0XFF};	//共陽數(shù)碼管編碼
    static uchar i;
    P0 = 0xff;
    P2=1<<i;
    P0 = table[Display_data[i]];
    i++;
    if(i>5)i=0;
}
//*************************************
//主函數(shù)
///***********************************
void main(void)
{
    uchar key_num;
//初始化指示燈
    LED_YELLOW = 1;
    LED_GREEN=1;
    LED_RED=1;
    BUZZ=1;
    Time0_init();
    while(1)
    {
        if(status==0)	 //比賽停止
        {
            LED_YELLOW = 1;
            LED_GREEN=1;
            LED_RED=0;
        }
        else if(status==1)	 //比賽暫停
        {
            LED_YELLOW = 0;
            LED_GREEN=1;
            LED_RED=1;
        }
        else if(status==2)	 //比賽開始
        {
            LED_YELLOW = 1;
            LED_GREEN=0;
            LED_RED=1;
        }
        key_num = KEY_Scan(); //獲取按鍵值
        switch(key_num)
        {
        case 1: //開始
            if(status==0)
			{
				Run_time=12;
            	status=2;
            	game_over_falg=0;
            	BUZZ=1;//關(guān)閉蜂鳴器
			}
            break;
        case 2: //暫停
			if(status==2)
            	status=1;
			else if(status==1)
            	status=2;	
            break;
        case 3: //清除
            status=0;
            A_val=0;
            B_val=0;
            Run_time=0;
            break;
        case 4:	//A加分
            if(status==2)
                A_val+=1;
            if(A_val>99)A_val=99;
            break;
        case 5:	//B加分
            if(status==2)
                B_val+=1;
            if(B_val>99)B_val=99;
            break;
        }
        Display_data[0]=A_val/10;
        Display_data[1]=A_val%10;
        Display_data[2]=B_val/10;
        Display_data[3]=B_val%10;
        Display_data[4]=Run_time/10;
        Display_data[5]=Run_time%10;
        Dis_num();//顯示
    }

4.? 仿真proteus8.6

本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用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)盤下載鏈接:【D01】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦