貴州電子信息職業(yè)技術(shù)學(xué)院通信工程系 吳政江
微電腦控制簡(jiǎn)易球賽計(jì)分牌的設(shè)計(jì)與制作
貴州電子信息職業(yè)技術(shù)學(xué)院通信工程系 吳政江
球類(lèi)比賽中裁判需要計(jì)分時(shí)通常需要計(jì)分牌,以便及時(shí)、準(zhǔn)確、清楚地記錄并顯示比賽雙方的得分,體現(xiàn)比賽的公正性以及渲染比賽的緊張氣氛。傳統(tǒng)的計(jì)分牌采用黑板加粉筆方式,計(jì)分麻煩且不環(huán)保。用單片機(jī)來(lái)設(shè)計(jì)計(jì)分牌可謂得心應(yīng)手。本文介紹一款微電腦控制簡(jiǎn)易球賽計(jì)分牌的設(shè)計(jì)與制作。硬件上,它是一個(gè)具有數(shù)碼管顯示、按鍵輸入、數(shù)據(jù)運(yùn)算等比較完整的單片機(jī)應(yīng)用系統(tǒng)。軟件上,采用C語(yǔ)言編程。旨在向廣大單片機(jī)愛(ài)好者介紹單片機(jī)應(yīng)用系統(tǒng)的基本開(kāi)發(fā)過(guò)程以及C語(yǔ)言程序設(shè)計(jì)方法。
單片機(jī);計(jì)分牌;設(shè)計(jì);制作
電子信息類(lèi)專(zhuān)業(yè)各骨干課程不但有較難理解的理論分析,也有大量的實(shí)際應(yīng)用電路,因而既要學(xué)習(xí)理論,更要?jiǎng)邮謱?shí)踐,理論性和實(shí)踐性均很強(qiáng)。然而,當(dāng)前職業(yè)學(xué)校學(xué)生普遍存在文化基礎(chǔ)不牢,接受能力不佳,學(xué)習(xí)積極性、分析問(wèn)題與解決問(wèn)題能力不高的現(xiàn)實(shí)情況。因此,長(zhǎng)期以來(lái),職業(yè)學(xué)校電子信息類(lèi)專(zhuān)業(yè)各骨干課程理論教學(xué)方法枯燥,實(shí)驗(yàn)教學(xué)可操作性差,課程設(shè)計(jì)缺乏創(chuàng)新,結(jié)果大多數(shù)學(xué)生對(duì)這些課程理論理解不清,實(shí)驗(yàn)走過(guò)場(chǎng),課程設(shè)計(jì)找槍手,考試弄虛作假。針對(duì)這一問(wèn)題,我們提出了用計(jì)算機(jī)仿真技術(shù)對(duì)電子信息類(lèi)專(zhuān)業(yè)各骨干課程進(jìn)行教學(xué)改革的思想。本文是用Proteus仿真軟件對(duì)單片機(jī)課程進(jìn)行教學(xué)改革的一個(gè)綜合應(yīng)用。用單片機(jī)設(shè)計(jì)一個(gè)簡(jiǎn)易球賽計(jì)分牌。硬件上,它是一個(gè)具有數(shù)碼管顯示、按鍵輸入、數(shù)據(jù)運(yùn)算等比較完整的單片機(jī)應(yīng)用系統(tǒng)。軟件上,采用C語(yǔ)言編程。
1.1 球賽計(jì)分牌功能模塊劃分
(1)人機(jī)對(duì)話(huà)功能模塊。計(jì)分牌應(yīng)能及時(shí)輸入比賽雙方得分,故電路要求有人機(jī)對(duì)話(huà)功能。這里用4個(gè)按鍵來(lái)改變比賽雙方得分,按鍵SW1與SW2用來(lái)增加及減少比賽一方(如A方)得分?jǐn)?shù);按鍵SW3與SW4用來(lái)增加及減少比賽另一方(如B方)得分?jǐn)?shù)。
(2)顯示模塊。采用4只共陽(yáng)極數(shù)碼管顯示得分情況,最大顯示比分為99∶99,基本能滿(mǎn)足小型比賽要求。其中“∶”由兩只紅色發(fā)光二極管代替,開(kāi)機(jī)時(shí)即亮。
(3)單片機(jī)模塊。這里采用AT89C51單片機(jī)加復(fù)位電路與時(shí)鐘電路即可,無(wú)需外擴(kuò)存儲(chǔ)器與I/O口。
(4)電源模塊。單片機(jī)所需的+5V電源可由220伏的交流市電經(jīng)降壓、整流、濾波與穩(wěn)壓得到。
1.2 硬件電路設(shè)計(jì)
根據(jù)以上功能模塊劃分,確定球賽計(jì)分牌硬件電路[1]如圖1所示(電源電路略去未畫(huà),實(shí)際制作時(shí)應(yīng)補(bǔ)上)。對(duì)該電路簡(jiǎn)要分析如圖1所示。
(1)核心部分是由AT89C51單片機(jī)與復(fù)位電路以及時(shí)鐘電路組成的單片機(jī)最小應(yīng)用系統(tǒng)。
(2)根據(jù)計(jì)分牌功能要求,用4個(gè)共陽(yáng)極數(shù)碼管顯示比賽雙方得分,數(shù)字顯示中間分隔符“∶”利用兩只紅色發(fā)光二極管來(lái)實(shí)現(xiàn)。
(3)Q1、Q2、Q3、Q4為4個(gè)共陽(yáng)極數(shù)碼管驅(qū)動(dòng)三極管,目的是增強(qiáng)單片機(jī)I/O口的電流驅(qū)動(dòng)能力。
(4)由于本項(xiàng)目涉及到的按鍵數(shù)較少,故采用獨(dú)立式鍵盤(pán)結(jié)構(gòu)。4只按鍵分別連接單片機(jī)的P1.4~P1.7口(實(shí)際制作時(shí)可任選單片機(jī)其他I/O口,但程序應(yīng)作相應(yīng)的調(diào)整)。
根據(jù)硬件電路,設(shè)比賽雙方為A與B,按鍵SW1與SW2設(shè)為A方得分加、減按鍵;按鍵SW3與SW4設(shè)為B方得分加、減按鍵。程序采用模塊化設(shè)計(jì),由主函數(shù)及相關(guān)子函數(shù)組成。
2.1 主函數(shù)
完成對(duì)四個(gè)獨(dú)立按鍵的無(wú)限循環(huán)判斷,并調(diào)動(dòng)態(tài)掃描函數(shù)顯示比賽雙方得分?jǐn)?shù)。其流程圖[2]如圖2所示。
2.2 動(dòng)態(tài)掃描函數(shù)
完成BCD碼轉(zhuǎn)換、動(dòng)態(tài)數(shù)碼管顯示,同時(shí)用于按鍵延時(shí)消抖。

