VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)

上傳人:e****s 文檔編號(hào):53840816 上傳時(shí)間:2022-02-11 格式:DOC 頁(yè)數(shù):14 大?。?68.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)_第1頁(yè)
第1頁(yè) / 共14頁(yè)
VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)_第2頁(yè)
第2頁(yè) / 共14頁(yè)
VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)_第3頁(yè)
第3頁(yè) / 共14頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟)(14頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟) VC++串口上位機(jī)簡(jiǎn)單例程.rar (4.33 MB) VC++編寫(xiě)簡(jiǎn)單串口上位機(jī)程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信經(jīng)常用到的一種通信方式,做界面、寫(xiě)上位機(jī)程序的編程語(yǔ)言、編譯環(huán)境等不少,VB、C#、LABVIEW等等,我會(huì)的語(yǔ)言很少,C語(yǔ)言用得比較多,但是還沒(méi)有找到如何用C語(yǔ)言來(lái)寫(xiě)串口通信上位機(jī)程序的資料,在圖書(shū)管理找到了用VC++編寫(xiě)串口上位機(jī)的資料,參考書(shū)籍,用自己相當(dāng)蹩腳的C++寫(xiě)出了一個(gè)簡(jiǎn)單的串口上位機(jī)程序,分享一下,體驗(yàn)一下單片機(jī)和PC通信的樂(lè)趣。 編譯環(huán)境:VC++6.0

2、 操作系統(tǒng):VMWare虛擬出來(lái)的Windows XP 程序?qū)崿F(xiàn)功能: 1、 PC初始化COM1口,使用n81方式,波特率57600與單片機(jī)通信。PC的COM口編號(hào)可以通過(guò)如下方式修改: 當(dāng)然也可以通過(guò)上位機(jī)軟件編寫(xiě),通過(guò)按鈕來(lái)選擇COM端口號(hào),但是此次僅僅是簡(jiǎn)單的例程,就沒(méi)有弄那么復(fù)雜了。COM1口可用的話(huà),會(huì)提示串口初始化完畢。否則會(huì)提示串口已經(jīng)打開(kāi)Port already open,表示串口已經(jīng)打開(kāi),被占用了。 2、 點(diǎn)擊開(kāi)始轉(zhuǎn)換,串口會(huì)向單片機(jī)發(fā)送0xaa,單片機(jī)串口中斷接收到0xaa后啟動(dòng)ADC轉(zhuǎn)換一次,并把轉(zhuǎn)換結(jié)果ADCL、ADCH共兩個(gè)字節(jié)的結(jié)果發(fā)送至

3、PC,PC進(jìn)行數(shù)值轉(zhuǎn)換后在窗口里顯示。(見(jiàn)文章末尾圖) 3、 為防止串口被一只占用,點(diǎn)擊關(guān)閉串口可以關(guān)閉COM1,供其它程序使用,點(diǎn)擊后按鈕變?yōu)榇蜷_(kāi)串口,點(diǎn)擊可重新打開(kāi)COM1。 程序的編寫(xiě): 1、 打開(kāi)VC++6.0建立基于對(duì)話(huà)框的MFC應(yīng)用程序Test, 2、 在項(xiàng)目中插入MSComm控件:工程->增加到工程->Components and Controls->雙擊Registered ActiveX Controls->選擇Microsoft Communications Control, version 6.0->Insert,

4、按默認(rèn)值添加,你會(huì)發(fā)現(xiàn)多了個(gè) 圖標(biāo),這是增加后串口通信控件。 3、 刪除確認(rèn)、取消和提示框,添加“ ”、進(jìn)程、靜態(tài)文本、按鈕、編輯框,拖動(dòng)添加的控件,根據(jù)喜好布局。 4、 右擊編輯框Edit選擇屬性,在樣式里設(shè)置,勾選多行、垂直滾動(dòng),其它可按默認(rèn)值。 右擊靜態(tài)文本Text選擇屬性,在常規(guī)設(shè)置里,修改標(biāo)題。 右擊按鈕PushButton選擇屬性,在在常規(guī)設(shè)置里,修改標(biāo)題。 修改后界面如下,程序?qū)懗鰜?lái)運(yùn)行時(shí)“ ”標(biāo)志會(huì)自動(dòng)消失。 5、 查看->建立類(lèi)向?qū)FC ClassWizard->Member Viariable,選擇Cla

