串行異步通信程序設(shè)計_第1頁
串行異步通信程序設(shè)計_第2頁
串行異步通信程序設(shè)計_第3頁
串行異步通信程序設(shè)計_第4頁
串行異步通信程序設(shè)計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、*實(shí)踐教學(xué)* 蘭州理工大學(xué)計算機(jī)與通信學(xué)院2014年秋季學(xué)期通信系統(tǒng)綜合訓(xùn)練課程設(shè)計 題 目: 串行異步通信程序設(shè)計 專業(yè)班級: 通信工程(1)班 姓 名: 李銀環(huán) 學(xué) 號: 11250134 指導(dǎo)教師: 王惠琴 成 績: 摘要 在windows環(huán)境下實(shí)現(xiàn)通信的方法主要有利用mscomm控件和直接用windowsapi編程,軟件采用microsoftvisualc+6.0,利用mscomm控件編程相對來說更簡單一些,而直接使用windowsapi編程更靈活一些。 本次課程設(shè)計分析了串行異步通信的基本原理,在vc+6.0的環(huán)境下利用mscomm控件實(shí)現(xiàn)了兩個pc機(jī)的com口間的數(shù)據(jù)發(fā)送和接收。本

2、文通過對com1口進(jìn)行初始化編程,以及對建立的工程中的每個對話框和按鈕分別進(jìn)行編程和設(shè)置,成功的實(shí)現(xiàn)了利用pc機(jī)的兩個com口進(jìn)行異步通信,并能根據(jù)設(shè)置調(diào)整異步傳行通信參數(shù)。關(guān)鍵詞:vc+6.0;mscomm控件;串行異步通信目錄前言1第1章 串行異步通信基本原理21.1 串行通信協(xié)議21.2 串口通信的基本概念31.3 rs-232簡介4第2章 vc+軟件簡介52.1 vc+6.0簡介52.2 microsoft communications control 控件6第3章 串行異步通信系統(tǒng)分析7第4章 串行異步通信系統(tǒng)設(shè)計84.1建立工程84.2 在程序中添加mscomm控件94.3 初始化

3、串口:設(shè)置mscomm控件的屬性114.4 發(fā)送數(shù)據(jù)12第5章 串行異步通信程序調(diào)試185.1 計算機(jī)串口設(shè)置185.2 程序運(yùn)行結(jié)果18參考文獻(xiàn)20附錄21致謝29前言隨著現(xiàn)代信息技術(shù)的發(fā)展以及計算機(jī)網(wǎng)絡(luò)的廣泛應(yīng)用,計算機(jī)通信技術(shù)已經(jīng)日趨成熟,串口通信作為一種靈活、方便、可靠的通信方式,被廣泛應(yīng)用于工業(yè)控制中。同時串行通信還應(yīng)用于交通控制、分布數(shù)據(jù)采集系統(tǒng)、通信距離擴(kuò)展、電力系統(tǒng)數(shù)據(jù)采集與控制系統(tǒng)、高速公路收費(fèi)系統(tǒng)、遠(yuǎn)程控制、保密通信系統(tǒng)和教學(xué)實(shí)驗(yàn)等等。 在數(shù)據(jù)通信、計算機(jī)網(wǎng)絡(luò)以及工業(yè)上的分布式控制系統(tǒng)中,經(jīng)常需要采用串行通信來達(dá)到遠(yuǎn)程信息交換的目的。當(dāng)控制計算機(jī)與各數(shù)控機(jī)床相距較遠(yuǎn)時,一般

4、采用串行通信方式而不采用并行通信方式。這是因?yàn)椴⑿型ㄐ畔到y(tǒng)的造價較高、眾多的連線不僅容易引入干擾,也容易發(fā)生線路故障。串行通信由于接線少、成本低,在數(shù)據(jù)采集和控制系統(tǒng)中得到了廣泛的應(yīng)用,控制系統(tǒng)中常用的串行通信一般采用rs-232串行總線標(biāo)準(zhǔn),rs-232是pc機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。 windows下雙機(jī)點(diǎn)到點(diǎn)的串行通信系統(tǒng)是一個典型的通信系統(tǒng),它是我們?yōu)榱藢?shí)現(xiàn)計算機(jī)底層的工作,以及為了用戶更好地和系統(tǒng)能夠直接相連而提出來的。 經(jīng)過分析我使用了rs-232c為接口線路以及microsoft公司的visual c+ 6.0作為開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具來開發(fā)的