圖1 球賽計(jì)分牌電路
2.3 5ms延時(shí)函數(shù)
完成5ms延時(shí),供動(dòng)態(tài)掃描函數(shù)調(diào)用。
這里給出C語(yǔ)言參考源程序如下所示。
#include〈reg51.h〉
#define uchar unsigned char
#define uint unsigned int
sbit sw1=P1?7; //定義A方增加鍵
sbit sw2=P1?6; //定義A方減少鍵
sbit sw3=P1?5; //定義B方增加鍵
sbit sw4=P1?4; //定義B方減少鍵
uchar duanma[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x 92,0x82,0xF8,0x80,0x90}; //共陽(yáng)極數(shù)碼管0到9的段碼
uchar weima[4]={0x7f,0xbf,0xdf,0xef}; //共陽(yáng)極數(shù)管位碼
uchar xianshi[4]={0,0,0,0}; //顯示緩存器
uint jishu=0,affs=0,bffs=0; //定義變量
void dtsm(void); //聲明動(dòng)態(tài)掃描函數(shù)
/*延時(shí)約5毫秒函數(shù)*/
void delay05ms(void)
{
uchar j,k;
for(j=10;j〉0;j--)
for(k=110;k〉0;k--);
}
如圖2所示。
/*主函數(shù)*/
void main(void)
{
while(1) //無(wú)限循環(huán)
{
dtsm(); //*******************按鍵判斷**** ********************************
if(sw1==0) //A方加分鍵按下嗎
{
dtsm(); //調(diào)動(dòng)態(tài)掃描函數(shù)兼作延時(shí)消抖
if(sw1==0) //A方加分鍵還按下嗎

圖2 計(jì)分牌主函數(shù)流程圖
{
affs++; //A方分?jǐn)?shù)加1
if(affs==100)affs=99; //最大為99
while(sw1==0)dtsm(); //等待A方加分鍵釋放
}
}
if(sw2==0) //A方減分鍵按下嗎
{
dtsm(); //調(diào)動(dòng)態(tài)掃描函數(shù)兼作延時(shí)消抖
if(sw2==0) //A方減分鍵還按下嗎
{
affs--; //A方分?jǐn)?shù)減1
if(affs==-1)affs=0; //最小為0
while(sw2==0)dtsm(); //等待A方減分鍵釋放
}}
if(sw3==0) //判斷B方加分鍵
{
dtsm();
if(sw3==0)
{
bffs++;
if(bffs==100)bffs=99;
while(sw3==0)dtsm();
}}
if(sw4==0) //判斷B方減分鍵
{
dtsm();
if(sw4==0)
{
bffs--;
if(bffs==-1)bffs=0;
while(sw4==0)dtsm();
}}}}
/*動(dòng)態(tài)掃描函數(shù)*/
void dtsm(void)
{
xianshi[0]=duanma[affs/10]; //分離A方分?jǐn)?shù)十位
xianshi[1]=duanma[affs%10]; //分離A方分?jǐn)?shù)個(gè)位
xianshi[2]=duanma[bffs/10]; //分離B方分?jǐn)?shù)十位
xianshi[3]=duanma[bffs%10]; //分離B方分?jǐn)?shù)個(gè)位
//*******************動(dòng)態(tài)掃描**************** *****************
jishu++;
if(jishu==4)jishu=0;
P2=0x00;
P2=weima[jishu]; //送位碼
P0=xianshi[jishu]; //送段碼
delay05ms();
}
本程序采用模塊化設(shè)計(jì)有利于程序的升級(jí)與修改。程序中按鍵“去抖”不用延時(shí)子函數(shù)而用動(dòng)態(tài)掃描函數(shù)代替,可以提高程序效率,避免在調(diào)用延時(shí)子函數(shù)時(shí)數(shù)碼管亮度下降甚至出現(xiàn)閃爍現(xiàn)象。調(diào)用一次動(dòng)態(tài)掃描函數(shù)相當(dāng)于延時(shí)約8ms。這是采用動(dòng)態(tài)數(shù)碼管顯示時(shí)的應(yīng)用技巧之一。
(1)啟動(dòng)Proteus軟件,并用其繪制圖1所示電路原理圖。
(2)啟動(dòng)Keil軟件。建立工程,輸入上述C語(yǔ)言源程序并編譯調(diào)試生成二進(jìn)制的目標(biāo)文件。
(3)將第(2)步生成的二進(jìn)制目標(biāo)文件加載到第(1)步所繪電路原理圖的AT89C51單片機(jī)中,然后仿真運(yùn)行。按下SW1~SW4中的任一按鍵,觀(guān)察相應(yīng)的數(shù)碼管顯示是否變化,其變化是否符合要求。
(4)購(gòu)買(mǎi)元器件,按硬件電路焊好電路板,將參考程序?qū)懭階T89C51單片機(jī),通電。按下SW1~SW4中的任一按鍵,觀(guān)察相應(yīng)的數(shù)碼管顯示是否變化,其變化是否符合要求。調(diào)試完成后,將產(chǎn)品投入實(shí)際的球類(lèi)比賽(如籃球比賽)中使用,看是否能適應(yīng)實(shí)際的現(xiàn)場(chǎng)比賽。
文中從電路結(jié)構(gòu)與工作原理、軟件規(guī)劃與設(shè)計(jì)以及系統(tǒng)調(diào)試等三個(gè)方面簡(jiǎn)要介紹了微電腦控制簡(jiǎn)易球賽計(jì)分牌的設(shè)計(jì)與制作。是采用Proteus仿真軟件對(duì)單片機(jī)原理及應(yīng)用課程進(jìn)行教學(xué)改革的一個(gè)綜合性應(yīng)用實(shí)例。硬件上,它是一個(gè)具有數(shù)碼管顯示、按鍵輸入、數(shù)據(jù)運(yùn)算等比較完整的單片機(jī)應(yīng)用系統(tǒng)。軟件上,采用C語(yǔ)言編程。涉及單片機(jī)的內(nèi)部結(jié)構(gòu)及最小應(yīng)用系統(tǒng)、獨(dú)立式鍵盤(pán)結(jié)構(gòu)與設(shè)計(jì)、LED數(shù)碼管接口技術(shù)及其動(dòng)態(tài)顯示原理以及C語(yǔ)言程序設(shè)計(jì)等單片機(jī)知識(shí)。旨在向廣大單片機(jī)愛(ài)好者介紹單片機(jī)應(yīng)用系統(tǒng)的基本開(kāi)發(fā)過(guò)程以及C語(yǔ)言程序設(shè)計(jì)方法。
[1]吳政江,張定祥.單片機(jī)原理及應(yīng)用(基于C語(yǔ)言)[M].北京:化學(xué)工業(yè)出版社,2013.
[2]舒?zhèn)ゼt.單片機(jī)原理與實(shí)訓(xùn)教程[M].北京:科學(xué)出版社,2008.
2014年貴州省高校人文社會(huì)科學(xué)研究項(xiàng)目“基于計(jì)算機(jī)仿真技術(shù)的電子信息類(lèi)骨干課程課改研究”(負(fù)責(zé)人:吳政江;編號(hào):14ZC261)。
吳政江,貴州電子信息職業(yè)技術(shù)學(xué)院副教授,主要研究方向:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)、電子信息技術(shù)、職業(yè)教育等。