版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實時短信互動平臺設(shè)計摘要:隨著手機(jī)的普及,短信已經(jīng)成為現(xiàn)代人的一種主要交流方式,但短信的應(yīng)用不僅局限在人們之間點對點的交流,其同樣能應(yīng)用于課堂教學(xué)、大型活動的實時互動上。本系統(tǒng)使用通用串行總線將sim300 gsm模塊與pc機(jī)相連,可將短信數(shù)據(jù)傳送到pc機(jī)上進(jìn)行進(jìn)一步的處理。pc端軟件使用windows操作系統(tǒng)下的visual studio 2008集成開發(fā)環(huán)境進(jìn)行編寫,開發(fā)語言為c+,使用了mfc類庫和mscomm activex控件。平臺可實現(xiàn)即時互動、投票表決、課堂練習(xí)等三種功能。軟件可與powerpoint等演示軟件協(xié)同運(yùn)行,有良好的兼容性。關(guān)鍵詞:短信平臺 gsm模塊 串口通信 c+
2、 mfc 緒論 隨著通信技術(shù)的發(fā)展,手機(jī)已經(jīng)成為每個現(xiàn)代人的必備通信工具,短信也成為很多人特別是年輕人的喜歡的通信方式。但sms(short messaging service,短消息服務(wù),即常說的“短信”)是一種傳遞消息的手段,它的功能遠(yuǎn)不限于人與人之間點對點的消息傳遞,由于手機(jī)的普及性,我們還可以利用短信的內(nèi)容,實現(xiàn)大型活動、課堂教學(xué)的實時交流互動。實際上,類似的短信平臺早就出現(xiàn)過,最常見的例子就是電視節(jié)目中的短信互動平臺。但這種平臺一般是由運(yùn)營商提供,客戶在支付一定的使用費(fèi)后通信運(yùn)營商才會通過公眾互聯(lián)網(wǎng)將短信內(nèi)容發(fā)送到客戶的處理機(jī)上。這種平臺僅限于大型企業(yè)、電視臺等有資金的單位,如果僅為
3、了一次活動或者課堂教學(xué)就購買相應(yīng)的服務(wù)很不值得。另外,向這種平臺發(fā)送短信的用戶也需要支付高額的信息費(fèi)。本平臺面向現(xiàn)場活動和普通高校的課堂教學(xué)進(jìn)行設(shè)計,硬件上只使用一個廉價的gsm模塊,它可以實現(xiàn)包括發(fā)短信、打電話在內(nèi)的手機(jī)通信功能。通過使用通用串口將gsm模塊連接到個人計算機(jī)上,就可以用計算機(jī)軟件實現(xiàn)對模塊的控制并接收gsm發(fā)回的信息。軟件是本系統(tǒng)最核心的地方,主要可以分為三個模塊:通信、顯示、編碼處理。通過軟件作用,計算機(jī)可以和手機(jī)一樣接收短信,并且可以通過短信內(nèi)容,實現(xiàn)手機(jī)無法處理的功能,比如大屏幕即時顯示、投票計數(shù)、選擇題評分等。1 功能分析與硬件設(shè)計1.1 功能分析1.1.1 主要功能
4、分析根據(jù)舉辦活動及課堂教學(xué)的實際情況分析,系統(tǒng)可初步設(shè)計以下幾種主要功能:(1)實時顯示:將參與者發(fā)送的短信內(nèi)容實時地展現(xiàn)在屏幕上,可用作現(xiàn)場回答提問、回答問題、多人討論等;(2)投票表決:參與者發(fā)送特定的字母或數(shù)字,系統(tǒng)實時統(tǒng)計各選項的人數(shù),可用作無記名投票表決、單個選擇題聯(lián)系等;(3)選擇練習(xí):類似標(biāo)準(zhǔn)化考試中所用的選擇題答題卡,學(xué)生將選擇題答案按規(guī)定格式發(fā)給系統(tǒng),系統(tǒng)自動統(tǒng)計每個學(xué)生的成績和每個題目的正確率等情況。1.1.2 輔助功能分析系統(tǒng)還需要部分附加功能來配合主要功能來充分發(fā)揮系統(tǒng)的全部作用,比如:(1)自適應(yīng)字體:展示用的電腦屏幕分辨率不是固定的,因此最好設(shè)計一種算法使得字體能夠
5、自動適應(yīng)屏幕,將一個短信完整得顯示在屏幕上并且能使屏幕分辨率得到充分的利用;(2)關(guān)鍵詞過濾:將特殊關(guān)鍵詞用其他詞語或星號等替代,避免現(xiàn)場秩序混亂或者不文明發(fā)言;(3)短信號碼過濾:在投票表決等功能中避免無關(guān)人員參加或者一人多投等功能的 出現(xiàn),加入本功能實現(xiàn)無關(guān)號碼的過濾;(4)文件記錄:將所有發(fā)送的短信記錄到文件中,以便日后的查看;(5)用戶界面定制:用戶界面是軟件的重要組成部分,用戶最好可根據(jù)自己的喜好定制自己喜歡的用戶界面,比如顯示界面背景更換,文字字體、顏色的更換等。1.2 硬件設(shè)計1.2.1 硬件部分總體設(shè)計本系統(tǒng)硬件部分較為簡單,包括一個gsm模塊和一臺pc機(jī),如果是筆記本電腦等不
6、帶rs232接口的計算機(jī),還需要一根usb轉(zhuǎn)rs232轉(zhuǎn)接線。系統(tǒng)總體框圖如圖1-1。pc機(jī)gsm模塊sim300通用串口與通信基站無線通信圖1-1 系統(tǒng)總體硬件示意圖1.2.2 gsm模塊gsm是global system for mobile communications的縮寫,意為全球移動通信系統(tǒng),是世界上主要的蜂窩系統(tǒng)之一。gsm80年代興起于歐洲,1991年投入使用。到1997年底,已經(jīng)在100多個國家運(yùn)營,成為歐洲和亞洲實際上的標(biāo)準(zhǔn),到了2001年,在全世界的162個國家已經(jīng)建設(shè)了400個gsm通信網(wǎng)絡(luò)。但gsm系統(tǒng)的容量是有限的,在網(wǎng)絡(luò)用戶過載時,就不得不構(gòu)建更多的網(wǎng)絡(luò)設(shè)施。值得
7、欣慰的是gsm在其他方面性能優(yōu)異,它除了提供標(biāo)準(zhǔn)化的列表和信令系統(tǒng)外,還開放了一些比較智能的業(yè)務(wù)如國際漫游等。gsm手機(jī)的方便之處在于它提供了一個智能卡,人們稱之為sim卡,并且機(jī)卡可以分離,這樣用戶更換手機(jī)并且定制個人信息這方面都十分便利了。gsm模塊,是一個類似于手機(jī)的通訊模塊,集成了手機(jī)的若干功能于一塊小電路板上,它可以發(fā)送短消息,通話等等,模塊雖小,但它具備了很多手機(jī)的功能,擁有它等于就是擁有了手機(jī)的核心部分了,它在很多應(yīng)用領(lǐng)域中都有著廣泛的應(yīng)用,gsm模塊通過使用at指令才能控制它,模塊可以與電腦rs232串口相連,也可以用單片機(jī)來進(jìn)行控制。由于當(dāng)前市場上gsm模塊產(chǎn)品型號眾多,很多
8、國外產(chǎn)品可用的資料卻比較少,特別是中文開發(fā)文檔比較少,所以,我在選擇具體模塊的時候考慮了模塊的技術(shù)成熟度、文檔資料是否易找、購買起來是否方便和性價比。最終選擇了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 個,并且支持 cs-1、cs-2、cs-3 和 cs-4 四種 gprs編碼方案。sim300 結(jié)構(gòu)小巧,外形尺寸僅 40mm*33mm*2.85
9、mm,幾乎可滿足所有對產(chǎn)品尺寸有要求的工業(yè)應(yīng)用,比如智能電話,掌上電腦和其他移動設(shè)備。模塊與移動應(yīng)用設(shè)備通過一個 60 引腳的板板連接器相連,它提供了除了 rf 天線接口的其他所有模塊與開發(fā)板的硬件接口。sim300 具有低功耗設(shè)計,睡眠模式下的電流消耗僅為 2.5ma。sim300 內(nèi)部集成了tcp/ip 協(xié)議棧,并且擴(kuò)展了 tcp/ip at指令,使用戶利用該模塊開發(fā)數(shù)據(jù)傳輸設(shè)備變得特別簡單、方便。 1.2.3 usb-rs232轉(zhuǎn)接線因現(xiàn)在絕大多數(shù)個人計算機(jī)都不帶硬件串行口,而sim300 gsm模塊必須用usart與電腦進(jìn)行通信,因此需要模擬出一個串行口供gsm模塊使用。而現(xiàn)在常用的方
10、法就是使用usb-rs232轉(zhuǎn)接線。usb-rs232轉(zhuǎn)接線可以將串口數(shù)據(jù)通過usb總線發(fā)送給計算機(jī)。其結(jié)構(gòu)非常簡單,一般只有兩個芯片。其中一個是usb轉(zhuǎn)ttl電平芯片,另外一個是ttl電平轉(zhuǎn)rs232電平芯片。后者現(xiàn)在的產(chǎn)品都清一色的選用max232(5v)或者max3232(3.3v),而前者有很多種選擇,比如低端的pl2303、hc340,中端的cp2102,高端的ft232等。因gsm所需的波特率不高,所以我選擇了低端的hc340芯片。轉(zhuǎn)接線的制作非常簡單,按照參考電路將各個芯片連接好即可。2 軟件開發(fā)環(huán)境及所需技術(shù)簡介2.1 集成開發(fā)環(huán)境2.1.1 集成開發(fā)環(huán)境的選擇microsof
11、t公司的windows操作系統(tǒng)是目前國內(nèi)最常用的操作系統(tǒng),而windows平臺下的集成開發(fā)環(huán)境主要有c+ builder、delphi、eclipse、visual studio等。而microsoft公司的visual studio無疑是最常用、兼容性最好、技術(shù)支持資料最多的集成開發(fā)環(huán)境?,F(xiàn)在常用的visual studio版本主要為6.0、2008、2010。其中6.0版是最經(jīng)典的版本,國內(nèi)絕大部分高校、部分企業(yè)都把它當(dāng)做開發(fā)或者教學(xué)的首選,其優(yōu)點是效率高、技術(shù)支持資料多、界面簡潔。但由于其版本太過陳舊,因此不能使用較新的技術(shù),對最新版本的windows系統(tǒng)兼容性不好。2010版是visu
12、al studio的最新版本,支持最新的技術(shù),有這絢麗的界面,但由此帶來的是巨大的資源消耗和極低的效率。綜上考慮,我選擇了介于兩者之間的visual studio 2008版本。2.1.2 visual studio 2008簡介visual studio 是一套完整的開發(fā)工具,用于生成 asp.net web 應(yīng)用程序、xml web services、桌面應(yīng)用程序和移動應(yīng)用程序。visual basic、visual c# 和 visual c+ 都使用相同的集成開發(fā)環(huán)境 (ide),這樣就能夠進(jìn)行工具共享,并能夠輕松地創(chuàng)建混合語言解決方案。另外,這些語言使用 .net framework
13、 的功能,它提供了可簡化 asp web 應(yīng)用程序和 xml web services 開發(fā)的關(guān)鍵技術(shù)。visual studio 2008 在三個方面為開發(fā)人員提供了關(guān)鍵改進(jìn):快速的應(yīng)用程序開發(fā)、高效的團(tuán)隊協(xié)作、突破性的用戶體驗。visual studio 2008 提供了高級開發(fā)工具、調(diào)試功能、數(shù)據(jù)庫功能和創(chuàng)新功能,幫助在各種平臺上快速創(chuàng)建當(dāng)前最先進(jìn)的應(yīng)用程序。 visual studio 2008 包括各種增強(qiáng)功能,例如可視化設(shè)計器(使用 .net framework 3.5 加速開發(fā))、對 web 開發(fā)工具的大量改進(jìn),以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強(qiáng)功能。visual st
14、udio 2008 為開發(fā)人員提供了所有相關(guān)的工具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持 ajax 的 web 應(yīng)用程序。 開發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的 web 應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運(yùn)行并完全訪問 asp net 應(yīng)用程序服務(wù)和 microsoft 平臺。2.2 程序設(shè)計語言2.2.1 visual studio 2008 所支持的程序設(shè)計語言visual studio 2008包含 visual c+、visual basic、visual c#等組件,分別支持 c+、basic、c#等程序
15、設(shè)計語言。visual basic是一種可視化的、面向?qū)ο蠛筒捎檬录?qū)動方式的結(jié)構(gòu)化高級程序設(shè)計語言,可用于開發(fā)windows環(huán)境下的各類應(yīng)用程序。它簡單易學(xué)、效率高,且功能強(qiáng)大可以與專業(yè)開發(fā)工具sdk相媲美。在visual basic環(huán)境下,利用事件驅(qū)動的編程機(jī)制、新穎易用的可視化設(shè)計工具,使用windows內(nèi)部的廣泛應(yīng)用程序接口(spi)函數(shù),以用動態(tài)鏈接庫(dll)、對象的鏈接與世隔嵌入(ole)、開放式數(shù)據(jù)連接(odbc)等技術(shù),可以高效、快速地開發(fā)windows環(huán)境下功能強(qiáng)大、圖形界面豐富的應(yīng)用軟件系統(tǒng)。但由于basic語言是一種解釋運(yùn)行的語言,它的效率要比編譯運(yùn)行的語言低得多。vi
16、sual c+是microsoft公司推出的開發(fā)win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設(shè)計集成交互操作、可開發(fā)多種程序等優(yōu)點,而且通過簡單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫接口、ole2,winsock網(wǎng)絡(luò)、3d控制界面。c#(c sharp)是microsoft為.net framework量身訂做的程序語言,c#擁有c/c+的強(qiáng)大功能以及visual basic簡易使用的特性,是第一個組件導(dǎo)向(component-oriented)的程序語言,和c+與java一樣亦為對象導(dǎo)向(object-oriented)程序語
17、言。2.2.2 程序設(shè)計語言的選擇從上文的介紹來看,具有c語言語法和高效性又具有basic語言簡便性的c#語言貌似是本項目的最佳選擇。但本平臺的應(yīng)用特點決定了該程序?qū)⒃诙鄠€具有不同版本操作系統(tǒng)的計算機(jī)上運(yùn)行,而且大多數(shù)此類計算機(jī)都帶有還原卡。而c#程序的運(yùn)行又必須依賴于.net framework,每次使用前都配置一次程序無疑是項非常耗費(fèi)時間的工作。而visual c+程序可以將所需的動態(tài)鏈接庫靜態(tài)封裝在程序中,雖然程序體積會變大,但使用非常方便。因此,我選擇visual c+作為開發(fā)本平臺的程序設(shè)計語言。2.3 微軟基礎(chǔ)類庫(mfc)簡介mfc(microsoft foundation cl
18、asses),是一個微軟公司提供的類庫(class libraries),以c+類的形式封裝了windows的api,并且包含一個應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大量windows句柄封裝類和很多windows的內(nèi)建控件和組件的封裝類。mfc(microsoft foundation class library)中的各種類結(jié)合起來構(gòu)成一個應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立windows下的應(yīng)用程序,這是一種相對sdk來說更為簡潔的方法。因為整體上,mfc框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具
19、體應(yīng)用程序特有的東西填入這個輪廓。microsoft visual c+提供了相應(yīng)的工具來完成這個工作:appwizard可以用來生成初步的框架文件(代碼和資源等):資源編輯器用于幫助直觀地設(shè)計用戶接口;classwizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯。微軟基礎(chǔ)類庫由兩部分組成:一是通常所說的c+類庫,是mfc類庫的主體部分,這些類構(gòu)成了mfc應(yīng)用程序框架。二是mfc預(yù)定義宏、全局變量和全局函數(shù),是mfc類庫的輔助部分,它們都是mfc進(jìn)行windows應(yīng)用程序開發(fā)不可缺少的組成部分。mfc類庫按照功能應(yīng)用劃分為基本基類(根類、cobject類、c
20、runtimeclass類、命令目標(biāo)類、窗口類)、應(yīng)用程序結(jié)構(gòu)類(應(yīng)用程序類、文檔模板類、邊框窗口類、文檔類、視圖類、菜單和控件欄類等)、對話框和控件類(一般對話框類、通用對話框類、屬性選項卡類、網(wǎng)頁對話框類、普通控件類和附加控件類、通用控件類、clistctrl類)、圖形顯示和打印類(繪圖類、gdi繪圖工具欄類、其它繪圖工具類、mfc打印機(jī)制和打印信息類)、數(shù)據(jù)類型和集合類(簡單數(shù)據(jù)類型類、數(shù)組類、鏈表類、映射類、模板集合類)、線程和同步類(線程類、同步類、同步訪問類)、文件和數(shù)據(jù)庫類(文件類、odbc數(shù)據(jù)庫類、ole-db數(shù)據(jù)庫類)、網(wǎng)絡(luò)和internet類(windows sockets
21、類、isapi類、wininet類)、ole類(容器程序類、文字處理器程序類、服務(wù)器程序類、ole拖放和數(shù)據(jù)傳輸類、ole自動化類、與ole有關(guān)的類)、activex控件類(activex控件的核心類、與activex控件有關(guān)的其它類)、調(diào)試和異常類(調(diào)試支持類、異常類)。2.4 微軟通信控制(ms communication control, mscomm)控件簡介microsoft communication control是microsoft公司提供的一種專門用于控制pc機(jī)串口通信的activex控件,利用它可以極大地簡化串口編程。mscomm也提供了各種中斷響應(yīng)代碼與錯誤處理代碼。本程
22、序中使用的是microsoft communication control 6.0版本的控件。mscomm控件提供了功能完善的串口數(shù)據(jù)的發(fā)送和接收功能,mscomm控件具有兩種處理方式:1、事件驅(qū)動方式:由mscomm控件的oncomm事件捕獲并處理通信錯誤及事件;2、查詢方式:通過檢查commevent屬性的值來判斷事件和錯誤。mscomm控件的通信功能實現(xiàn),實際上是調(diào)用了api函數(shù),而api函數(shù)是由comm.drv解釋并傳給設(shè)備驅(qū)動程序執(zhí)行的,對于程序開發(fā)者只需知道m(xù)scomm控件的屬性和事件的用法即可以實現(xiàn)串口的操作。如果在通信過程中發(fā)生錯誤或事件,就會引發(fā)oncomm事件并且改變屬性值
23、,由commevent屬性代碼反映錯誤類型,在通信程序的設(shè)計中可根據(jù)該屬性值來執(zhí)行不同的操作。3 軟件設(shè)計3.1 用戶界面設(shè)計一個好的ui(user interface,用戶界面)不僅能能使軟件有一個好的“面子”還能方便用戶操作、帶給用戶良好的體驗。而且本軟件的一項重要功能就是展示功能,因此必須重視用戶界面的設(shè)計。3.1.1 主窗口設(shè)計本平臺在使用時一般與powerpoint等演示軟件一起配合,在無新任務(wù)時盡量避免主窗口的占用屏幕空間,影響演示軟件的運(yùn)行。把主窗口設(shè)計成對話框形式是一個比較好的選擇。新建一個visual studio 2008工程,工程名取為cis2,在“工程類型”中選擇“mf
24、c應(yīng)用程序”,在“mfc應(yīng)用程序向?qū)А钡摹皯?yīng)用程序類型”選項卡中選擇“基于對話框”單選項,即可創(chuàng)建一個基于對話框的mfc應(yīng)用程序。因需要在多臺電腦上使用本程序,“mfc的使用”盡量選擇“在靜態(tài)庫中使用mfc”,這樣系統(tǒng)會把mfc的所需模塊編譯到exe應(yīng)用程序中,不需要dll文件的支持。在“用戶界面功能”選項卡中,僅選中“最小化框”,其他都不選擇。在“生成的類”選項卡中,可以看到系統(tǒng)會給應(yīng)用程序自動生成兩個類。其中,ccis2app是應(yīng)用程序類,ccis2dlg是主窗口的類,它是cdialog的一個派生類。完成新工程的配置后,vs2008會自動生成主對話框,之后就可以向上擺放需要的控件了。在本程
25、序中,根據(jù)平臺功能的需要,擺放五個組合框,其caption屬性分別改名為“通信”、“狀態(tài)”、“功能”、“屬性”、“控制”。之后向組合框中添加需要的控件,添加完成后根據(jù)需要改變控件的大小和位置??丶[放完成后,將對話框大小調(diào)整到合適的程度,最終完成的效果如圖3-1。圖3-1 主對話框樣式3.1.2 主窗口ui程序為使窗口上的某些控件在啟動時默認(rèn)選中或默認(rèn)禁用,需要在ccis2dlg:oncreate()中添加部分代碼。使“關(guān)閉”按鈕默認(rèn)禁用:getdlgitem(idc_buttonclose)-enablewindow(false);使“即時交互”和“顯示發(fā)件人及時間”默認(rèn)選中:cbutton
26、* radio=(cbutton*)getdlgitem(idc_radio1);radio-setcheck(1);cbutton *pncheck=(cbutton*)getdlgitem(idc_check1);pncheck-setcheck(1);使“顯示延時”文本編輯框中顯示默認(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)顯示”中的文字也非常簡單, 如:getdlgitem(idc_stasta)-setwindowtext(l系統(tǒng)已關(guān)閉);3.1.3 顯示窗口設(shè)計顯示窗口用來顯示系統(tǒng)接收到的短信等內(nèi)容,其前期設(shè)計非常簡單,只需要新建一個對話框,“屬性”中去掉邊框,并擺放4個button類控件即可,如圖3-2.圖3-2 顯示窗口的初步設(shè)計3.1.4 顯示窗口ui程序相比主窗口來說,顯示窗口的程序設(shè)計要復(fù)雜得多。首先,顯示窗口在
28、需要在彈出后置于其他所有窗口的頂端,并且為了盡量少地遮蓋后方窗口,顯示窗口需要根據(jù)要顯示的內(nèi)容自動調(diào)整大小并居中。得到顯示文字的大小可以用mfc中的cdc:gettextmetrics()函數(shù)取得。具體代碼如下:dc.selectobject(&m_showfont);dc.gettextmetrics(&tm);tsize=dc.gettextextent(m_showtext);得到文本的大小參數(shù)后,可以用cwnd:setwindowpos()函數(shù)來設(shè)置窗口的大小,函數(shù)的第一個參數(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ù)多次試驗湊試出來的最佳值。調(diào)整好窗口的大小后,四個按鈕控件的位置也需要改變到窗口的右下角,實現(xiàn)該功能同樣可以用cwnd:setwindowpos()函數(shù)實現(xiàn)。在調(diào)整控件位置之前,需要獲取窗口的位置和大小,從而得到窗口最右下角的大小,這個功能可以用cwnd: getwindowrect()函數(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);第一次開啟窗口時,最好將窗口置于屏幕最中央,得到屏幕分辨率等信息可用:getsystemmetics()函數(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)實窗口的背景圖片和文字的字體、顏色。加入背景圖片需要先在工程資源中加入要顯示背景的bitmap文件。然后將資源加載到畫刷中,可用如下代碼完成: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);在一個固定區(qū)域中顯示多行文字最好的方法是用cdc:drawtext()函數(shù),函數(shù)的參數(shù)3為設(shè)置文本顯示方式,dt_center為在區(qū)域中居中顯示,dt_wordbreak為自動換行:dc.drawtext(m_showtext,showrect,dt_center | dt_wordbreak); 顯示窗口還有一個問題,就是它沒有標(biāo)題欄,無法移動窗
34、口的位置。解決這個問題的方法是將窗口的客戶區(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除了以上兩個主要窗口外,還有“關(guān)于”窗口和“字體
35、設(shè)置”窗口,這兩個窗口沒有特別復(fù)雜的代碼,只需要完成大體設(shè)計即可。“關(guān)于”窗口和“字體設(shè)置”窗口的效果如圖3-4和圖3-5:圖3-4 “關(guān)于”窗口圖3-5 “字體設(shè)置”窗口3.2 串口程序設(shè)計3.2.1 mscomm控件的使用mscomm控件使用前先在“菜單-項目-添加類”中加入microsoft communication control 6.0控件,之后在工具箱中點擊右鍵,在彈出菜單中點“選擇項”,把相應(yīng)控件加入到工具箱并拖動到窗口里。最后右鍵點擊控件為該控件在ccis2dlg類中創(chuàng)建一個控制變量m_comm.3.2.2 串口初始化可根據(jù)需要設(shè)置不同的串口參數(shù)并初始化串口。在本例中,由實驗
36、得到gsm模塊的最佳波特率為38400bps,串口幀格式為8位,無奇偶校驗,1位停止位。因不同的計算機(jī)使用串口的端口不一樣,這可由用戶在主界面的一個下拉菜單中選擇,選擇代碼如下:uint portnum=m_serialportselect.getcursel()+1;得到串口號后,就可以用mscomm類中的成員函數(shù)對所使用的串口進(jìn)行初始化:m_comm.put_commport(portnum); /設(shè)置串口號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() /打開串口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ā)較為簡單,但是由于串口通常使用ascii碼或16進(jìn)制代碼作為發(fā)送接收的統(tǒng)一編碼,而本程序為了處理方便使用的是unicode編碼,提取和轉(zhuǎn)換這些編碼是一件非常麻煩
38、的事情。關(guān)于unicode及其他編碼的轉(zhuǎn)換和處理會在之后的章節(jié)中單獨(dú)說明,在此只描述串口數(shù)據(jù)的基本收發(fā)程序。串口數(shù)據(jù)的發(fā)送使用mscomm:put_output()函數(shù)來實現(xiàn),每次只能收發(fā)一個字節(jié)的數(shù)據(jù),因此需要對數(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)過上述代碼的處理,接收到
40、的全部短信內(nèi)容已經(jīng)就全部存放在cstring類型的m_rxbuf數(shù)據(jù)成員里了。3.3 編碼轉(zhuǎn)換程序3.3.1 unicode碼與ascii碼unicode(統(tǒng)一碼、萬國碼、單一碼)是一種在計算機(jī)上使用的字符編碼。它為每種語言中的每個字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開始研發(fā),1994年正式公布。隨著計算機(jī)工作能力的增強(qiáng),unicode也在面世以來的十多年里得到普及。unicode定義了大到足以代表人類所有可讀字符的字符集。美國標(biāo)準(zhǔn)信息交換代碼是由美國國家標(biāo)準(zhǔn)學(xué)會(american national standard institute
41、, ansi )制定的,標(biāo)準(zhǔn)的單字節(jié)字符編碼方案,用于基于文本的數(shù)據(jù)。起始于50年代后期,在1967年定案。它最初是美國國家標(biāo)準(zhǔn),供不同計算機(jī)在相互通信時用作共同遵守的西文字符編碼標(biāo)準(zhǔn),它已被國際標(biāo)準(zhǔn)化組織(international organization for standardization, iso)定為國際標(biāo)準(zhǔn),稱為iso 646標(biāo)準(zhǔn)。適用于所有拉丁文字字母。在visual c+ 6.0及以前的版本中,絕大多數(shù)嵌入式編譯器中,用的是ascii編碼,ascii編碼存儲的基本單位是8位的char型。unicode編碼的基本存儲單位是16位的wchar_t型,visual studio
42、2008默認(rèn)使用的就是unicode編碼(自動定義宏_unicode)。mfc中有很多unicode編碼操作函數(shù),因此使用unicode能極大簡化程序。在visual studio 2008 ide中,用英文半角雙引號包裹的是ascii碼字符串,而用l+英文半角雙引號包裹的是unicode編碼。3.3.2 unicode字符串和ascii字符串的轉(zhuǎn)換mfc中提供了unicode字符串和ascii字符串的函數(shù),分別是widechartomultibyte()和multibytetowidechar().但這兩個函數(shù)都需要一個代表字符串長度的形參,和一個cstring型變量。因此,為高效地使用這兩
43、個函數(shù),我們可以用new和delete運(yùn)算符在程序內(nèi)存的堆區(qū)動態(tài)分配一個cstring類型,然后利用兩個函數(shù)的返回值確定字符串長度,具體程序如下:/將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握手成功,請啟動);/控件控制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為起始的一個字符串將短信內(nèi)容發(fā)送給程序;(4)程序發(fā)送at+cmgd = m_index指令將該條短信從sim卡上刪除。判斷是否是新短信提示信息,并要求接收短信的程序?qū)崿F(xiàn)如下:/串口接收實踐中,判斷是否是接收到短信的提示信息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)是指對等層次之間傳遞的數(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ā)短信代碼簡單,實現(xià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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級公開課與示范教學(xué)計劃
- 秋季數(shù)字化學(xué)習(xí)與在線教育實施計劃
- 第1課時 三位數(shù)乘兩位數(shù)(教學(xué)實錄)-2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版
- 三年級信息技術(shù)上冊 第八課 尋找“食人花”教學(xué)實錄 華中師大版
- 2024年服裝設(shè)計師兼職合同
- 2024年度橋西區(qū)圖書館數(shù)字資源室租賃協(xié)議3篇
- 8制作我的小樂器 教學(xué)實錄-2024-2025學(xué)年科學(xué)四年級上冊教科版
- 六盤水職業(yè)技術(shù)學(xué)院《自動化工具軟件》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024SaaS企業(yè)管理軟件銷售及服務(wù)合同3篇
- 醫(yī)療衛(wèi)生機(jī)構(gòu)集中采購藥品購銷合同
- 《物流系統(tǒng)規(guī)劃與設(shè)計》課程教學(xué)大綱
- 護(hù)理質(zhì)控分析整改措施(共5篇)
- 金屬礦山安全教育課件
- 托盤演示教學(xué)課件
- 中華農(nóng)耕文化及現(xiàn)實意義
- DB32T 4353-2022 房屋建筑和市政基礎(chǔ)設(shè)施工程檔案資料管理規(guī)程
- DBJ61-T 112-2021 高延性混凝土應(yīng)用技術(shù)規(guī)程-(高清版)
- 2023年高考數(shù)學(xué)求定義域?qū)n}練習(xí)(附答案)
- 農(nóng)產(chǎn)品品牌與營銷課件
- 蘇科版一年級心理健康教育第17節(jié)《生命更美好》教案(定稿)
- 車輛二級維護(hù)檢測單參考模板范本
評論
0/150
提交評論