5、系統(tǒng)。論述了采用自頂向下的設(shè)計方法,模塊化設(shè)計思路,以及總體設(shè)計編碼和調(diào)試,其開發(fā)主要包括數(shù)據(jù)的發(fā)送與接收等方面。在本次課程設(shè)計中,討論了使用vc+的開發(fā)環(huán)境實(shí)現(xiàn)兩臺pc機(jī)間的串口通信。就是通過一個mscomm控件,用一個rs-232串口線將兩臺機(jī)子間的串口連接起來,從而進(jìn)行數(shù)據(jù)收發(fā)。而使用winapi進(jìn)行串口通信不像使用mscomm控件那么容易,需要設(shè)置多個參數(shù)。第1章 串行異步通信基本原理1.1 串行通信協(xié)議串行傳輸可采用以下兩種方法:異步傳輸和同步傳輸。1.1.1 異步傳輸協(xié)議在異步傳輸方式中,數(shù)據(jù)傳輸單位是字符。在通信的數(shù)據(jù)流中,字符間異步,字符內(nèi)部各位間同步。異步通信方式的“異步”主

6、要體現(xiàn)在字符與字符之間通信沒有嚴(yán)格的定時要求。異步傳輸中,字符可以是連續(xù)地、一個個地發(fā)送,也可以是不連續(xù)地、隨機(jī)地進(jìn)行單獨(dú)發(fā)送。在一個字符格式的停止位之后,立即發(fā)送下一個字符的起始位,開始一個新的字符的傳輸,這叫做連續(xù)的串行數(shù)據(jù)發(fā)送,即幀與幀之間是連續(xù)的。斷續(xù)的串行數(shù)據(jù)傳送是指在一幀結(jié)束之后維持?jǐn)?shù)據(jù)線的“空閑”狀態(tài),新的起始位可在任何時刻開始。一旦傳送開始,組成這個字符的各個數(shù)據(jù)位將被連續(xù)發(fā)送,并且每個數(shù)據(jù)位持續(xù)的時間是相等的。接收端根據(jù)這個特點(diǎn)與數(shù)據(jù)發(fā)送端保持同步,從而正確地恢復(fù)數(shù)據(jù)。收發(fā)雙方則以預(yù)先約定的傳輸速率,在時鐘的作用下,傳送這個字符中的每一位。 起止式異步協(xié)議的特點(diǎn)是一個字符一個

7、字符傳輸,并且傳送一個字符總是以起始位開始,以停止位結(jié)束,字符之間沒有固定的時間間隔要求。每一個字符的前面都有一位起始位(低電平,邏輯值0),字符本身有57位數(shù)據(jù)位組成,接著字符后面是一位校驗(yàn)位(也可以沒有校驗(yàn)位),最后是一位,或意味半,或二位停止位,停止位后面是不定長度的空閑位。停止位和空閑位都規(guī)定為高電平(邏輯值),這樣就保證起始位開始處一定有一個下跳沿。異步串行通信的可靠性高,但由于要在每個字符的前后加上起始位和停止位這樣一些附加位,使得傳輸效率變低了,只有約80%。因此,起止協(xié)議一般用在數(shù)據(jù)速率較慢的場合(小于19.2kbit/s)。在高速傳送時,一般要采用同步協(xié)議。1.1.2 同步傳

8、輸協(xié)議在同步傳輸方式中,以幀為數(shù)據(jù)傳輸單位,每個幀中含有多個字符代碼,而且字符代碼與字符代碼之間沒有間隙以及起始位和停止位。和異步傳輸相比,數(shù)據(jù)傳輸單位的加長容易引起時鐘漂移。為了保證接收端能夠正確地區(qū)分?jǐn)?shù)據(jù)流中的每個數(shù)據(jù)位,收發(fā)雙方必須通過某種方法建立起同步的時鐘??梢栽诎l(fā)送器和接收器之間提供一條獨(dú)立的時鐘線路,由線路的一端(發(fā)送器或者接收器)定期地在每個比特時間中向線路發(fā)送一個短脈沖信號,另一端則將這些有規(guī)律的脈沖作為時鐘。這種技術(shù)在短距離傳輸時表現(xiàn)良好,但在長距離傳輸中,定時脈沖可能會和信息信號一樣受到破壞,從而出現(xiàn)定時誤差。另一種方法是通過采用嵌有時鐘信息的數(shù)據(jù)編碼位向接收端提供同步信

