51單片機電子制作------籃球比賽計分器


51單片機電子制作------籃球比賽計分器

作者:李剴

出處:https://blog.csdn.net/Kevin_8_Lee

或者 https://www.cnblogs.com/kevin-nancy/

歡迎轉載,但也請保留上面這段聲明。謝謝!(上面兩個都是我的博客,只是在不同平台)

這個也是可以用於單片機課設的一個小東西。 同樣和之前的交通燈項目一樣,我用同樣的方法介紹一下

1) 題目及設計要求

題目: 籃球比賽計分器
要求:
1、兩隊各三位顯示,共計六位數碼顯示;

2、設A、B隊加、減分按鍵,復位鍵;

3、加減分實現1分、2分、3分加減。

2) C51編程以及電路仿真軟件

編程:: 同樣使用keil3或者keil4,以keil4為例

軟件就不截圖了,可以看我關於交通燈的那篇blog
https://www.cnblogs.com/kevin-nancy/p/10993057.html

或者 https://blog.csdn.net/Kevin_8_Lee/article/details/91351632

3) 解決思路

使用矩陣鍵盤作為按鍵輸入,分別設置A、B兩隊加減1、2、3分按鍵以及清零按鍵
在這里插入圖片描述

在proteus中,我的接線如下

在這里插入圖片描述

使用兩個四位八段的數碼管(共陰極)顯示
在這里插入圖片描述
**PS:**其他的都跟我之前的那篇交通燈的制作類似
但是有一個問題在那篇博客忘記說了,這里寫一下
在這里插入圖片描述
上圖圈起來那塊那個復位用的電阻,必須設置為Digital類型的,否則無法使用復位按鈕
雙擊元件,即可修改
在這里插入圖片描述

4)軟件部分

這個整個流程比較簡單,程序流程圖如下
在這里插入圖片描述

同樣由於時間問題,沒心情用更簡單的方法改了,直接是無限掃描按鍵,

// 矩陣鍵盤掃描函數,返回16進制數
uchar KeyScan()	
{
	uchar cord_c,cord_r;        
	P3 = 0x0f;             
	if( (P3 & 0x0f) != 0x0f)    
	{
		delay_ms(5);              
		if( (P3 & 0x0f) != 0x0f)
		{
			  cord_r = P3 & 0x0f;
			  P3 = cord_c | 0xf0;
			  cord_c = P3 & 0xf0;
			  while( (P3 & 0xf0) != 0xf0 );
			  return (cord_c + cord_r);   
		}	
	}
		
}
// 不同的按鍵按下 執行不同的操作
void Key_score_Dispaly()
{
	switch( KeyScan() )
	{
		case 0xee: 
                flag = 0;
                teamA_scores++;	// A隊加分
                break;
		case 0xde: 
                flag = 1;
                teamA_scores--;
                break;
		case 0xbe: 
                flag = 2;
                teamB_scores++;
        		break;
		case 0x7e: 
                flag = 3;
                teamB_scores--;
        		break;
		
		case 0xed: 
                flag = 4;
                teamA_scores+=2;	// 兩分球
        		break;
		case 0xdd: 
                flag = 5;
                teamA_scores-=2;
        		break;
		case 0xbd: 
                flag = 6;
                teamB_scores+=2;
        		break;
		case 0x7d: 
                flag = 7;
                teamB_scores-=2;
        		break;

		
		case 0xeb:  
                flag = 8;
                teamA_scores+=3;	// 三分
        		break;
		case 0xdb:
                flag = 9;
                teamA_scores-=3;
        		break;
		case 0xbb:
                flag = 10;
                teamB_scores+=3;
        	    break;
		case 0x7b:
                flag = 11;
                teamB_scores-=3;
        	    break;

		
		case 0xe7:
                flag = 12;
                teamA_scores=0;  // 清零
                break;
		case 0xd7:
                flag = 13;
                teamA_scores=0;
        	    break;
		case 0xb7:
                flag = 14;
                teamB_scores=0;
        	    break;
		case 0x77:
                flag = 15;
                teamB_scores=0;
        	    break;
	}

    Display(teamA_scores, teamB_scores);  // 顯示

}
// 主函數無限循環
void main()
{
    system_Init();  // 初始化只是關閉數碼管
	while(1)
    {
        Key_score_Dispaly();
    }
}

放一下最終的效果吧
在這里插入圖片描述

路就在你腳下,只要走,就能到達遠方! 加油吧!

ps:這個做的並不是很好,代碼大多都是在循環中做,所以沒有太細致的講,但是用來做單片機的課設還是足夠了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM