




已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
淮陰師范學(xué)院畢業(yè)設(shè)計(jì) 畢 業(yè) 論 文物理與電子學(xué) 系 電子信息 專業(yè)題 目 競(jìng)賽打分系統(tǒng) (軟件設(shè)計(jì))學(xué)生姓名 學(xué)生班級(jí) 指導(dǎo)教師 2006年 5 月 28 日摘要:競(jìng)賽打分系統(tǒng)軟件是一個(gè)簡(jiǎn)單的信息接收與管理系統(tǒng),對(duì)于此系統(tǒng)要求功能完備,操作簡(jiǎn)單。關(guān)鍵字: Visual Basic 、串行通訊、競(jìng)賽Abstract:The competition hits subsystem software is a simple informationreceive and the management system management system, regarding thissystem requirement function complete, the operation is simple.Key words: Visual Basic, serial communication, competition目 錄1 引言 32 單片機(jī)介紹 33 軟件開發(fā)工具介紹 44打分系統(tǒng)44.1 分終端與主機(jī)(微機(jī))的通信方式542 打分終端設(shè)計(jì)643 軟件設(shè)計(jì)75.軟件的實(shí)現(xiàn) 851系統(tǒng)功能框圖85.2打分系統(tǒng)軟件設(shè)計(jì)9參考文獻(xiàn) 21結(jié)束語(yǔ) 22致謝231.引言在計(jì)算機(jī)的發(fā)展歷史上,運(yùn)算和控制一直是計(jì)算機(jī)功能實(shí)施的2條主線。其角色的轉(zhuǎn)換也常常困擾著人們的認(rèn)識(shí)思路和研發(fā)目標(biāo)。這是一對(duì)矛盾,對(duì)于不同的課題或截然不同的2個(gè)方面,用相同的價(jià)值去衡量顯然是不合適的。在20世紀(jì)70年代,半導(dǎo)體微電子專家為了繞開這個(gè)矛盾,深有遠(yuǎn)慮地另辟蹊徑,按照嵌入式微控器系統(tǒng)的發(fā)展思路,交一個(gè)微型計(jì)算核心部件集成在一個(gè)芯片上,這就形成最早的單片機(jī)。如今單片機(jī)的用途十分廣泛,這次畢業(yè)設(shè)計(jì)的內(nèi)容就是利用單片機(jī)與微機(jī)之間的數(shù)據(jù)傳輸和處理來(lái)實(shí)現(xiàn)競(jìng)賽打分系統(tǒng)。競(jìng)賽評(píng)分系統(tǒng)按照時(shí)下流行的評(píng)委打分方式設(shè)計(jì),有比較完善的競(jìng)賽評(píng)分功能。通過大屏幕,給觀眾強(qiáng)烈的視覺感受,凝聚比賽現(xiàn)場(chǎng)氣氛,體現(xiàn)評(píng)委公正裁決。該系統(tǒng)主要適用于企事業(yè)單位、學(xué)校、娛樂行業(yè)等組織的各類選拔賽、技能比武、運(yùn)動(dòng)會(huì)等活動(dòng),如:歌手大賽、演講比賽、朗誦比賽、模特選拔賽、演員考試、技能演示等。使活動(dòng)組織輕松且象電視節(jié)目一樣專業(yè)。本評(píng)分系統(tǒng)操作簡(jiǎn)單,實(shí)用性強(qiáng),是開展評(píng)委打分比賽的得力助手!本系統(tǒng)由計(jì)算機(jī)、打分終端、顯示終端等組成,采用總線結(jié)構(gòu),連線少、結(jié)構(gòu)簡(jiǎn)單,便于擴(kuò)展。2單片機(jī)介紹在20世紀(jì)70年代,半導(dǎo)體微電子專家按照嵌入式微控器系統(tǒng)的發(fā)展思路,交一個(gè)微型計(jì)算核心部件集成在一個(gè)芯片上,這就形成最早的單片機(jī)(single chip micrcomputer)。1974 年,美國(guó)仙童(Firchild)公司研制的世界第一臺(tái)單片微型機(jī)F8.該機(jī)有兩塊集成電路芯片組成,結(jié)構(gòu)奇特,具有與眾不同的指令系統(tǒng),深受民用電器和儀器儀表領(lǐng)域的歡迎和重視.從此,單片機(jī)開始迅速發(fā)展,應(yīng)用領(lǐng)域也在不斷擴(kuò)大。現(xiàn)已成為微型計(jì)算機(jī)的重要分支,單片機(jī)的發(fā)展過程通??梢苑譃橐幌聨讉€(gè)發(fā)展過程。(1)第一代單片機(jī)(1974-1976):這是單片機(jī)發(fā)展的起步階段.在這個(gè)時(shí)期生產(chǎn)的單片機(jī)特點(diǎn)是,制造工藝落后和集成度低,而且采用了雙片形式.典型的代表產(chǎn)品有Fairchild公司的F8和Mostek387公司的3870等.2)第二代單片機(jī)(1976-1978):這是單片機(jī)的第二發(fā)展階段.這個(gè)時(shí)代生產(chǎn)的單片機(jī)隨眼已能在單塊芯片內(nèi)集成CPU,并行口,定時(shí)器,RAM和ROM等功能部件,但性能低,品種少,應(yīng)用范圍也不是很廣,典型的產(chǎn)品有Inrel公司的MCS-48系列機(jī).(3)第三代單片機(jī)(1979-1982):這是八位單片機(jī)成熟的階段.這一代單片機(jī)和前兩代相比,不僅存儲(chǔ)容量和尋址范圍大,而且中斷源,并行I/O口和定時(shí)器/計(jì)數(shù)器個(gè)數(shù)都有了不同程度的增加,更有甚者是新集成了全雙工串行通信接口電路.在指令系統(tǒng)方面,普遍增設(shè)了乘除法和比較指令。這一時(shí)期生產(chǎn)的單片機(jī)品種齊全,可以滿足各種不同領(lǐng)域的需要。代表產(chǎn)品有Intel公司的MCS-51系列機(jī),Motorola公司的MC6801系機(jī),TI公司的TMS7000系列機(jī),此外,Rockwell,NS,GI和日本松下等公司也先后生產(chǎn)了自己的單片機(jī)系列.(4)第四代單片機(jī)(1983年以后):這是十六位單片機(jī)和八位高性能單片機(jī)并行發(fā)展的時(shí)代,十六位機(jī)的特點(diǎn)是,工藝先進(jìn),集成度高和內(nèi)部功能強(qiáng),加法運(yùn)算速度可達(dá)到1uS以上,而且允許用戶采用面向工業(yè)控制的專用語(yǔ)言,如PL/MPLUS C和Forth語(yǔ)言等.代便產(chǎn)品有intel公司的MCS-96系列,TI公司的TMS9900,NEC公司的783系列和NS公司的HPC16040等。然而,由于十六位單片機(jī)價(jià)格比較貴, 銷售量不大,大量應(yīng)用領(lǐng)域需要的是高性能,大容量和多功能新型八位單片機(jī).這些單片機(jī)有Intel公司的88044(雙CPU工作),Zilog公司的Super8(含DMA通道),Motorola公司的MC68CH11(內(nèi)含E2prom及A/D電路)和WDC公司的65C124(內(nèi)含網(wǎng)絡(luò)接口電路),等等。目前,八位高性能單片機(jī)以成為主流,單片機(jī)發(fā)展具體體現(xiàn)在以下幾個(gè)方面: 1.CPU功能增強(qiáng);2.內(nèi)部資源增多;3.引腳的多功能化;4.低電壓低功耗。3.軟件開發(fā)工具介紹 Visual basic簡(jiǎn)稱vb,它的功能強(qiáng)大,不僅僅在于他本身的變成能力,還在于它可以直接調(diào)用DLL,通過DLL程序員可以訪問構(gòu)成Windows操作系統(tǒng)的許多過程,例如窗口與圖形的顯示,內(nèi)存管理。人們將這些過程稱作Windows API。在這些API中還包含了成千上萬(wàn)的函數(shù),例如,類型和常量定義,通過在visual basic程序中聲明外部過程,能夠訪問并使用這些Windows API及其它外部DLL,調(diào)用他們的方法與調(diào)用visual basic 自己的過程相同。Active API控件的使用和OLE自動(dòng)化是增強(qiáng)vb功能的另外一個(gè)途徑,通過它們程序員能夠訪問外部應(yīng)用程序提供的大量對(duì)象。Vb允許選擇和管理外接程序,這是對(duì)vb的擴(kuò)充,這些擴(kuò)充增強(qiáng)了vb開發(fā)環(huán)境的能力。自從1991年推出以來(lái),vb已經(jīng)成為最為流行的編程語(yǔ)言之一,vb即visual basic,visual是指可視化的編程方法,basic是指在原有basic語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的編程語(yǔ)言,visial basci繼承了basic語(yǔ)言易學(xué)易用的特點(diǎn),。什么是可視化的編程方法呢?采用這種編程方法,可以不必通過代碼來(lái)描述界面上元素的外形和位置,只需要把事先建立的對(duì)象拖到屏幕上,再通過鼠標(biāo)的調(diào)節(jié)他們的位置和尺寸?,F(xiàn)在有了visual basic ,即使沒有經(jīng)過嚴(yán)格的程序設(shè)計(jì)培訓(xùn),也能開發(fā)出不錯(cuò)的程序,現(xiàn)在vb已經(jīng)有了數(shù)百個(gè)語(yǔ)句,函數(shù)及關(guān)鍵詞,其中有很多和windows GUI有直接關(guān)系。本打分系統(tǒng)采用了vb編程。4打分系統(tǒng)競(jìng)賽打分時(shí)通常有多個(gè)評(píng)委,每人一個(gè)終端,各個(gè)終端通過電纜與計(jì)算機(jī)相連,由計(jì)算機(jī)按照某種評(píng)分規(guī)則計(jì)算選手的最終得分,再顯示的大屏幕上。所以,設(shè)計(jì)本系統(tǒng)首先要確定各個(gè)終端與計(jì)算機(jī)的通信問題。41 分終端與主機(jī)(微機(jī))的通信方式(1)并行連接方式打分終端與主機(jī)的打印口相連接,采用總線方式,如下圖所示:。打分終端打分終端數(shù)據(jù)線8位地址線3-4位并口大屏幕每個(gè)打分終端設(shè)置不同的地址,用地址譯碼器對(duì)地址線上的信號(hào)進(jìn)行譯碼。主機(jī)采用查詢方式讀取第個(gè)打分終端上的數(shù)據(jù)。這種方式軟件和硬件設(shè)計(jì)簡(jiǎn)單,但連線多,另外,通信距離有限(數(shù)米內(nèi))。(2)采用單獨(dú)連接的串行通信方式每一個(gè)打分終端單獨(dú)用三根通信線與主機(jī)連接,主機(jī)需要有多串口卡。如下圖所示:打分終端打分終端。多串口卡大屏幕這種方式軟件設(shè)計(jì)簡(jiǎn)單,通信距離遠(yuǎn)(數(shù)十米),但連線多,另外,且主機(jī)需要有多串口卡。(3)采用總線結(jié)構(gòu)的串行通信方式。打分終端打分終端串口顯示終端 每個(gè)打分終端設(shè)置不同的地址,主機(jī)采用查詢方式讀取第個(gè)打分終端上的數(shù)據(jù)。這種方式必須采用RS-485通信,通信距離遠(yuǎn)(數(shù)十米),連線少,易于增減終端數(shù)量,但軟件設(shè)計(jì)稍復(fù)雜?;谏鲜鋈N方式的優(yōu)缺點(diǎn),我們選用了第三種方式,即RS-485總線方式。42 打分終端設(shè)計(jì)打分終端是一個(gè)單片機(jī)系統(tǒng),包括顯示器,鍵盤、RS485接口等部件。(1) 單片機(jī) 選用MCS51系列的AT89C51,該單片機(jī)芯片內(nèi)含4KB的程序存儲(chǔ)器,有四個(gè)8位的并行口和一個(gè)串行口,兩個(gè)16位計(jì)數(shù)/定時(shí)器,5個(gè)中斷源,這些內(nèi)部資源完全可以滿足本設(shè)計(jì)的需要。(2) 顯示器 打分終端上應(yīng)有顯示器,用于顯示分值,可選用數(shù)碼液晶顯示器或LED數(shù)碼管,考慮到成本原因,本設(shè)計(jì)采用4個(gè)LED數(shù)碼管作為顯示器。為了簡(jiǎn)化設(shè)計(jì),分值可為四位整數(shù)或小數(shù)。四個(gè)LED數(shù)碼管采用動(dòng)態(tài)掃描方式。(3) 鍵盤 有12個(gè)鍵,包括10個(gè)數(shù)字鍵、一個(gè)小數(shù)點(diǎn)鍵和一個(gè)確定鍵。12鍵連接成43的矩陣,占用單片機(jī)的7根并口線,軟件上采用反轉(zhuǎn)法讀取鍵盤。(4) 打分終端數(shù)量 為了簡(jiǎn)化硬件,本設(shè)計(jì)只制作了三個(gè)打分終端。(5)顯示終端本應(yīng)使用單片機(jī)控制大型LED數(shù)碼管顯示總得分,因條件限制,只使用4個(gè)小LED數(shù)碼管作顯示終端。43 軟件設(shè)計(jì)競(jìng)賽打分系統(tǒng)主機(jī)負(fù)責(zé)對(duì)終端進(jìn)行查詢,讀取分值,并進(jìn)行統(tǒng)計(jì)、顯示總分、存儲(chǔ)等。基于打分終端與主機(jī)之間采用RS-485總線連接,主機(jī)上需連接RS-232到RS-485轉(zhuǎn)換器,我們使用了商品化的轉(zhuǎn)換器。競(jìng)賽打分時(shí)通常要去掉一個(gè)最高分和一個(gè)最低分,剩余的取平均值或總和。本課題中打分終端數(shù)量少,所以不能去掉最高分和最低分,采用求總分或求均分的方法。軟件設(shè)計(jì)為在屏幕上顯示一個(gè)表格,分別顯示每個(gè)評(píng)委的打分及統(tǒng)計(jì)的總分(或均分),如下表所示:XXX競(jìng)賽成績(jī)統(tǒng)計(jì)表評(píng)委A評(píng)委B評(píng)委C總分參賽隊(duì)員1參賽隊(duì)員2軟件除了統(tǒng)計(jì)成績(jī)外,還應(yīng)能夠保存成績(jī),并可打開以往保存的比賽成績(jī)。5.軟件的實(shí)現(xiàn)51系統(tǒng)功能框圖編輯姓名編輯比賽項(xiàng)目設(shè)置評(píng)分規(guī)則裁判人數(shù)打分系統(tǒng)主界面得分表文件名次返回打開保存另存為串行通訊 圖 5.1.1從圖5.1.1的框圖可以分為兩個(gè)主要的窗口,既打分系統(tǒng)的主界面和顯示得分表的界面,在主界面我們主要是進(jìn)行打分前的設(shè)置,例如比賽的名稱,參賽選手的姓名,裁判的人數(shù),采用何種記分規(guī)則等等。而第二個(gè)主要窗口是用來(lái)顯示各選手的成績(jī)表,在該窗口中可以對(duì)各位選手的成績(jī)進(jìn)行排序,并且可以按照預(yù)先設(shè)置好的記分方式來(lái)顯示各各裁判所打的分?jǐn)?shù),并且記錄他們的總分或者是平均分?jǐn)?shù)。并且在該窗口中可以記錄保存選手的成績(jī)或者調(diào)出以往選手的成績(jī)。當(dāng)系統(tǒng)收到評(píng)委的打分時(shí),系統(tǒng)會(huì)根據(jù)打分終端的編號(hào)將數(shù)據(jù)顯示主窗口對(duì)應(yīng)的文本框中,同時(shí)填入成績(jī)表對(duì)應(yīng)的單元格中,保證兩個(gè)窗口中數(shù)據(jù)的一致性。5.2 打分系統(tǒng)軟件設(shè)計(jì) 本軟件主要部分分為兩部分,第一部分界面如圖5.2.1該界面主要是顯示裁判打分,并且顯示選手姓名,編號(hào)和得分。而選手姓名的編輯和打分規(guī)則的設(shè)置如下圖5.2.2和圖5.2.3,圖5.2.4圖5.2.1圖5.2.2 圖5.2.3圖5.2.41 主窗口部分在圖5.2.1中有兩個(gè)按鈕“前一選手”和“下一選手”其實(shí)現(xiàn)功能的代碼如下。Private Sub Command1_Click() 下一選手按鈕 If Index Form1.FG1.Rows - 1 Then Command2.Enabled = True Index = Index + 1 Call disp(Index) Else Command1.Enabled = False End IfEnd SubPrivate Sub Command2_Click() Index = Index - 1 Command1.Enabled = True Call disp(Index) If Index = 1 Then Command2.Enabled = False Command1.SetFocus End IfEnd Sub 初始化全局變量Index = 1,指向表格中的第一選手,這時(shí)“前一選手”按鍵為不可用狀態(tài),既將其Enabled屬性設(shè)置為False,“下一選手”按鍵的Enabled屬性為Ture,當(dāng)用戶電擊“下一選手”按鍵時(shí),將Index + 1,同時(shí)將“前一選手”按鍵設(shè)置為可用,同時(shí)判斷是否已達(dá)表格的最后一行,代碼If Index Form1.FG1.Rows 1 Then 就實(shí)現(xiàn)了上面的判斷功能,若已達(dá)最后一行,I則將該鍵設(shè)置為不可用,既語(yǔ)句Command1.Enabled = False按照新的Index值將相應(yīng)編號(hào)選手的得分情況顯示在主窗體上。 當(dāng)用戶點(diǎn)擊“前一選手”鍵時(shí),先將“下一選手”鍵設(shè)置為可用,將變量Index - 1,顯示相應(yīng)選手得分情況,同時(shí)判斷是否已經(jīng)達(dá)到表格第一行,若已達(dá)到,則將該按鈕設(shè)置為不可用。其判斷語(yǔ)句為If Index = 1 Then Command2.Enabled = False Command1.SetFocus End IfEnd Sub通常情況下,要去掉一個(gè)最高分,一個(gè)最低分,然后計(jì)算最后得分,但本系統(tǒng)由于只有三個(gè)打分終端,因此無(wú)法實(shí)現(xiàn)上述功能。在本系統(tǒng)里計(jì)算選手最后得分要根據(jù)評(píng)分規(guī)則和評(píng)委人數(shù),可以求總分或著求均分,其默認(rèn)為求總分。圖5.2.4就是設(shè)置求分方法的界面。其設(shè)置求均分或者總分的代碼如下:Public Sub Command1_Click() Dim I As Integer, N As Integer N = Combo1.Text For I = 0 To 7 先將8個(gè)格子全設(shè)置為不可操作 Form2.Text1(I).BackColor = &H80000000 灰色 Form2.Label3(I).Visible = False Next I For I = 0 To N - 1 再將 N 個(gè)格子設(shè)置為可操作 Form2.Text1(I).BackColor = &H80000005 白色 Form2.Label3(I).Visible = True Next I If Option1 Then Form1.FG1.TextArray(10) = 總分 Else Form1.FG1.TextArray(10) = 平均分 End If Form3.Hide Form2.Enabled = TrueEnd Sub在設(shè)置求分方法后,我們并沒有馬上計(jì)算總分或者是均分,而是把這個(gè)工作放在了Timer1_Timer這個(gè)事件中,Timer1_Timer將在以后說(shuō)明。在上面的程序里我門還能選擇裁判人數(shù),同時(shí)實(shí)現(xiàn)把沒有被選擇的裁判所在的格子變成灰色。在圖5.2.1中左下角中那個(gè)電話形狀的控件,那個(gè)是MSComm控件,它是用來(lái)控制pc機(jī)和單片機(jī)通信的。其設(shè)置如圖5.25圖5.2.5在該控件中的設(shè)置串口1的波特率9600bps,沒有校驗(yàn)碼,8位數(shù)據(jù)位,1位停止位。由于接收數(shù)據(jù)是隨機(jī)的,所以我們采用中斷方式接收,在程序中建立了一個(gè)該控件的MSComm1_OnComm的事件過程,并將其設(shè)置為當(dāng)收到第5個(gè)字符時(shí)開始中斷,打分中斷發(fā)送數(shù)據(jù)的格式為,終端編號(hào)4個(gè)字符,分?jǐn)?shù)可以是一到五個(gè)字符(含一個(gè)小數(shù)點(diǎn)),再加上1個(gè)字節(jié)累加和,所以每次通訊至少6個(gè)字符最多10個(gè)字符。由于打分終端發(fā)送每個(gè)數(shù)據(jù)的字符個(gè)數(shù)不等,為了能夠保證完整接收數(shù)據(jù),在 MSComm1_OnComm 事件過程中沒有立刻接收數(shù)據(jù),而是啟動(dòng)了一個(gè)定時(shí)器 ,定時(shí)器的時(shí)間值設(shè)置為0.1秒,過0.1秒后本次數(shù)據(jù)一定發(fā)送完畢,這時(shí)在定時(shí)器的Timer1_Timer事件過程中接收數(shù)據(jù),因?yàn)閭鬏斅蕿?600bps,所以傳輸每個(gè)字符的時(shí)間大約為1.1毫秒,所以10個(gè)字符傳輸?shù)臅r(shí)間最多為11毫秒。在Timer1_Timer事件過程中將接受到的數(shù)據(jù)一次性讀入到字符型變量中,截取其前4個(gè)字符為裁判號(hào),余下的字符為分值。把分值填入主窗體和表格的相應(yīng)單元格中。 計(jì)算機(jī)采用中斷方式接收打分鍵盤發(fā)過來(lái)的數(shù)據(jù),當(dāng)每次通信過程中收到5個(gè)字符時(shí)引發(fā)OnComm事件,在OnComm事件過程中并沒有去接收數(shù)據(jù),而只是啟動(dòng)定時(shí)器Timer1。下面是Timer1_Timer事件過程的原代碼:Private Sub Timer1_Timer()Dim L As Integer, N As Integer, S As Single, Sum As Single, I As IntegerTimer1.Enabled = False 禁止定時(shí)器Buf = MSComm1.Input 從串口緩沖區(qū)讀數(shù)據(jù) L = Len(Buf): If L 5 Then Exit Sub 不足5個(gè)字符則為錯(cuò)誤,不予處理N = 0For I = 1 To L 1 除最后一個(gè)字符外,循環(huán)求前面各個(gè)字符的累加和 N = N + Val(Mid(Buf, I, 1)Next IN = N Mod 16 保留低4位If N Val(Right(Buf, 1) ThenMSComm1.Output = Left(Buf, 4) & “R” 校驗(yàn)錯(cuò),向該終端發(fā)重發(fā)命令 Exit Sub 退出,放棄本次收到的數(shù)據(jù)End IfN = Val(Left(Buf, 4) S = Val(Right(Buf, L - 4) Text1(N - 1).Text = S L = Val(Text4.Text) Form1.FG1.TextArray(L * Form1.FG1.Cols + N + 1) = S Sum = 0 For I = 0 To 7 Sum = Sum + Val(Text1(I).Text) Next IIf Form3.Option2 Then Sum = Sum / Val(Form3.Combo1.Text) If Sum = 1 Then Text3.Text = CStr(Sum) Else Text3.Text = 0 & CStr(Sum) End IfForm1.FG1.TextArray(L * Form1.FG1.Cols + 10) = Sum Change = True End SubTimer1_Timer事件不但截取信號(hào)中的裁判號(hào)和所打的分?jǐn)?shù),而且實(shí)現(xiàn)了總分的計(jì)算和平均分的計(jì)算,(總分和平均分的設(shè)置在Command1_Click 設(shè)置里,既圖5.2.4),Sum = Sum + Val(Text1(I).Text)是計(jì)算總分的,Sum = Sum / Val(Form3.Combo1.Text)是用來(lái)計(jì)算平均分?jǐn)?shù)的。同時(shí)判斷得分是否小于1,若小于1 ,系統(tǒng)將在小數(shù)點(diǎn)前加零 ,代碼如下Text3.Text = 0 & CStr(Sum) 。 點(diǎn)擊“開始打分”按鈕,啟動(dòng)定時(shí)器2(Timer2), 定時(shí)器2的時(shí)間常數(shù)是200毫秒,即每隔0.2秒向打分終端發(fā)送一條打分命令(T命令),發(fā)完自動(dòng)禁止定時(shí)器。(初始狀態(tài)Timer2.Enabled = False)Private Sub Command3_Click()啟動(dòng)定時(shí)器2Command3.Enabled = FalseTimer2.Enabled = TrueEnd SubPrivate Sub Timer2_Timer()每隔0.2秒向1個(gè)打分終端發(fā)送1條T命令Static I as IntegerI = I + 1 If I Val(Form3.Combo1.Text) ThenI = 0Timer2.Enabled = FalseCommand3.Enabled = True Exit Sub發(fā)送完畢,關(guān)閉定時(shí)器2,退出 End IfMSComm1.Output = “000” & Chr(I + 64) & “T”End Sub2.記分表模塊 圖5.2.6記分表界面如圖5.2.6,在記分表模塊中我們使用了MSFlexGrid控件,由于該控件不是VB6.0的默認(rèn)控件,需要添加,點(diǎn)擊VB“工程”菜單 ,在打開的“部件”對(duì)話框中選擇“Microsoft FlexGrid Control 6.0”選中它并點(diǎn)擊“確定”按鈕即可。當(dāng)系統(tǒng)啟動(dòng)時(shí)觸發(fā)得分表Form_Load這個(gè)事件時(shí),系統(tǒng)將將把該控件進(jìn)行初始化設(shè)置,設(shè)置為21行,11列,其代碼如下:FG1.Cols = 11 FG1.FixedRows = 1 FG1.Rows = 21 FG1.FontSize = 12其中一行為表頭,其余為20個(gè)選手,當(dāng)添加選手超過20行,表的行樹將會(huì)自動(dòng)擴(kuò)展。而行的擴(kuò)展是在選手姓名編輯過程中就完成了。其實(shí)現(xiàn)方法如下:Do While I = Len(S) And K 0If J = Form1.FG1.Rows - 1 Then 若行數(shù)超過表的最后一行則擴(kuò)展一行 Form1.FG1.Rows = J + 1 For K = 1 To Form1.FG1.Cols - 1 Form1.FG1.Row = J 設(shè)置當(dāng)前單元格 Form1.FG1.Col = K Form1.FG1.CellAlignment = 4 該行各格文字居中中間對(duì)齊 Next K Form1.FG1.TextArray(J * Form1.FG1.Cols) = CStr(J) & 為該行加上編號(hào) End IfK = InStr(I, S, vbCrLf) 找回車符位置If K 0 Then C = Mid(S, I, K - I)ElseIf I = Len(S) Then C = Mid(S, I, Len(S) - I + 1)End IfForm1.FG1.TextArray(J * Form1.FG1.Cols + 1) = CJ = J + 1 行數(shù)加一I = K + 2 I 指針指向回車換行符后的字符Loop表的列數(shù)是固定的,不可擴(kuò)展,最左邊一列用于顯示行號(hào)(即選手編號(hào)),其余各列用于顯示選手姓名,各評(píng)委的打分和最后得分;表的行數(shù)據(jù)是可以擴(kuò)展的,系統(tǒng)剛啟動(dòng)時(shí)默認(rèn)21行,一行作表頭,其余20可放20個(gè)選手的比賽成績(jī),添加選手人數(shù)超過20人或打開的成績(jī)文件中選手人數(shù)超過20人時(shí),表的行數(shù)會(huì)看上去擴(kuò)充。3.文件處理 為了保存和打開得分表文件,設(shè)計(jì)了文件處理模塊,分為“保存”,“另存為”和“打開”三個(gè)模塊。 對(duì)于未保存的新表格,用戶點(diǎn)擊“保存”命令,將自動(dòng)打開“另存為”對(duì)話框,這時(shí)要求用戶輸入保存路徑和文件名,實(shí)現(xiàn)以上功能的代碼如下:Public Sub Save_Click() 保存文件 If Fname Then On Error Resume Next Open Fname For Output As #1 If Err 0 Then Err=0為無(wú)錯(cuò)誤 MsgBox Error, 16 Fname = Exit Sub End If A = Label1.Caption Write #1, A For I = FG1.FixedRows To FG1.Rows - 1 For J = FG1.FixedCols To FG1.Cols - 1 A = FG1.TextArray(I * FG1.Cols + J) Write #1, A Next J Next I Change = False Close Else Call SavAs_Click 轉(zhuǎn)文件另存為 End If Caption = 比賽成績(jī)表 & -文件名: & FnameEnd SubPrivate Sub SavAs_Click() Dim A As String, I As Integer, J As Integer CommonDialog1.Filter = *.sco(比賽成績(jī)文件)|*.sco CommonDialog1.Flags = 6 使“另存為”對(duì)話框當(dāng)選擇的文件已經(jīng)存在時(shí)應(yīng)產(chǎn)生一個(gè)信息框,用戶必須確認(rèn)是否覆蓋該文件,隱藏只讀復(fù)選框。 CommonDialog1.CancelError = True 當(dāng)選取“取消”按鈕時(shí)是出錯(cuò) On Error Resume Next CommonDialog1.ShowSave If Err = cdlCancel Then Exit Sub End If Fname = CommonDialog1.FileName If Fname = Then Exit Sub On Error Resume Next Open Fname For Output As #1 If Err 0 Then Err=0為無(wú)錯(cuò)誤 MsgBox Error, 16 Fname = Exit Sub End If A = Label1.Caption Write #1, A For I = FG1.FixedRows To FG1.Rows - 1 For J = FG1.FixedCols To FG1.Cols - 1 A = FG1.TextArray(I * FG1.Cols + J) Write #1, A Next J Next I Change = False Caption = 比賽成績(jī)表 & -文件名: & Fname CloseEnd Sub對(duì)保存過的的得分表再進(jìn)行保存時(shí),不會(huì)出現(xiàn)對(duì)話框而是按照原來(lái)的路徑和文件名保存。本系統(tǒng)中文件的格式采用順序文件,純文本方式,文件后綴為“.sco”,用Windows的記事本也可以打開,用記事本打開時(shí)第一行為比賽名稱,其余每一行對(duì)應(yīng)表格中的一個(gè)單元格,順序?yàn)閺淖蟮接遥瑥纳系较碌姆绞健?圖5.2.7為了不遺忘保存數(shù)據(jù),我們?cè)谙到y(tǒng)設(shè)置了一個(gè)全局的邏輯型變量用作文件被修改標(biāo)志,該邏輯變量在標(biāo)準(zhǔn)模塊中定義如下:Public Change As Boolean有了這個(gè)變量,一旦成績(jī)被修改,就將其設(shè)置為Ture,保存過后將其設(shè)置為False。若成績(jī)被修改后未保存就關(guān)閉程序,系統(tǒng)會(huì)出現(xiàn)一個(gè)對(duì)話框,提示用戶選擇“保存成績(jī)退出”、“不保存成績(jī)退出”或“放棄退出”。在文本處理模塊中我們還用了一個(gè)公共對(duì)話框控件Common Dialog。Common Dialog控件功能強(qiáng)大,可以打開許多種Windows對(duì)話框,在本系統(tǒng)中只使用了“另存為”和“打開”著兩個(gè)功能,這兩個(gè)功能在上文已經(jīng)敘述過,在這里就不再重復(fù)了。在設(shè)置Common Dialog的屬性時(shí),見圖5.2.7,我們把Cancel Erron設(shè)置為Ture,這個(gè)作用是當(dāng)用戶點(diǎn)擊“取消”按鈕時(shí),發(fā)出錯(cuò)誤信息。FileName屬性值是用戶在對(duì)話框中選定或輸入的文件路徑和文件名。4.排序模塊 排序模塊:當(dāng)用戶點(diǎn)擊圖5.2.6上的“名次”命令時(shí),系統(tǒng)啟動(dòng)排序程序,這里使用的是選擇排序方法,排序的依據(jù)是表中各行的“得分”一欄,序列為從高到低,即降序。這時(shí)各行的序號(hào)即為選手名次,排列中沒有考慮并列名次。Private Sub Sort_Click() 排名次 Dim I As Integer, J As Integer, K As Integer Dim T(10) As String, M As Integer, N As Integer M = FG1.Rows: N = FG1.Cols For I = FG1.FixedRows To M - 2 For J = I + 1 T
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 綿陽(yáng)綠卡服務(wù)管理辦法
- 宜昌物業(yè)收費(fèi)管理辦法
- 托管機(jī)構(gòu)配送管理辦法
- 育兒健康教育課件
- 肥鄉(xiāng)實(shí)驗(yàn)中學(xué)消防課件
- 套管培訓(xùn)大綱課件
- 腸癌化療護(hù)理
- 網(wǎng)球培訓(xùn)教程課件圖片
- 對(duì)口高考最難數(shù)學(xué)試卷
- 高中1到9章的數(shù)學(xué)試卷
- 大廈工程施工設(shè)計(jì)方案
- 2025-2030中國(guó)電力設(shè)備檢測(cè)行業(yè)市場(chǎng)深度調(diào)研及發(fā)展前景與投融資戰(zhàn)略規(guī)劃研究報(bào)告
- 2025至2030年中國(guó)不銹鋼蝕刻板數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- DB42T743-2016 高性能蒸壓砂加氣混凝土砌塊墻體自保溫系統(tǒng)應(yīng)用技術(shù)規(guī)程
- 軟件研發(fā)行業(yè)安全生產(chǎn)培訓(xùn)
- 《供應(yīng)鏈管理法律風(fēng)險(xiǎn)》課件
- 兒童專注力訓(xùn)練300題可打印
- 2025年度工業(yè)園區(qū)物業(yè)管理及服務(wù)收費(fèi)標(biāo)準(zhǔn)及細(xì)則
- 三升四數(shù)學(xué)暑假思維訓(xùn)練題答案
- 2024-2030年中國(guó)橋梁管理與養(yǎng)護(hù)市場(chǎng)調(diào)查研究及發(fā)展趨勢(shì)分析報(bào)告
- 山東省菏澤市2023-2024學(xué)年高一下學(xué)期7月期末考試 政治 含解析
評(píng)論
0/150
提交評(píng)論