9、息。(1)面向字符的同步協(xié)議這種協(xié)議的特點(diǎn)是一次傳送由若干個字符組成的數(shù)據(jù)塊,而不是只傳送一個字符,并規(guī)定了10個字符作為這個數(shù)據(jù)塊的開頭與結(jié)束標(biāo)志以及整個傳輸過程的控制信息,它們也叫做通信控制字。由于被傳送的數(shù)據(jù)塊是由字符組成,故被稱作面向字符的協(xié)議。(2)面向比特的同步協(xié)議該協(xié)議的特點(diǎn)是所傳輸?shù)囊粠瑪?shù)據(jù)可以是任意位,而且它是靠約定的位組合模式,而不是靠特定字符來標(biāo)志幀的開始和結(jié)束,故稱“面向比特”的協(xié)議。1.2 串口通信的基本概念1.2.1 串行通信 串行通信數(shù)據(jù)傳送的特點(diǎn)是:數(shù)據(jù)傳送按位順序進(jìn)行,最少只需要一根傳輸線即可完成,節(jié)省傳輸線。與并行通信相比,串行通信還有較為顯著的優(yōu)點(diǎn):傳輸距

10、離長,可以從幾米到幾千米;在長距離內(nèi)串行數(shù)據(jù)傳送速率會比并行數(shù)據(jù)傳送速率快;串行通信的通信時鐘頻率容易提高;串行通信的抗干擾能力十分強(qiáng),其信號間的互相干擾完全可以忽略。但是串行通信傳送速度比并行通信慢得多,并行通信時間為t,則串行時間為nt。1.2.2 串行通信的工作模式串行數(shù)據(jù)通信的基礎(chǔ)是單線傳輸信息,數(shù)據(jù)通常是在兩個站(點(diǎn)對點(diǎn))之間進(jìn)行傳送,按照數(shù)據(jù)流的方向可分成3種傳送模式:單工形式、半雙工形式和全雙工形式。 (1)單工形式:在單工形式中數(shù)據(jù)傳送是單向的。通信雙方中,一方固定為發(fā)送端,另一方則固定為接收端。信息只能沿一個方向傳送,使用一根傳輸線,例如,計算機(jī)與打印機(jī)之間的通信是單工形式,

11、因?yàn)橹挥杏嬎銠C(jī)向打印機(jī)傳送數(shù)據(jù),而沒有相反的數(shù)據(jù)傳送。還有在某些通信信道中,如單工無線發(fā)送等。 (2)半雙工形式:半雙工通信使用同一根傳輸線,既可發(fā)送數(shù)據(jù)又可接收數(shù)據(jù),但不能同時發(fā)送和接收。在任何時刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。因此半雙工形式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線。半雙工通信中每端需有一個收發(fā)切換電子開關(guān),通過切換來決定數(shù)據(jù)向哪個方向傳輸。因?yàn)橛星袚Q,所以會產(chǎn)生時間延遲。但是對于像打印機(jī)這樣單方向傳輸?shù)耐鈬O(shè)備,用半雙工方式就能滿足要求了,不必采用全雙工方式,可節(jié)省一根傳輸線。 (3)全雙工形式:全雙工數(shù)據(jù)通信分別由兩根可以在兩個不同的站點(diǎn)同時發(fā)送和接收的傳輸

12、線進(jìn)行傳送,通信雙方都能在同一時刻進(jìn)行發(fā)送和接收操作,在全雙工方式中,每一端都有發(fā)送器和接收器,有兩條傳送線,可在交互式應(yīng)用和遠(yuǎn)程監(jiān)控系統(tǒng)中使用,信息傳輸效率較高。1.3 rs-232簡介 在串行通訊時,要求通訊雙方都采用一個標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來進(jìn)行通訊.本次課程設(shè)計采用rs-232接口。rs-232-c接口(又稱eia rs-232-c)是目前最常用的一種串行通訊接口. (rs-232-c中的-c只不過表示rs-232的版本,所以與rs-232簡稱是一樣的)它是在1970年由美國電子工業(yè)協(xié)會(eia)聯(lián)合貝爾系統(tǒng),調(diào)制解調(diào)器廠家及計算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的

13、標(biāo)準(zhǔn).它的全名是數(shù)據(jù)終端設(shè)備(dte)和數(shù)據(jù)通訊設(shè)備(dce)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)該標(biāo)準(zhǔn)規(guī)定采用一個25個腳的db-25連接器,對連接器的每個引腳的信號內(nèi)容加以規(guī)定,還對各種信號的電平加以規(guī)定.后來ibm的pc機(jī)將rs232簡化成了db-9連接器,從而成為事實(shí)標(biāo)準(zhǔn).而工業(yè)控制的rs-232口一般只使用rxd,txd,gnd三條線.它適合于數(shù)據(jù)傳輸速率在020000b/s范圍內(nèi)的通信。這個標(biāo)準(zhǔn)對串行通信接口的有關(guān)問題,如信號線功能、電器特性都作了明確規(guī)定。在txd和rxd上:邏輯1(mark)=-3v-15v,邏輯0(space)=+315v,在rts、cts、dsr、dtr和dc

14、d等控制線上: 信號有效(接通,on狀態(tài),正電壓)+3v+15v 信號無效(斷開,off狀態(tài),負(fù)電壓)=-3v-15rs232的邏輯電平與ttl以高低電平表示邏輯狀態(tài)的規(guī)定不同。因此,為了能夠同計算機(jī)接口或終端的ttl器件連接,必須在eia-rs-232c與ttl電路之間進(jìn)行電平和邏輯關(guān)系的變換。實(shí)現(xiàn)這種變換的方法可用分立元件,也可用集成電路芯片。目前較為廣泛地使用集成電路轉(zhuǎn)換器件,如mc1488、sn75150芯片可完成ttl電平到eia電平的轉(zhuǎn)換,而mc1489、sn75154可實(shí)現(xiàn)eia電平到ttl電平的轉(zhuǎn)換。max232芯片可完成ttleia雙向電平轉(zhuǎn)換。第2章 vc+軟件簡介2.1

15、vc+6.0簡介vc+6.0是microsoft公司推出的一個基于windows系統(tǒng)平臺、可視化的集成開發(fā)環(huán)境,它的源程序按c+語言的要求編寫,并且加入了微軟提供的功能強(qiáng)大的mfc(microsoft foundation class)類庫。mfc中封裝了大部分windows api函數(shù)和windows控件,它包含的功能涉及到整個windows操作系統(tǒng)。mfc不僅給用戶提供了windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件,這樣,開發(fā)人員不必從頭設(shè)計創(chuàng)建和管理一個標(biāo)準(zhǔn)windows應(yīng)用程序所需的程序,而是從一個比較高的起點(diǎn)編程,故節(jié)省了大量的時間。另外,它提供了大量的代碼

16、,指導(dǎo)用戶編程時實(shí)現(xiàn)某些技術(shù)和功能。因此,使用vc+提供的高度可視化的應(yīng)用程序開發(fā)工具和mfc類庫,可使應(yīng)用程序開發(fā)變得簡單。vc+部分說明如下:(1)lresult表示函數(shù)返回值為長整數(shù),由系統(tǒng)使用。(2)callback表示該函數(shù)是回調(diào)函數(shù),由系統(tǒng)調(diào)用。(3)hwnd該參數(shù)是接收消息的窗口句柄,它和createwindow()函數(shù)的返回值相同。(4)message該參數(shù)是用來標(biāo)識該消息的數(shù)字。(5)wparam和 lparam 兩個參數(shù)是32位的消息參數(shù),用來提供消息的附加信息。在窗口函數(shù)中,根據(jù)接收的消息信息(message,wparam和lparam)進(jìn)行判斷,然后分門別類地進(jìn)行處理。