5、ssName為CTestDlg的類(lèi),Control ID為MSCOMM1,雙擊它,為它添加控制變量m_comm1。 類(lèi)似的,選擇IDC_BUTTON2添加控制變量m_serial。 (建立類(lèi)向?qū)б部梢杂覔羧缓笤趶棾龅目旖莶藛卫镞x擇建立類(lèi)向?qū)В? 至此,基本框架已經(jīng)出來(lái)了,編譯后運(yùn)行可以看到如下所示的界面。(組建->全部組件,然后 組建->執(zhí)行) 6、 點(diǎn)擊左側(cè)的視圖窗口,可以在三種模式下切換,第三個(gè)是打開(kāi)我們的源代碼窗口,第一個(gè)是類(lèi),第二個(gè)是窗體的資源視圖。 選擇File View,展開(kāi)test files->Header Files,打開(kāi)testDlg.h,在

6、全局變量下添加如下代碼,然后保存: int gllen;//定義整型標(biāo)量gllen,用于記錄接收數(shù)據(jù)的個(gè)數(shù) CProgressCtrl * pbar; //指向進(jìn)度條的指針,用于操作進(jìn)度條 CString strRXDdata; //編輯框顯示的文本,記錄歷次轉(zhuǎn)換值 7、 點(diǎn)擊Recourse View,展開(kāi)test recourses->Dialog,雙擊IDD_TEST_DIALOG,編輯我們的主界面對(duì)話(huà)框。 雙擊擊“ ”,彈出如下對(duì)話(huà)框,按確認(rèn)鍵: VC會(huì)進(jìn)入源碼編輯窗口,這個(gè)函數(shù)是用來(lái)處理串口事件的,當(dāng)PC串口接收到數(shù)據(jù)時(shí),會(huì)產(chǎn)生一個(gè)數(shù)據(jù)緩沖區(qū)有數(shù)據(jù)的消

7、息事件,然后調(diào)用執(zhí)行這個(gè)函數(shù)。添加如下代碼,進(jìn)行數(shù)據(jù)處理,窗口更新等操作: VARIANT variant1;//定義VARIANT型變量,用于存放接收到的數(shù)據(jù) COleSafeArray safearray;//定義safearray型變量 LONG len,k;//定義長(zhǎng)整型變量len,k BYTE rxdata[2048];//定義BYTE型數(shù)組 CString stremp1,stremp2;//定義兩個(gè)字符串 if(m_comm1.GetCommEvent()==2) //判斷引起OnComm時(shí)間的原因 {//如果是接收到特定個(gè)字節(jié)數(shù),則讀取接收到的數(shù)據(jù) varian

8、t1 = m_comm1.GetInput();//把接收到的數(shù)據(jù)存放到VARIANT型變量里 safearray = variant1;//VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量 len = safearray.GetOneDimSize(); for(k=0;k

9、高字節(jié) if((k%2)==0) if((k+1)>6); //高低字節(jié)合并成實(shí)際的轉(zhuǎn)換結(jié)果,注意轉(zhuǎn)換結(jié)果是左對(duì)齊 stremp1.Format("%2.2f",(2.56*temp/1024));//計(jì)算成實(shí)際電壓值 SetDlgItemText(IDC_STATIC,("當(dāng)前電壓值為: "+strem

10、p1+" V")); //更新靜態(tài)文本控件 pbar -> SetPos(temp);//更新進(jìn)度條的當(dāng)前位置 strRXDdata += stremp2;//把新的數(shù)據(jù)放到全局的字符串里 strRXDdata += stremp1; strRXDdata += " V\r\n";//字符串加單位V后換行 } } } SetDlgItemText(IDC_EDIT1,strRXDdata);//更新文本控件的顯示 這時(shí)重新編譯一下,看會(huì)不會(huì)有什么錯(cuò)誤,出現(xiàn)下面提示,可以選擇全部組建來(lái)清除。 LINK : LNK4073: cannot create map for

11、.ILK file; linking nonincrementally 出現(xiàn)下面錯(cuò)誤,請(qǐng)關(guān)閉運(yùn)行的test.exe后重試。 LINK : fatal error LNK1104: cannot open file "Debug/test.exe" 出現(xiàn)下面錯(cuò)誤兩種錯(cuò)誤,是由于空間編號(hào)問(wèn)題引起的,當(dāng)我們添加了編輯框或者“ ”后再添加,其編號(hào)自動(dòng)加一,就會(huì)出現(xiàn)控件沒(méi)定義。 Z:\vc++串口上位機(jī)\test\testDlg.cpp(32) : error C2065: 'IDC_MSCOMM1' : undeclared identifier Z:\vc++串口上位機(jī)\test\te

12、stDlg.cpp(139) : error C2065: 'IDC_EDIT1' : undeclared identifier 解決方法是,在RecourseView里,打開(kāi)窗體IDD_TEST_DIALOG,右擊“ ”或者編輯框等其它出錯(cuò)的控件,右擊選擇屬性,在常規(guī)里修改ID,這里的程序,除BUTTON有1、2兩個(gè)之外,其它都是1 全部組建編譯一下,看看有沒(méi)有錯(cuò)誤,沒(méi)有錯(cuò)誤就可以運(yùn)行一下,可以看到界面更原來(lái)是一樣的。有錯(cuò)誤就修改一下,省得弄多了,錯(cuò)在哪里都不知道,查起來(lái)麻煩。 8、 在源碼編輯里,打開(kāi)testDlg.cpp文件,進(jìn)行窗口初始化函數(shù)的編寫(xiě)。 找到BO

13、OL CTestDlg::OnInitDialog()函數(shù), 在SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here 后面添加如下初始化代碼: gllen = 0; //記錄轉(zhuǎn)換次數(shù)全局變量清零 if(! m_comm1.GetPortOpen())//判斷串口是否已經(jīng)打開(kāi) { m_comm1.SetCommPort(1); //選擇串口號(hào)1 m_comm1.SetPortOpen(TRUE); //打開(kāi)串口 m_comm1.SetRThreshold(2); /

14、/收到兩個(gè)字節(jié)引發(fā)OnComm事件 m_comm1.SetInputMode(1);//輸入模式選為二進(jìn)制 m_comm1.SetSettings("57600,n,8,1"); //設(shè)置串口參數(shù),波特率57600,無(wú)奇偶校驗(yàn),1位停止位,8位數(shù)據(jù)位 MessageBox("串口初始化完畢","提示"); //提示串口成功初始化 } else MessageBox("串口被占用","提示"); //如果已經(jīng)打開(kāi)串口,消息框提醒 pbar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);//獲得指向IDC_PROGRESS1的指針 pbar

15、-> SetRange(0,1023);//設(shè)置進(jìn)度條的范圍0~1023 pbar -> SetPos(0);//當(dāng)前位置為0 m_serial.SetWindowText("關(guān)閉串口");//按鈕顯示狀態(tài)改變 可以看到,串口的參數(shù)等等都在在這里初始化的,可以根據(jù)自己的需要修改的,具體可以查看VC++里的詳細(xì)介紹,看看有哪些參數(shù)可以給我們修改來(lái)用。 添加后再編譯一下,運(yùn)行后可以看到多了一個(gè)串口初始化的提示信息窗口。 至此,我們已經(jīng)完成了主要的串口操作及界面,剩下的就是兩個(gè)按鈕的操作了。 9、 回到資源視圖的IDD_TEST_DIALOG窗口,雙擊開(kāi)始轉(zhuǎn)換按鈕,給它添加事

16、件,點(diǎn)擊后PC通過(guò)串口發(fā)送0xaa出來(lái),給單片機(jī)接收。 添加如下代碼: CByteArray m_Array; //定義字節(jié)數(shù)組 m_Array.RemoveAll(); //字節(jié)數(shù)組清空 m_Array.SetSize(1); //設(shè)定維數(shù)為1 m_Array.SetAt(0,0xaa); //給m_array[0]賦值0 m_comm1.SetOutput(COleVariant(m_Array));//由于SetOutput函數(shù)的參數(shù)為VARIANT型,必須強(qiáng)制轉(zhuǎn)換后才能發(fā)送 同樣地,雙擊另外一個(gè)按鈕,給串口操作按鈕添加代碼,用于關(guān)閉或者打開(kāi)串口。添加如下代碼: if

17、(! m_comm1.GetPortOpen())//判斷串口是否已經(jīng)打開(kāi) { m_comm1.SetPortOpen(TRUE); //如果串口是關(guān)閉的,則打開(kāi)串口 m_serial.SetWindowText("關(guān)閉串口"); //按鈕顯示狀態(tài)改變 } else { m_comm1.SetPortOpen(FALSE); //如果已經(jīng)打開(kāi)串口,則關(guān)閉串口 m_serial.SetWindowText("打開(kāi)串口");//按鈕顯示狀態(tài)改變 } 至此,一個(gè)簡(jiǎn)單的串口上位機(jī)軟件編寫(xiě)完成了,可以用來(lái)測(cè)試下,通過(guò)單片機(jī)往串口里發(fā)送數(shù)據(jù),可以看到主窗口的的轉(zhuǎn)換結(jié)果,已經(jīng)進(jìn)度條顯示電壓值變化。要把這個(gè)程序拿出來(lái)用,只需把…\vc++串口上位機(jī)\test\Release的test.exe拷出來(lái)用就行。Release可以在編譯窗口里選擇win32 release,然后重新編譯一下就出來(lái)了。 參考書(shū)籍:陳冬云、杜敬倉(cāng)、任柯燕等,《Atmega128單片機(jī)原理與開(kāi)發(fā)指導(dǎo)》,2005,機(jī)械工業(yè)出版社。

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!