




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)時(shí)短信互動(dòng)平臺(tái)設(shè)計(jì)摘要:隨著手機(jī)的普及,短信已經(jīng)成為現(xiàn)代人的一種主要交流方式,但短信的應(yīng)用不僅局限在人們之間點(diǎn)對(duì)點(diǎn)的交流,其同樣能應(yīng)用于課堂教學(xué)、大型活動(dòng)的實(shí)時(shí)互動(dòng)上。本系統(tǒng)使用通用串行總線將sim300 gsm模塊與pc機(jī)相連,可將短信數(shù)據(jù)傳送到pc機(jī)上進(jìn)行進(jìn)一步的處理。pc端軟件使用windows操作系統(tǒng)下的visual studio 2008集成開(kāi)發(fā)環(huán)境進(jìn)行編寫(xiě),開(kāi)發(fā)語(yǔ)言為c+,使用了mfc類庫(kù)和mscomm activex控件。平臺(tái)可實(shí)現(xiàn)即時(shí)互動(dòng)、投票表決、課堂練習(xí)等三種功能。軟件可與powerpoint等演示軟件協(xié)同運(yùn)行,有良好的兼容性。關(guān)鍵詞:短信平臺(tái) gsm模塊 串口通信 c+
2、 mfc 緒論 隨著通信技術(shù)的發(fā)展,手機(jī)已經(jīng)成為每個(gè)現(xiàn)代人的必備通信工具,短信也成為很多人特別是年輕人的喜歡的通信方式。但sms(short messaging service,短消息服務(wù),即常說(shuō)的“短信”)是一種傳遞消息的手段,它的功能遠(yuǎn)不限于人與人之間點(diǎn)對(duì)點(diǎn)的消息傳遞,由于手機(jī)的普及性,我們還可以利用短信的內(nèi)容,實(shí)現(xiàn)大型活動(dòng)、課堂教學(xué)的實(shí)時(shí)交流互動(dòng)。實(shí)際上,類似的短信平臺(tái)早就出現(xiàn)過(guò),最常見(jiàn)的例子就是電視節(jié)目中的短信互動(dòng)平臺(tái)。但這種平臺(tái)一般是由運(yùn)營(yíng)商提供,客戶在支付一定的使用費(fèi)后通信運(yùn)營(yíng)商才會(huì)通過(guò)公眾互聯(lián)網(wǎng)將短信內(nèi)容發(fā)送到客戶的處理機(jī)上。這種平臺(tái)僅限于大型企業(yè)、電視臺(tái)等有資金的單位,如果僅為
3、了一次活動(dòng)或者課堂教學(xué)就購(gòu)買相應(yīng)的服務(wù)很不值得。另外,向這種平臺(tái)發(fā)送短信的用戶也需要支付高額的信息費(fèi)。本平臺(tái)面向現(xiàn)場(chǎng)活動(dòng)和普通高校的課堂教學(xué)進(jìn)行設(shè)計(jì),硬件上只使用一個(gè)廉價(jià)的gsm模塊,它可以實(shí)現(xiàn)包括發(fā)短信、打電話在內(nèi)的手機(jī)通信功能。通過(guò)使用通用串口將gsm模塊連接到個(gè)人計(jì)算機(jī)上,就可以用計(jì)算機(jī)軟件實(shí)現(xiàn)對(duì)模塊的控制并接收gsm發(fā)回的信息。軟件是本系統(tǒng)最核心的地方,主要可以分為三個(gè)模塊:通信、顯示、編碼處理。通過(guò)軟件作用,計(jì)算機(jī)可以和手機(jī)一樣接收短信,并且可以通過(guò)短信內(nèi)容,實(shí)現(xiàn)手機(jī)無(wú)法處理的功能,比如大屏幕即時(shí)顯示、投票計(jì)數(shù)、選擇題評(píng)分等。1 功能分析與硬件設(shè)計(jì)1.1 功能分析1.1.1 主要功能
4、分析根據(jù)舉辦活動(dòng)及課堂教學(xué)的實(shí)際情況分析,系統(tǒng)可初步設(shè)計(jì)以下幾種主要功能:(1)實(shí)時(shí)顯示:將參與者發(fā)送的短信內(nèi)容實(shí)時(shí)地展現(xiàn)在屏幕上,可用作現(xiàn)場(chǎng)回答提問(wèn)、回答問(wèn)題、多人討論等;(2)投票表決:參與者發(fā)送特定的字母或數(shù)字,系統(tǒng)實(shí)時(shí)統(tǒng)計(jì)各選項(xiàng)的人數(shù),可用作無(wú)記名投票表決、單個(gè)選擇題聯(lián)系等;(3)選擇練習(xí):類似標(biāo)準(zhǔn)化考試中所用的選擇題答題卡,學(xué)生將選擇題答案按規(guī)定格式發(fā)給系統(tǒng),系統(tǒng)自動(dòng)統(tǒng)計(jì)每個(gè)學(xué)生的成績(jī)和每個(gè)題目的正確率等情況。1.1.2 輔助功能分析系統(tǒng)還需要部分附加功能來(lái)配合主要功能來(lái)充分發(fā)揮系統(tǒng)的全部作用,比如:(1)自適應(yīng)字體:展示用的電腦屏幕分辨率不是固定的,因此最好設(shè)計(jì)一種算法使得字體能夠
5、自動(dòng)適應(yīng)屏幕,將一個(gè)短信完整得顯示在屏幕上并且能使屏幕分辨率得到充分的利用;(2)關(guān)鍵詞過(guò)濾:將特殊關(guān)鍵詞用其他詞語(yǔ)或星號(hào)等替代,避免現(xiàn)場(chǎng)秩序混亂或者不文明發(fā)言;(3)短信號(hào)碼過(guò)濾:在投票表決等功能中避免無(wú)關(guān)人員參加或者一人多投等功能的 出現(xiàn),加入本功能實(shí)現(xiàn)無(wú)關(guān)號(hào)碼的過(guò)濾;(4)文件記錄:將所有發(fā)送的短信記錄到文件中,以便日后的查看;(5)用戶界面定制:用戶界面是軟件的重要組成部分,用戶最好可根據(jù)自己的喜好定制自己喜歡的用戶界面,比如顯示界面背景更換,文字字體、顏色的更換等。1.2 硬件設(shè)計(jì)1.2.1 硬件部分總體設(shè)計(jì)本系統(tǒng)硬件部分較為簡(jiǎn)單,包括一個(gè)gsm模塊和一臺(tái)pc機(jī),如果是筆記本電腦等不
6、帶rs232接口的計(jì)算機(jī),還需要一根usb轉(zhuǎn)rs232轉(zhuǎn)接線。系統(tǒng)總體框圖如圖1-1。pc機(jī)gsm模塊sim300通用串口與通信基站無(wú)線通信圖1-1 系統(tǒng)總體硬件示意圖1.2.2 gsm模塊gsm是global system for mobile communications的縮寫(xiě),意為全球移動(dòng)通信系統(tǒng),是世界上主要的蜂窩系統(tǒng)之一。gsm80年代興起于歐洲,1991年投入使用。到1997年底,已經(jīng)在100多個(gè)國(guó)家運(yùn)營(yíng),成為歐洲和亞洲實(shí)際上的標(biāo)準(zhǔn),到了2001年,在全世界的162個(gè)國(guó)家已經(jīng)建設(shè)了400個(gè)gsm通信網(wǎng)絡(luò)。但gsm系統(tǒng)的容量是有限的,在網(wǎng)絡(luò)用戶過(guò)載時(shí),就不得不構(gòu)建更多的網(wǎng)絡(luò)設(shè)施。值得
7、欣慰的是gsm在其他方面性能優(yōu)異,它除了提供標(biāo)準(zhǔn)化的列表和信令系統(tǒng)外,還開(kāi)放了一些比較智能的業(yè)務(wù)如國(guó)際漫游等。gsm手機(jī)的方便之處在于它提供了一個(gè)智能卡,人們稱之為sim卡,并且機(jī)卡可以分離,這樣用戶更換手機(jī)并且定制個(gè)人信息這方面都十分便利了。gsm模塊,是一個(gè)類似于手機(jī)的通訊模塊,集成了手機(jī)的若干功能于一塊小電路板上,它可以發(fā)送短消息,通話等等,模塊雖小,但它具備了很多手機(jī)的功能,擁有它等于就是擁有了手機(jī)的核心部分了,它在很多應(yīng)用領(lǐng)域中都有著廣泛的應(yīng)用,gsm模塊通過(guò)使用at指令才能控制它,模塊可以與電腦rs232串口相連,也可以用單片機(jī)來(lái)進(jìn)行控制。由于當(dāng)前市場(chǎng)上gsm模塊產(chǎn)品型號(hào)眾多,很多
8、國(guó)外產(chǎn)品可用的資料卻比較少,特別是中文開(kāi)發(fā)文檔比較少,所以,我在選擇具體模塊的時(shí)候考慮了模塊的技術(shù)成熟度、文檔資料是否易找、購(gòu)買起來(lái)是否方便和性價(jià)比。最終選擇了simcom公司生產(chǎn)的sim300 gsm模塊。模塊照片如圖1-2。圖1-2 sim300 gsm模塊sim300 是一款三頻段 gsm/gprs模塊,可在全球范圍內(nèi)的egsm 900mhz、dcs 1800mhz、pcs 1900mhz三種頻率下工作,能夠提供 gprs多信道類型多達(dá) 10 個(gè),并且支持 cs-1、cs-2、cs-3 和 cs-4 四種 gprs編碼方案。sim300 結(jié)構(gòu)小巧,外形尺寸僅 40mm*33mm*2.85
9、mm,幾乎可滿足所有對(duì)產(chǎn)品尺寸有要求的工業(yè)應(yīng)用,比如智能電話,掌上電腦和其他移動(dòng)設(shè)備。模塊與移動(dòng)應(yīng)用設(shè)備通過(guò)一個(gè) 60 引腳的板板連接器相連,它提供了除了 rf 天線接口的其他所有模塊與開(kāi)發(fā)板的硬件接口。sim300 具有低功耗設(shè)計(jì),睡眠模式下的電流消耗僅為 2.5ma。sim300 內(nèi)部集成了tcp/ip 協(xié)議棧,并且擴(kuò)展了 tcp/ip at指令,使用戶利用該模塊開(kāi)發(fā)數(shù)據(jù)傳輸設(shè)備變得特別簡(jiǎn)單、方便。 1.2.3 usb-rs232轉(zhuǎn)接線因現(xiàn)在絕大多數(shù)個(gè)人計(jì)算機(jī)都不帶硬件串行口,而sim300 gsm模塊必須用usart與電腦進(jìn)行通信,因此需要模擬出一個(gè)串行口供gsm模塊使用。而現(xiàn)在常用的方
10、法就是使用usb-rs232轉(zhuǎn)接線。usb-rs232轉(zhuǎn)接線可以將串口數(shù)據(jù)通過(guò)usb總線發(fā)送給計(jì)算機(jī)。其結(jié)構(gòu)非常簡(jiǎn)單,一般只有兩個(gè)芯片。其中一個(gè)是usb轉(zhuǎn)ttl電平芯片,另外一個(gè)是ttl電平轉(zhuǎn)rs232電平芯片。后者現(xiàn)在的產(chǎn)品都清一色的選用max232(5v)或者max3232(3.3v),而前者有很多種選擇,比如低端的pl2303、hc340,中端的cp2102,高端的ft232等。因gsm所需的波特率不高,所以我選擇了低端的hc340芯片。轉(zhuǎn)接線的制作非常簡(jiǎn)單,按照參考電路將各個(gè)芯片連接好即可。2 軟件開(kāi)發(fā)環(huán)境及所需技術(shù)簡(jiǎn)介2.1 集成開(kāi)發(fā)環(huán)境2.1.1 集成開(kāi)發(fā)環(huán)境的選擇microsof
11、t公司的windows操作系統(tǒng)是目前國(guó)內(nèi)最常用的操作系統(tǒng),而windows平臺(tái)下的集成開(kāi)發(fā)環(huán)境主要有c+ builder、delphi、eclipse、visual studio等。而microsoft公司的visual studio無(wú)疑是最常用、兼容性最好、技術(shù)支持資料最多的集成開(kāi)發(fā)環(huán)境?,F(xiàn)在常用的visual studio版本主要為6.0、2008、2010。其中6.0版是最經(jīng)典的版本,國(guó)內(nèi)絕大部分高校、部分企業(yè)都把它當(dāng)做開(kāi)發(fā)或者教學(xué)的首選,其優(yōu)點(diǎn)是效率高、技術(shù)支持資料多、界面簡(jiǎn)潔。但由于其版本太過(guò)陳舊,因此不能使用較新的技術(shù),對(duì)最新版本的windows系統(tǒng)兼容性不好。2010版是visu
12、al studio的最新版本,支持最新的技術(shù),有這絢麗的界面,但由此帶來(lái)的是巨大的資源消耗和極低的效率。綜上考慮,我選擇了介于兩者之間的visual studio 2008版本。2.1.2 visual studio 2008簡(jiǎn)介visual studio 是一套完整的開(kāi)發(fā)工具,用于生成 asp.net web 應(yīng)用程序、xml web services、桌面應(yīng)用程序和移動(dòng)應(yīng)用程序。visual basic、visual c# 和 visual c+ 都使用相同的集成開(kāi)發(fā)環(huán)境 (ide),這樣就能夠進(jìn)行工具共享,并能夠輕松地創(chuàng)建混合語(yǔ)言解決方案。另外,這些語(yǔ)言使用 .net framework
13、 的功能,它提供了可簡(jiǎn)化 asp web 應(yīng)用程序和 xml web services 開(kāi)發(fā)的關(guān)鍵技術(shù)。visual studio 2008 在三個(gè)方面為開(kāi)發(fā)人員提供了關(guān)鍵改進(jìn):快速的應(yīng)用程序開(kāi)發(fā)、高效的團(tuán)隊(duì)協(xié)作、突破性的用戶體驗(yàn)。visual studio 2008 提供了高級(jí)開(kāi)發(fā)工具、調(diào)試功能、數(shù)據(jù)庫(kù)功能和創(chuàng)新功能,幫助在各種平臺(tái)上快速創(chuàng)建當(dāng)前最先進(jìn)的應(yīng)用程序。 visual studio 2008 包括各種增強(qiáng)功能,例如可視化設(shè)計(jì)器(使用 .net framework 3.5 加速開(kāi)發(fā))、對(duì) web 開(kāi)發(fā)工具的大量改進(jìn),以及能夠加速開(kāi)發(fā)和處理所有類型數(shù)據(jù)的語(yǔ)言增強(qiáng)功能。visual st
14、udio 2008 為開(kāi)發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持 ajax 的 web 應(yīng)用程序。 開(kāi)發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的 web 應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運(yùn)行并完全訪問(wèn) asp net 應(yīng)用程序服務(wù)和 microsoft 平臺(tái)。2.2 程序設(shè)計(jì)語(yǔ)言2.2.1 visual studio 2008 所支持的程序設(shè)計(jì)語(yǔ)言visual studio 2008包含 visual c+、visual basic、visual c#等組件,分別支持 c+、basic、c#等程序
15、設(shè)計(jì)語(yǔ)言。visual basic是一種可視化的、面向?qū)ο蠛筒捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)程序設(shè)計(jì)語(yǔ)言,可用于開(kāi)發(fā)windows環(huán)境下的各類應(yīng)用程序。它簡(jiǎn)單易學(xué)、效率高,且功能強(qiáng)大可以與專業(yè)開(kāi)發(fā)工具sdk相媲美。在visual basic環(huán)境下,利用事件驅(qū)動(dòng)的編程機(jī)制、新穎易用的可視化設(shè)計(jì)工具,使用windows內(nèi)部的廣泛應(yīng)用程序接口(spi)函數(shù),以用動(dòng)態(tài)鏈接庫(kù)(dll)、對(duì)象的鏈接與世隔嵌入(ole)、開(kāi)放式數(shù)據(jù)連接(odbc)等技術(shù),可以高效、快速地開(kāi)發(fā)windows環(huán)境下功能強(qiáng)大、圖形界面豐富的應(yīng)用軟件系統(tǒng)。但由于basic語(yǔ)言是一種解釋運(yùn)行的語(yǔ)言,它的效率要比編譯運(yùn)行的語(yǔ)言低得多。vi
16、sual c+是microsoft公司推出的開(kāi)發(fā)win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫(xiě)和界面設(shè)計(jì)集成交互操作、可開(kāi)發(fā)多種程序等優(yōu)點(diǎn),而且通過(guò)簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、ole2,winsock網(wǎng)絡(luò)、3d控制界面。c#(c sharp)是microsoft為.net framework量身訂做的程序語(yǔ)言,c#擁有c/c+的強(qiáng)大功能以及visual basic簡(jiǎn)易使用的特性,是第一個(gè)組件導(dǎo)向(component-oriented)的程序語(yǔ)言,和c+與java一樣亦為對(duì)象導(dǎo)向(object-oriented)程序語(yǔ)
17、言。2.2.2 程序設(shè)計(jì)語(yǔ)言的選擇從上文的介紹來(lái)看,具有c語(yǔ)言語(yǔ)法和高效性又具有basic語(yǔ)言簡(jiǎn)便性的c#語(yǔ)言貌似是本項(xiàng)目的最佳選擇。但本平臺(tái)的應(yīng)用特點(diǎn)決定了該程序?qū)⒃诙鄠€(gè)具有不同版本操作系統(tǒng)的計(jì)算機(jī)上運(yùn)行,而且大多數(shù)此類計(jì)算機(jī)都帶有還原卡。而c#程序的運(yùn)行又必須依賴于.net framework,每次使用前都配置一次程序無(wú)疑是項(xiàng)非常耗費(fèi)時(shí)間的工作。而visual c+程序可以將所需的動(dòng)態(tài)鏈接庫(kù)靜態(tài)封裝在程序中,雖然程序體積會(huì)變大,但使用非常方便。因此,我選擇visual c+作為開(kāi)發(fā)本平臺(tái)的程序設(shè)計(jì)語(yǔ)言。2.3 微軟基礎(chǔ)類庫(kù)(mfc)簡(jiǎn)介mfc(microsoft foundation cl
18、asses),是一個(gè)微軟公司提供的類庫(kù)(class libraries),以c+類的形式封裝了windows的api,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開(kāi)發(fā)人員的工作量。其中包含的類包含大量windows句柄封裝類和很多windows的內(nèi)建控件和組件的封裝類。mfc(microsoft foundation class library)中的各種類結(jié)合起來(lái)構(gòu)成一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來(lái)建立windows下的應(yīng)用程序,這是一種相對(duì)sdk來(lái)說(shuō)更為簡(jiǎn)潔的方法。因?yàn)檎w上,mfc框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具
19、體應(yīng)用程序特有的東西填入這個(gè)輪廓。microsoft visual c+提供了相應(yīng)的工具來(lái)完成這個(gè)工作:appwizard可以用來(lái)生成初步的框架文件(代碼和資源等):資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口;classwizard用來(lái)協(xié)助添加代碼到框架文件;最后,編譯,則通過(guò)類庫(kù)實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。微軟基礎(chǔ)類庫(kù)由兩部分組成:一是通常所說(shuō)的c+類庫(kù),是mfc類庫(kù)的主體部分,這些類構(gòu)成了mfc應(yīng)用程序框架。二是mfc預(yù)定義宏、全局變量和全局函數(shù),是mfc類庫(kù)的輔助部分,它們都是mfc進(jìn)行windows應(yīng)用程序開(kāi)發(fā)不可缺少的組成部分。mfc類庫(kù)按照功能應(yīng)用劃分為基本基類(根類、cobject類、c
20、runtimeclass類、命令目標(biāo)類、窗口類)、應(yīng)用程序結(jié)構(gòu)類(應(yīng)用程序類、文檔模板類、邊框窗口類、文檔類、視圖類、菜單和控件欄類等)、對(duì)話框和控件類(一般對(duì)話框類、通用對(duì)話框類、屬性選項(xiàng)卡類、網(wǎng)頁(yè)對(duì)話框類、普通控件類和附加控件類、通用控件類、clistctrl類)、圖形顯示和打印類(繪圖類、gdi繪圖工具欄類、其它繪圖工具類、mfc打印機(jī)制和打印信息類)、數(shù)據(jù)類型和集合類(簡(jiǎn)單數(shù)據(jù)類型類、數(shù)組類、鏈表類、映射類、模板集合類)、線程和同步類(線程類、同步類、同步訪問(wèn)類)、文件和數(shù)據(jù)庫(kù)類(文件類、odbc數(shù)據(jù)庫(kù)類、ole-db數(shù)據(jù)庫(kù)類)、網(wǎng)絡(luò)和internet類(windows sockets
21、類、isapi類、wininet類)、ole類(容器程序類、文字處理器程序類、服務(wù)器程序類、ole拖放和數(shù)據(jù)傳輸類、ole自動(dòng)化類、與ole有關(guān)的類)、activex控件類(activex控件的核心類、與activex控件有關(guān)的其它類)、調(diào)試和異常類(調(diào)試支持類、異常類)。2.4 微軟通信控制(ms communication control, mscomm)控件簡(jiǎn)介microsoft communication control是microsoft公司提供的一種專門(mén)用于控制pc機(jī)串口通信的activex控件,利用它可以極大地簡(jiǎn)化串口編程。mscomm也提供了各種中斷響應(yīng)代碼與錯(cuò)誤處理代碼。本程
22、序中使用的是microsoft communication control 6.0版本的控件。mscomm控件提供了功能完善的串口數(shù)據(jù)的發(fā)送和接收功能,mscomm控件具有兩種處理方式:1、事件驅(qū)動(dòng)方式:由mscomm控件的oncomm事件捕獲并處理通信錯(cuò)誤及事件;2、查詢方式:通過(guò)檢查commevent屬性的值來(lái)判斷事件和錯(cuò)誤。mscomm控件的通信功能實(shí)現(xiàn),實(shí)際上是調(diào)用了api函數(shù),而api函數(shù)是由comm.drv解釋并傳給設(shè)備驅(qū)動(dòng)程序執(zhí)行的,對(duì)于程序開(kāi)發(fā)者只需知道m(xù)scomm控件的屬性和事件的用法即可以實(shí)現(xiàn)串口的操作。如果在通信過(guò)程中發(fā)生錯(cuò)誤或事件,就會(huì)引發(fā)oncomm事件并且改變屬性值
23、,由commevent屬性代碼反映錯(cuò)誤類型,在通信程序的設(shè)計(jì)中可根據(jù)該屬性值來(lái)執(zhí)行不同的操作。3 軟件設(shè)計(jì)3.1 用戶界面設(shè)計(jì)一個(gè)好的ui(user interface,用戶界面)不僅能能使軟件有一個(gè)好的“面子”還能方便用戶操作、帶給用戶良好的體驗(yàn)。而且本軟件的一項(xiàng)重要功能就是展示功能,因此必須重視用戶界面的設(shè)計(jì)。3.1.1 主窗口設(shè)計(jì)本平臺(tái)在使用時(shí)一般與powerpoint等演示軟件一起配合,在無(wú)新任務(wù)時(shí)盡量避免主窗口的占用屏幕空間,影響演示軟件的運(yùn)行。把主窗口設(shè)計(jì)成對(duì)話框形式是一個(gè)比較好的選擇。新建一個(gè)visual studio 2008工程,工程名取為cis2,在“工程類型”中選擇“mf
24、c應(yīng)用程序”,在“mfc應(yīng)用程序向?qū)А钡摹皯?yīng)用程序類型”選項(xiàng)卡中選擇“基于對(duì)話框”單選項(xiàng),即可創(chuàng)建一個(gè)基于對(duì)話框的mfc應(yīng)用程序。因需要在多臺(tái)電腦上使用本程序,“mfc的使用”盡量選擇“在靜態(tài)庫(kù)中使用mfc”,這樣系統(tǒng)會(huì)把mfc的所需模塊編譯到exe應(yīng)用程序中,不需要dll文件的支持。在“用戶界面功能”選項(xiàng)卡中,僅選中“最小化框”,其他都不選擇。在“生成的類”選項(xiàng)卡中,可以看到系統(tǒng)會(huì)給應(yīng)用程序自動(dòng)生成兩個(gè)類。其中,ccis2app是應(yīng)用程序類,ccis2dlg是主窗口的類,它是cdialog的一個(gè)派生類。完成新工程的配置后,vs2008會(huì)自動(dòng)生成主對(duì)話框,之后就可以向上擺放需要的控件了。在本程
25、序中,根據(jù)平臺(tái)功能的需要,擺放五個(gè)組合框,其caption屬性分別改名為“通信”、“狀態(tài)”、“功能”、“屬性”、“控制”。之后向組合框中添加需要的控件,添加完成后根據(jù)需要改變控件的大小和位置??丶[放完成后,將對(duì)話框大小調(diào)整到合適的程度,最終完成的效果如圖3-1。圖3-1 主對(duì)話框樣式3.1.2 主窗口ui程序?yàn)槭勾翱谏系哪承┛丶趩?dòng)時(shí)默認(rèn)選中或默認(rèn)禁用,需要在ccis2dlg:oncreate()中添加部分代碼。使“關(guān)閉”按鈕默認(rèn)禁用:getdlgitem(idc_buttonclose)-enablewindow(false);使“即時(shí)交互”和“顯示發(fā)件人及時(shí)間”默認(rèn)選中:cbutton
26、* radio=(cbutton*)getdlgitem(idc_radio1);radio-setcheck(1);cbutton *pncheck=(cbutton*)getdlgitem(idc_check1);pncheck-setcheck(1);使“顯示延時(shí)”文本編輯框中顯示默認(rèn)數(shù)字:getdlgitem(idc_edit2)-setwindowtext(l10); 為使“狀態(tài)顯示”中的文字更加突出,需要將static中的文字顏色改變,為達(dá)到這種效果,可在ccis2dlg:onctlcolor()事件響應(yīng)中添加下列代碼:if(pwnd-getdlgctrlid()=idc_stas
27、ta)pdc-settextcolor(rgb(255,0,0);pdc-setbkmode(transparent);pdc-selectobject(&m_stafont);改變“狀態(tài)顯示”中的文字也非常簡(jiǎn)單, 如:getdlgitem(idc_stasta)-setwindowtext(l系統(tǒng)已關(guān)閉);3.1.3 顯示窗口設(shè)計(jì)顯示窗口用來(lái)顯示系統(tǒng)接收到的短信等內(nèi)容,其前期設(shè)計(jì)非常簡(jiǎn)單,只需要新建一個(gè)對(duì)話框,“屬性”中去掉邊框,并擺放4個(gè)button類控件即可,如圖3-2.圖3-2 顯示窗口的初步設(shè)計(jì)3.1.4 顯示窗口ui程序相比主窗口來(lái)說(shuō),顯示窗口的程序設(shè)計(jì)要復(fù)雜得多。首先,顯示窗口在
28、需要在彈出后置于其他所有窗口的頂端,并且為了盡量少地遮蓋后方窗口,顯示窗口需要根據(jù)要顯示的內(nèi)容自動(dòng)調(diào)整大小并居中。得到顯示文字的大小可以用mfc中的cdc:gettextmetrics()函數(shù)取得。具體代碼如下:dc.selectobject(&m_showfont);dc.gettextmetrics(&tm);tsize=dc.gettextextent(m_showtext);得到文本的大小參數(shù)后,可以用cwnd:setwindowpos()函數(shù)來(lái)設(shè)置窗口的大小,函數(shù)的第一個(gè)參數(shù)是設(shè)置窗口的顯示方式,如果將該參數(shù)改為&wndtopmost,則可以將顯示窗口置于其他窗口的頂端。具體代碼如下
29、:setwindowpos(&wndtopmost,0,0,tm.tmavecharwidth*24,(m_showtext.getlength()/12+1)*tsize.cy+30+25,swp_nomove);其他的參數(shù)是根據(jù)多次試驗(yàn)湊試出來(lái)的最佳值。調(diào)整好窗口的大小后,四個(gè)按鈕控件的位置也需要改變到窗口的右下角,實(shí)現(xiàn)該功能同樣可以用cwnd:setwindowpos()函數(shù)實(shí)現(xiàn)。在調(diào)整控件位置之前,需要獲取窗口的位置和大小,從而得到窗口最右下角的大小,這個(gè)功能可以用cwnd: getwindowrect()函數(shù)實(shí)現(xiàn)。以上具體代碼如下:crect dlgrect;getwindowrec
30、t(&dlgrect);m_buttonclose.movewindow(dlgrect.right-dlgrect.left-30,dlgrect.bottom-dlgrect.top-25,30,25);m_buttonnext.movewindow(dlgrect.right-dlgrect.left-60,dlgrect.bottom-dlgrect.top-25,30,25);m_buttonpause.movewindow(dlgrect.right-dlgrect.left-90,dlgrect.bottom-dlgrect.top-25,30,25);m_buttonprevi
31、ous.movewindow(dlgrect.right-dlgrect.left-120,dlgrect.bottom-dlgrect.top-25,30,25);第一次開(kāi)啟窗口時(shí),最好將窗口置于屏幕最中央,得到屏幕分辨率等信息可用:getsystemmetics()函數(shù)實(shí)現(xiàn),代碼如下:crect dlgrect;resizedlg();getwindowrect(&dlgrect);setwindowpos(&wndtopmost,(:getsystemmetrics(sm_cxscreen)-(dlgrect.right-dlgrect.left)/2,(:getsystemmetric
32、s(sm_cyscreen)-(dlgrect.bottom-dlgrect.top)/2,0,0,swp_nosize);為使窗口更加漂亮,需改變現(xiàn)實(shí)窗口的背景圖片和文字的字體、顏色。加入背景圖片需要先在工程資源中加入要顯示背景的bitmap文件。然后將資源加載到畫(huà)刷中,可用如下代碼完成:cbitmap bitmap;bitmap.loadbitmap(idb_bitmap1);cbrush brush(&bitmap);cpen pen(ps_solid,8,rgb(37,239,0);dc.selectobject(&brush);dc.selectobject(&pen);dc.rec
33、tangle(showrect);字體的選擇代碼:cfont *poldfont=dc.selectobject(&m_showfont);dc.settextcolor(rgb(255,0,0);dc.setbkmode(transparent);在一個(gè)固定區(qū)域中顯示多行文字最好的方法是用cdc:drawtext()函數(shù),函數(shù)的參數(shù)3為設(shè)置文本顯示方式,dt_center為在區(qū)域中居中顯示,dt_wordbreak為自動(dòng)換行:dc.drawtext(m_showtext,showrect,dt_center | dt_wordbreak); 顯示窗口還有一個(gè)問(wèn)題,就是它沒(méi)有標(biāo)題欄,無(wú)法移動(dòng)窗
34、口的位置。解決這個(gè)問(wèn)題的方法是將窗口的客戶區(qū)域非控件的位置模擬成標(biāo)題欄,為達(dá)到目標(biāo),可以重載cdialog:onnctest()響應(yīng),在事件響應(yīng)中加入如下代碼:lresult nhittest = cdialog:onnchittest(point);if (nhittest = htclient & getasynckeystate(mk_lbutton) 0 ) nhittest = htcaption;return nhittest;加入以上代碼后,顯示窗口的最終顯示效果如圖3-3:圖3-3 顯示窗口加入代碼后的效果3.1.5 其他窗口ui除了以上兩個(gè)主要窗口外,還有“關(guān)于”窗口和“字體
35、設(shè)置”窗口,這兩個(gè)窗口沒(méi)有特別復(fù)雜的代碼,只需要完成大體設(shè)計(jì)即可。“關(guān)于”窗口和“字體設(shè)置”窗口的效果如圖3-4和圖3-5:圖3-4 “關(guān)于”窗口圖3-5 “字體設(shè)置”窗口3.2 串口程序設(shè)計(jì)3.2.1 mscomm控件的使用mscomm控件使用前先在“菜單-項(xiàng)目-添加類”中加入microsoft communication control 6.0控件,之后在工具箱中點(diǎn)擊右鍵,在彈出菜單中點(diǎn)“選擇項(xiàng)”,把相應(yīng)控件加入到工具箱并拖動(dòng)到窗口里。最后右鍵點(diǎn)擊控件為該控件在ccis2dlg類中創(chuàng)建一個(gè)控制變量m_comm.3.2.2 串口初始化可根據(jù)需要設(shè)置不同的串口參數(shù)并初始化串口。在本例中,由實(shí)驗(yàn)
36、得到gsm模塊的最佳波特率為38400bps,串口幀格式為8位,無(wú)奇偶校驗(yàn),1位停止位。因不同的計(jì)算機(jī)使用串口的端口不一樣,這可由用戶在主界面的一個(gè)下拉菜單中選擇,選擇代碼如下:uint portnum=m_serialportselect.getcursel()+1;得到串口號(hào)后,就可以用mscomm類中的成員函數(shù)對(duì)所使用的串口進(jìn)行初始化:m_comm.put_commport(portnum); /設(shè)置串口號(hào)m_comm.put_inputmode(1); /文本輸入 輸出m_comm.put_inbuffersize(1024); /設(shè)置輸入緩沖區(qū)大小m_comm.put_outbuff
37、ersize(1024); /設(shè)置輸出緩沖區(qū)大小m_comm.put_settings(l38400,n,8,1); /設(shè)置波特率,數(shù)據(jù)格式if(!m_comm.get_portopen() /打開(kāi)串口m_comm.put_portopen(true);m_comm.put_rthreshold(1); m_comm.put_inputlen(0);m_comm.get_input();3.2.3 串口數(shù)據(jù)的收發(fā)mscomm串口數(shù)據(jù)收發(fā)較為簡(jiǎn)單,但是由于串口通常使用ascii碼或16進(jìn)制代碼作為發(fā)送接收的統(tǒng)一編碼,而本程序?yàn)榱颂幚矸奖闶褂玫氖莡nicode編碼,提取和轉(zhuǎn)換這些編碼是一件非常麻煩
38、的事情。關(guān)于unicode及其他編碼的轉(zhuǎn)換和處理會(huì)在之后的章節(jié)中單獨(dú)說(shuō)明,在此只描述串口數(shù)據(jù)的基本收發(fā)程序。串口數(shù)據(jù)的發(fā)送使用mscomm:put_output()函數(shù)來(lái)實(shí)現(xiàn),每次只能收發(fā)一個(gè)字節(jié)的數(shù)據(jù),因此需要對(duì)數(shù)據(jù)進(jìn)行處理。以下是ccis2dlg:senddata()函數(shù):void ccis2dlg:senddata(void)/發(fā)送m_txbuf中的數(shù)據(jù)char *charstring=null;dword count=widechartomultibyte(cp_oemcp,null,m_txbuf,-1,null,0,null,false);charstring=new charco
39、unt;widechartomultibyte(cp_oemcp,null,m_txbuf,-1,charstring,count,null,false);cbytearray barray;barray.removeall();barray.setsize(count);for(dword i=0;i0)variant m_input=m_comm.get_input();char *str=(char*)(unsigned char*)m_input.parray-pvdata;m_rxbuf=(char*)str;m_rxbuf=m_rxbuf.left(k);經(jīng)過(guò)上述代碼的處理,接收到
40、的全部短信內(nèi)容已經(jīng)就全部存放在cstring類型的m_rxbuf數(shù)據(jù)成員里了。3.3 編碼轉(zhuǎn)換程序3.3.1 unicode碼與ascii碼unicode(統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開(kāi)始研發(fā),1994年正式公布。隨著計(jì)算機(jī)工作能力的增強(qiáng),unicode也在面世以來(lái)的十多年里得到普及。unicode定義了大到足以代表人類所有可讀字符的字符集。美國(guó)標(biāo)準(zhǔn)信息交換代碼是由美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(american national standard institute
41、, ansi )制定的,標(biāo)準(zhǔn)的單字節(jié)字符編碼方案,用于基于文本的數(shù)據(jù)。起始于50年代后期,在1967年定案。它最初是美國(guó)國(guó)家標(biāo)準(zhǔn),供不同計(jì)算機(jī)在相互通信時(shí)用作共同遵守的西文字符編碼標(biāo)準(zhǔn),它已被國(guó)際標(biāo)準(zhǔn)化組織(international organization for standardization, iso)定為國(guó)際標(biāo)準(zhǔn),稱為iso 646標(biāo)準(zhǔn)。適用于所有拉丁文字字母。在visual c+ 6.0及以前的版本中,絕大多數(shù)嵌入式編譯器中,用的是ascii編碼,ascii編碼存儲(chǔ)的基本單位是8位的char型。unicode編碼的基本存儲(chǔ)單位是16位的wchar_t型,visual studio
42、2008默認(rèn)使用的就是unicode編碼(自動(dòng)定義宏_unicode)。mfc中有很多unicode編碼操作函數(shù),因此使用unicode能極大簡(jiǎn)化程序。在visual studio 2008 ide中,用英文半角雙引號(hào)包裹的是ascii碼字符串,而用l+英文半角雙引號(hào)包裹的是unicode編碼。3.3.2 unicode字符串和ascii字符串的轉(zhuǎn)換mfc中提供了unicode字符串和ascii字符串的函數(shù),分別是widechartomultibyte()和multibytetowidechar().但這兩個(gè)函數(shù)都需要一個(gè)代表字符串長(zhǎng)度的形參,和一個(gè)cstring型變量。因此,為高效地使用這兩
43、個(gè)函數(shù),我們可以用new和delete運(yùn)算符在程序內(nèi)存的堆區(qū)動(dòng)態(tài)分配一個(gè)cstring類型,然后利用兩個(gè)函數(shù)的返回值確定字符串長(zhǎng)度,具體程序如下:/將unicode字符串轉(zhuǎn)換為ascii字符串dword count=widechartomultibyte(cp_oemcp,null,m_txbuf,-1,null,0,null,false);charstring=new charcount;widechartomultibyte(cp_oemcp,null,m_txbuf,-1,charstring,count,null,false);/將ascii字符串轉(zhuǎn)換為unicode字符串char *
44、str=(char*)(unsigned char*)m_input.parray-pvdata;m_rxbuf=(char*)str;m_rxbuf=m_rxbuf.left(k);3.3.3 將unicode字符串轉(zhuǎn)化為漢字在本程序中,接收到短信的字符串是用unicode文本就行編碼的,只有將響應(yīng)的編碼轉(zhuǎn)換為漢字才能得到正確的中文短信內(nèi)容。轉(zhuǎn)換代碼如下:/將unicode編碼的16進(jìn)制字符串轉(zhuǎn)換為漢字bool unihextohz(cstring &hexstr,cstring &hzstr)uint hexlen,hzlen;hexlen=hexstr.getlength();if(he
45、xlen%4) return false;hzlen=hexlen/4+1;wchar *pcode=new wcharhzlen;for (uint i=0;ienablewindow(false); /串口getdlgitem(idc_btclose)-enablewindow(true); /關(guān)閉getdlgitem(idc_stasta)-setwindowtext(l握手未成功,重試);m_txbuf=late0rn;senddata();/串口接收事件if(m_statue=2)if(m_rxbuf.right(4)=lokrn)m_comm.put_portopen(false)
46、;m_statue=5;getdlgitem(idc_stasta)-setwindowtext(l握手成功,請(qǐng)啟動(dòng));/控件控制getdlgitem(idc_selectport)-enablewindow(false); /串口getdlgitem(idc_btclose)-enablewindow(true); /關(guān)閉return;3.4.3 短信的接收短信的接收程序大致可分為以下幾步:(1)gsm模塊發(fā)送+cmni指令,表明有新的信息接收到,+cmni指令后的參數(shù)中有新接收到短信的代碼m_index;(2)程序發(fā)送at+cmgr = m_index指令要求讀取新收到的短信;(3)gsm
47、模塊用+cmgr為起始的一個(gè)字符串將短信內(nèi)容發(fā)送給程序;(4)程序發(fā)送at+cmgd = m_index指令將該條短信從sim卡上刪除。判斷是否是新短信提示信息,并要求接收短信的程序?qū)崿F(xiàn)如下:/串口接收實(shí)踐中,判斷是否是接收到短信的提示信息if (m_rxbuf.left(5)=l+cmti | m_rxbuf.left(7)=lrn+cmti)m_lastsmsindex=getsmsindex(m_rxbuf);m_txbuf=lat+cmgr=+m_lastsmsindex+lrn;senddata();return;3.5短信處理程序3.5.1 pdu編碼協(xié)議數(shù)據(jù)單元pdu(proto
48、col data unit)是指對(duì)等層次之間傳遞的數(shù)據(jù)單位。 協(xié)議數(shù)據(jù)單元(protocol data unit )物理層的 pdu是數(shù)據(jù)位(bit),數(shù)據(jù)鏈路層的 pdu是數(shù)據(jù)幀(frame),網(wǎng)絡(luò)層的pdu是數(shù)據(jù)包(packet),傳輸層的 pdu是數(shù)據(jù)段(segment),其他更高層次的pdu是數(shù)據(jù)(data)。目前,發(fā)送短消息常用text和pdu(protocol data unit,協(xié)議數(shù)據(jù)單元)模式。使用text模式收發(fā)短信代碼簡(jiǎn)單,實(shí)現(xiàn)起來(lái)十分容易,但最大的缺點(diǎn)是不能收發(fā)中文短信;而pdu模式不僅支持中文短信,也能發(fā)送英文短信。pdu模式收發(fā)短信可以使用3種編碼:7-bit、8-bit和ucs2編碼。7-bit編碼用于發(fā)送普通的ascii字符,8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,ucs2編碼用于發(fā)送unicode字符。一般的pdu編碼由a b c d e
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 解除勞動(dòng)合同委托書(shū)
- 2024年裁判員考試基礎(chǔ)知識(shí)試題及答案
- 解析體育經(jīng)紀(jì)人職業(yè)考試試題及答案
- 進(jìn)城教師考試試題及答案
- 2024游泳救生員證書(shū)考試難點(diǎn)與試題及答案
- 備考籌備無(wú)人機(jī)駕駛員考試試題及答案
- 2024年籃球裁判員理論試題及答案分析
- 講解2024年籃球裁判員考試革新內(nèi)容 試題及答案
- 模具設(shè)計(jì)中的仿真應(yīng)用試題及答案
- 2023屆河北省石家莊正定中學(xué)高三上學(xué)期12月月考?xì)v史試題及答案
- 耳穴臨床應(yīng)用-運(yùn)動(dòng)恢復(fù)新技巧
- 上海市低年級(jí)主題式綜合活動(dòng)課程指導(dǎo)綱要
- 人教版二年級(jí)音樂(lè)下冊(cè)教案全冊(cè)合集
- 中國(guó)人口老齡化背景下的財(cái)政政策研究
- 汽車發(fā)動(dòng)機(jī)原理(第5版) 課件 第三章 柴油機(jī)混合氣形成和燃燒
- 隧道爆破人員教育培訓(xùn)課件
- 06、摩擦力疊加問(wèn)題-12題
- 超級(jí)辯論賽辯論比賽流程主題課件
- 張學(xué)良與西安事變
- 中央廚房項(xiàng)目計(jì)劃書(shū)
- 《企業(yè)經(jīng)營(yíng)決策實(shí)戰(zhàn)模擬》教學(xué)大綱
評(píng)論
0/150
提交評(píng)論