17、窗口函數(shù)中使用switch語句定義對應(yīng)用程序接收到的不同消息的響應(yīng),包含了對各種可能接收到的消息的處理過程。每一條case語句對應(yīng)一種消息,當(dāng)應(yīng)用程序接收到一個消息時,相應(yīng)的case語句被激活并執(zhí)行相應(yīng)的響應(yīng)程序模塊。程序員可以在switch語句中增加對各種消息的處理代碼。wm_destroy消息是關(guān)閉窗口時發(fā)出的,處理方法是調(diào)用函數(shù)postquitmessage() 向應(yīng)用程序發(fā)出wm_quit消息,請求退出處理函數(shù)。mfc應(yīng)用程序是建立在窗口應(yīng)用程序開發(fā)模式的基礎(chǔ)上的,同樣mfc應(yīng)用程序也有一個winmain()函數(shù),但程序員不用編寫該函數(shù),winmain()函數(shù)由框架提供,當(dāng)應(yīng)用程序啟動

18、時被自動調(diào)用。mfc有一個內(nèi)部的消息系統(tǒng)處理由類產(chǎn)生的絕大多數(shù)消息。當(dāng)一個消息不能被 mfc所處理,應(yīng)用程序?qū)⑺唤o默認(rèn)窗口處理函數(shù)defwindowproc()來處理。在vc+中有兩種方法可以進(jìn)行串口通訊。一種是利用microsoft公司提供的activex控件 microsoft communications control。另一種是直接用vc+訪問串口。下面主要簡述前一種方法。2.2 microsoft communications control 控件 microsoft公司在windows中提供了一個串口通訊控件,用它,我們可以很簡單的利用串口進(jìn)行通訊。在使用它之前,應(yīng)將控件加在應(yīng)用

19、程序的對話框上。然后再用classwizard 生成相應(yīng)的對象。現(xiàn)在我們可以使用它了。該控件有很多自己的屬性,可以通過它的屬性窗口來設(shè)置,也可以用程序設(shè)置。用程序設(shè)置,更靈活。以下介紹設(shè)置中遇到的幾個相關(guān)函數(shù)。setcommport:指定使用的串口。getcommport:得到當(dāng)前使用的串口。setsettings:指定串口的參數(shù)。一般設(shè)為默認(rèn)參數(shù)9600,n,8,1。這樣方便與其他串口進(jìn)行通訊。getsettings:取得串口參數(shù)。setportopen:打開或關(guān)閉串口,當(dāng)一個程序打開串口時,另外的程序?qū)o法使用該串口。getportopen:取得串口狀態(tài)。getinbuffercount:

20、輸入緩沖區(qū)中接受到的字符數(shù)。setinputlen:一次讀取輸入緩沖區(qū)的字符數(shù)。設(shè)置為0時,程序?qū)⒆x取緩沖區(qū)的全部字符。getinput:讀取輸入緩沖區(qū)。getoutbuffercount:輸出緩沖區(qū)中待發(fā)送的字符數(shù)。setoutput:寫入輸出緩。 第3章 串行異步通信系統(tǒng)分析 在串行異步通信系統(tǒng)設(shè)計中首先對串口1進(jìn)行初始化,等初始化完成后發(fā)送送握手信號,等發(fā)送完握手信號后繼續(xù)發(fā)送控制信號,等收到準(zhǔn)備應(yīng)答的信號后開始發(fā)送數(shù)據(jù),如果數(shù)據(jù)發(fā)送成功則結(jié)束通信,否則繼續(xù)發(fā)送。 發(fā)送數(shù)據(jù) 數(shù)據(jù)發(fā)送完成結(jié)束通信 初始化串口1 發(fā)送握手信號 收到準(zhǔn)備接收的應(yīng)答 發(fā)送控制信號 接收握手信號 y y n y

21、y n y y n 圖3.1 系統(tǒng)分析流程圖 第4章 串行異步通信系統(tǒng)設(shè)計4.1建立工程 打開vc+6.0建立基于對話框的mfc應(yīng)用程序11250134,單擊“工程”選項(xiàng),選擇mfcappwizardexe,如圖4.1所示: 圖 4.1創(chuàng)建項(xiàng)目文件11250134 單擊圖4.1中的“確定”鍵,出現(xiàn)如圖4.2所示的對話框,選中基本對話框d,如圖4.2所示:圖 4.2 應(yīng)用程序11250134 單擊圖4.2中的“下一步”出現(xiàn)如圖4.3所示的對話框,選中除“自動操作u”以外的所有內(nèi)容,如圖4.3所示: 圖 4.3 應(yīng)用程序11250134一直單擊“下一步”,直到出現(xiàn)如圖4.4所示的對話框,點(diǎn)擊“完成

