作者 / 許年豐、張紅風、艾貽飛,鄭州大學信息工程學院
?
基于WiFi無線遙控的球賽計分器設計
作者 / 許年豐、張紅風、艾貽飛,鄭州大學信息工程學院
本文基于WiFi無線遙控技術,設計制作了一款籃球比賽計時計分器,并編寫了PC電腦端和安卓智能手機端的控制軟件。該計分器具有操作簡單、亮度動態范圍大的特點,可以滿足室內或室外籃球比賽的計時計分需求。
WiFi;計分器;智能手機
籃球比賽計分器包括主顯示面板、筆記本電腦控制端和智能手機控制端三部分組成,其中筆記本控制端和智能手機控制端可單獨控制顯示面板顯示比賽隊名、時間、比分等數據。主顯示面板包括STC89C58單片機控制板、ESP8266串口WIFI模塊、LED七段數碼管驅動板、LED七段數碼管、16×64點陣顯示模塊兩塊和電源模塊。筆記本電腦控制端或智能手機控制端運行計時、計分、控制程序,并將數據通過無線WiFi實時傳輸至主顯示面板予以顯示。總體設計框圖如圖1。

圖1 系統結構框圖
■2.1 單片機控制板
單片機控制板主要包括STC89C58單片機、74HC245總線驅動器、3.3V線性電源、ESP8266串口WiFi模塊組成和其他一些附屬元器件組成。
STC89C58單片機為控制核心,該單片機價格便宜,接口資源比較豐富,工作頻率高,運行速度快,片內RAM容量大,可以滿足16×128點陣數據的存儲和動態掃描需求。
3.3 V線性電源把5V電壓變換為3.3V,供ESP8266串口WiFi模塊使用,該線性電源采用的是AMS117-3.3芯片,該芯片輸入電壓范圍寬,輸出電流最大可達1A。
ESP8266模塊是一個完整且自成體系的WiFi網絡解決方案,可以配置成station 、AP、station+AP三種模式,在本設計中,單片機與ESP8266模塊通過串口連接,單片機采用AT指令將ESP8266配置為AP模式,并開啟模塊內部的TCP服務器,遠端計算機或智能手機接入該AP,并與模塊內部TCP服務器建立TCP連接收發數據,模塊接收的數據通過串口送至單片機進一步處理。
單片機通過AT指令控制ESP8266模塊建立TCP服務器主要代碼如下:
UART_Send(AT+CIPMUX=1 ”);//使能多連接
UART_Send(“AT+CIPSERVER=1,11000 ”);//建立TCP服務器,端口號為11000
■2.2 數碼管驅動板
數碼管驅動板主要由74HC595和ULN2803組成。74HC595是8位串行輸入/輸出或者并行輸出移位寄存器,內部還有一個8位存儲器,具有高阻關斷狀態。當OE端為低電平時,存儲器中的數據輸出到總線,OE為高電平時,總線為高阻態。ULN2803為8路NPN達林頓管驅動器,具有高耐壓和大電流的特點。一組74HC595和ULN2803可以驅動一位七段數碼管,顯示板需要16位七段數碼管同時顯示,為滿足亮度要求,本設計采用16組74HC595和ULN2803,靜態驅動16位數碼管。單片機輸出PWM信號控制所有74HC595的OE端,這樣數碼管的亮度可以大范圍的調整,滿足不同光照強度環境使用。
■2.3 點陣模塊
點陣模塊由4塊戶外P10單元板組成,P10單元板模組點數16×32,可顯示兩個16×16點陣漢字,4塊單元板串接組成16×128點陣,這樣可以同時顯示8個漢字,基本達到了任意顯示比賽隊名的目的。
■2.4 七段數碼管
普通成品LED七段數碼管尺寸較小、亮度暗,無法滿足室外顯示需要。因此本設計中使用的七段數碼管由高亮紅光LED組成,其中每段由10串6并或10串2并組成,每個數碼管用420個或120個高亮紅光LED組成,在亮度和尺寸上完全滿足了室外顯示要求。七段數碼管采用24V電源供電。
■2.5 電源模塊
電源模塊采用兩塊成品開關電源組成,一塊為24V輸出,主要供七段數碼管和ULN2803,一塊為5V輸出,主要供單片機控制板、七段數碼管驅動板和點陣模塊。

圖2 主顯示正面

圖3 主顯示背面
■2.6 主顯示面板效果
最終制作完成的主顯示面板實物如圖2、圖3。
PC端軟件設計所采用的開發環境為Visual Sdudio 集成開發環境,利用C#語言完成。PC端軟件主要分為計時、計分模塊、數據傳輸模塊、點陣提取模塊。
計時計分模塊利用Timer控件,每10ms產生一次中斷進行精確計時。
數據傳輸模塊主要功能是建立與主顯示面板的TCP連接,并從TCP連接中獲取輸入輸出流,建立與主顯示面板的數據通路,其主要代碼程序如下:
mytcp=new TcpClient();
mytcp.Connect(“192.168.4.1”, 11000);
sWrite = mytcp.GetStream();
點陣提取模塊可以方便的提取所需顯示漢字或字符的點陣數據,點陣提取程序的基本思想是利用GDI+在Bitmap上繪制所需顯示的漢字或字符,然后利用.GetPixel(x, y)函數獲取位圖中每個點的色彩并用0或1表示,最后將每八位0和1序列轉換為Byte字節流傳輸至主顯示面板顯示,其主要代碼如下:
Bitmap bmp = new Bitmap(64, 16);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.White, new Rectangle() { X = 0, Y = 0, Height = 16, Width = 64 });
g.DrawString(txtb.Text, txtb.Font, Brushes.Black, new PointF() { X = Convert.ToSingle(-3), Y = Convert.ToSingle(0) });
string dot = “”;
for (int count = 0; count < 1024; count++)
{
int y = count / 64;
int x = count % 64;
if (bmp.GetPixel(x, y).GetBrightness() > 0.5f)
{
dot = dot + “0”;
}
else
{
dot = dot + “1”;
}
}
PC端最終軟件效果如圖4所示,通過PC端軟件可方便的設置比賽隊名、隊名字體,并能對記分牌的亮度進行控制。

圖4 PC端軟件界面
將PC端控制程序移植到安卓智能手機終端,實現了與PC端相同的控制功能,與PC端相比,利用安卓智能手機控制記分牌的顯示可以更加方便。智能手機端控制程序效果如圖5所示。

圖5 手機端效果
經過實際測試,本設計中的籃球比賽計分器結構簡單、工作穩定可靠、操作簡單、亮度高且可調范圍大,室內或室外比賽均可使用。
* [1] 孫進平,張大鵬,丁金濱.51系列單片機原理、開發與應用實例.北京 中國電力出版社 2009.01
* [2]鄭萌,趙常松. Android 應用程序開發與典型案例. 北京: 電子工業出版社 2012.10
* [3]邵順增,李琳.C#程序設計:Windows項目開發 . 北京 清華
大學出版社 2012.10