22、”,工程建立完成,如圖4.4所示: 圖4.4 應(yīng)用程序112501344.2 在程序中添加mscomm控件 首先打開工程對話框,右擊插入activex controls控件,選擇microsoft communications control, version 6.0,點(diǎn)擊插入,按默認(rèn)值添加,多了個電話圖標(biāo),這是增加后串口通信控件。刪除確認(rèn)、取消和提示框,添加“電話”、靜態(tài)文本、按鈕、編輯框,拖動添加的控件如圖4.5所示:圖4.5 軟件布局界面單擊“發(fā)送”按鈕,設(shè)置標(biāo)題為“發(fā)送”,id為“idc_button_send1”,如圖4.6所示: 圖4.6 設(shè)置發(fā)送按鈕id右擊“數(shù)據(jù)接收”編輯框,點(diǎn)

23、擊“屬性”,設(shè)置id名為“idc_edit_receive”,如圖4.7所示: 圖4.7 設(shè)置接收框id4.3 初始化串口:設(shè)置mscomm控件的屬性 首先打開工具欄的查看,選擇建立類向?qū)fc classwizard,在選擇member viariable,打開classname為cmy11250134dlg的類,control id為mscomm1,雙擊它,為它添加控制變量m_ctrlcomm類似的,選擇其它項(xiàng)修改,改后如圖3.10所示: 圖3.10 設(shè)置mscomm控件的屬性 對cwy11250134:oninitdialog()函數(shù)中寫入對串口的初始化語句,串口初始化語句由idc_ms

24、comm1的cmscomm控制變量m_ctrlcomm來設(shè)置串口控件屬性。添加初始化代碼,代碼如下:/ todo: add extra initialization here if(m_ctrlcomm.getportopen() m_ctrlcomm.setportopen(false); m_ctrlcomm.setcommport(1); /選擇com1 if( !m_ctrlcomm.getportopen() m_ctrlcomm.setportopen(true);/打開串口 else afxmessagebox(cannot open serial port); m_ctrlco

25、mm.setsettings(9600,n,8,1); /波特率9600,偶校驗(yàn),8個數(shù)據(jù)位,1個停止位 m_ctrlcomm.setinputmodel(1); /1:表示以二進(jìn)制方式檢取數(shù)據(jù) m_ctrlcomm.setrthreshold(1); /參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)一個接收數(shù)據(jù)的oncomm事件 m_ctrlcomm.setinputlen(0); /設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0 4.4 發(fā)送數(shù)據(jù)先為發(fā)送按添加一個單擊消息bn_clicked處理函數(shù),打開classwizard,選擇message maps,打開類cmytestdlg,idc_bu

26、tton_manualsend,雙擊bn_clicked添加onbuttonmanualsend()函數(shù),然后在函數(shù)中添加代碼如下:/ cmy11250134dlg message handlersbool cmy11250134dlg:oninitdialog()cdialog:oninitdialog();/ add about. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(id

27、m_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu); / set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialog seticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small icon/ todo

28、: add extra initialization here /初始化com1m_ctrlcomm.setcommport(1); /串口1 m_ctrlcomm.setinbuffersize(1024); /設(shè)置輸入緩沖區(qū)的大小,bytes m_ctrlcomm.setoutbuffersize(512); /設(shè)置輸入緩沖區(qū)的大小,bytes if(!m_ctrlcomm.getportopen() /打開串口 m_ctrlcomm.setportopen(true);m_ctrlcomm.setinputmode(1); /設(shè)置輸入方式為二進(jìn)制方式 m_ctrlcomm.setsett

29、ings(9600,n,8,1); /設(shè)置波特率等參數(shù) m_ctrlcomm.setrthreshold(1); /為1表示有一個字符即引發(fā)事件 m_ctrlcomm.setinputlen(0);return true; / return true unless you set the focus to a controlvoid cmy11250134dlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_aboutbox)caboutdlg dlgabout;dlgabout.domodal();elsecdial

30、og:onsyscommand(nid, lparam);void cmy11250134dlg:ondestroy()winhelp(0l, help_quit);cdialog:ondestroy();/ if you add a minimize button to your dialog, you will need the code below/ to draw the icon. for mfc applications using the document/view model,/ this is automatically done for you by the framewo

31、rk.void cmy11250134dlg:onpaint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0); / center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rec

32、t);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2; / draw the icondc.drawicon(x, y, m_hicon);elsecdialog:onpaint();/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor cmy11250134dlg:onquerydragicon()return (hcur

33、sor) m_hicon;begin_eventsink_map(cmy11250134dlg, cdialog)/afx_eventsink_map(cmy11250134dlg)on_event(cmy11250134dlg, idc_mscomm1, 1 /* oncomm */, ononcommmscomm1, vts_none)/afx_eventsink_mapend_eventsink_map()void cmy11250134dlg:ononcommmscomm1() / todo: add your control notification handler code her

34、eupdatedata(true);/定義一些臨時變量variant variant_inp; colesafearray safearray_inp; long i=0;int len;byte rxdata1000;switch(m_ctrlcomm.getcommevent() case 2: /表示接收緩沖區(qū)內(nèi)有字符/讀取緩沖區(qū)數(shù)據(jù) variant_inp=m_ctrlcomm.getinput();/將variant型變量值賦給colesafearray類型變量 safearray_inp=variant_inp;/獲得數(shù)據(jù)長度 len=safearray_inp.getonedim

35、size();/將數(shù)據(jù)保存到字符數(shù)組中 for(i=0;ilen;i+) safearray_inp.getelement(&i,&rxdatai); /字符串結(jié)束rxdatai=0;m_rece1 += rxdata; updatedata(false);break;default:break;void cmy11250134dlg:onbuttonsend1() / todo: add your control notification handler code hereupdatedata(true);cbytearray sendarr;word wlen;/獲得發(fā)送數(shù)據(jù)長度wlen=

36、m_send1.getlength();/給變量sendarr設(shè)置長度 sendarr.setsize(wlen);/把數(shù)據(jù)賦給cbytearray類型變量用于發(fā)送數(shù)據(jù)for(int i=0;iloadicon(idr_mainframe);void cmy11250134dlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(cmy11250134dlg)ddx_control(pdx, idc_button_delete1, m_com1delete);ddx_control(pdx,

37、idc_button_send1, m_com1send);ddx_control(pdx, idc_mscomm1, m_ctrlcomm);ddx_text(pdx, idc_edit_send, m_send1);ddx_text(pdx, idc_edit_receive, m_rece1);/afx_data_mapbegin_message_map(cmy11250134dlg, cdialog)/afx_msg_map(cmy11250134dlg)on_wm_syscommand()on_wm_destroy()on_wm_paint()on_wm_querydragicon(

38、)on_bn_clicked(idc_button_send1, onbuttonsend1)on_bn_clicked(idc_button_delete1, onbuttondelete1)/afx_msg_mapend_message_map()/ cmy11250134dlg message handlersbool cmy11250134dlg:oninitdialog()cdialog:oninitdialog(); / add about. menu item to system menu. / idm_aboutbox must be in the system command

39、 range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu); / set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialogseticon(m_hicon, true)

40、;/ set big iconseticon(m_hicon, false);/ set small icon / todo: add extra initialization here /初始化com1m_ctrlcomm.setcommport(1); /串口1 m_ctrlcomm.setinbuffersize(1024); /設(shè)置輸入緩沖區(qū)的大小,bytes m_ctrlcomm.setoutbuffersize(512); /設(shè)置輸入緩沖區(qū)的大小,bytes if(!m_ctrlcomm.getportopen() /打開串口 m_ctrlcomm.setportopen(true); m_ctrlcomm.setinputmode(1); /設(shè)置輸入方式為二進(jìn)制方式 m_ctrlcomm.setsettings(9600,n,8,1); /設(shè)置波特率等參數(shù) m_c

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論