步進(jìn)電機(jī)控制A_第1頁
步進(jìn)電機(jī)控制A_第2頁
步進(jìn)電機(jī)控制A_第3頁
步進(jìn)電機(jī)控制A_第4頁
步進(jìn)電機(jī)控制A_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、項(xiàng)目編號:2015-2016學(xué)年第一學(xué)期微機(jī)原理(單片機(jī))課程設(shè)計(jì)總結(jié)報(bào)告項(xiàng)目名稱:步進(jìn)電機(jī)控制A 班級: 姓名: 學(xué)號:微機(jī)原理(單片機(jī))課程設(shè)計(jì)任務(wù)書項(xiàng)目名稱:步進(jìn)電機(jī)控制A內(nèi)容與要求: 上位機(jī):完成界面設(shè)計(jì)與通訊程序(1)能夠設(shè)置步進(jìn)電機(jī)啟動、停止、正傳、反轉(zhuǎn)(2)能夠設(shè)置步進(jìn)電機(jī)轉(zhuǎn)速(快、中、慢),圈數(shù)(3)能夠保存電機(jī)的工作狀態(tài)至文檔,從文檔讀取電機(jī)的工作狀態(tài)(4)可以對串口進(jìn)行設(shè)置下位機(jī):完成電路設(shè)計(jì)與控制程序(1)采用步進(jìn)電機(jī)的控制,默認(rèn)中速正傳1圈(2)按鍵1可控制電機(jī)的啟動和停止,按鍵2可控制電機(jī)的轉(zhuǎn)動方向,按鍵3可控制電機(jī)的轉(zhuǎn)速,按鍵4可控制轉(zhuǎn)動圈數(shù)(每按1次加1圈)(3)

2、由串行LCD顯示當(dāng)前轉(zhuǎn)動方向、轉(zhuǎn)速、圈數(shù)(4)通過串口與上位機(jī)通訊。項(xiàng)目組任務(wù)分擔(dān)評價表姓名分擔(dān)任務(wù)組內(nèi)評價周歐翔LCD顯示模塊設(shè)計(jì)與編程、下位機(jī)串口通訊程序、上位機(jī)串口通訊程序、上位機(jī)界面、上位機(jī)控制程序6張璐下位機(jī)硬件連接、電路焊接、步進(jìn)電機(jī)控制程序4課程設(shè)計(jì)報(bào)告評分表內(nèi)容總體方案硬件設(shè)計(jì)軟件設(shè)計(jì)結(jié)果分析明細(xì)清單問題分析心得體會參考文獻(xiàn)程序代碼格式規(guī)范總分學(xué)生1得分學(xué)生2得分 微機(jī)原理(單片機(jī))課程設(shè)計(jì)報(bào)告目錄1. 總體方案 .12. 硬件設(shè)計(jì) .13. 軟件設(shè)計(jì) .34. 結(jié)果分析或項(xiàng)目所實(shí)現(xiàn)的功能、指標(biāo) 55. 明細(xì)清單 .66. 設(shè)計(jì)調(diào)試中遇到的疑難問題及解決方法 .77. 心得體會

3、與建議 .78. 參考文獻(xiàn) .8附錄 .9 30微機(jī)原理(單片機(jī))課程設(shè)計(jì)報(bào)告控 制 器LCD顯示模塊上位機(jī)步進(jìn)電機(jī)模塊外部按鍵模塊一、總體方案圖1-1 步進(jìn)電機(jī)控制A總體功能模塊示意圖圖中,控制器為89C52MCU,負(fù)責(zé)與上位機(jī)通訊、控制步進(jìn)電機(jī)的開閉轉(zhuǎn)速轉(zhuǎn)向圈數(shù)、控制LCD顯示、接受外部按鍵輸入;步進(jìn)電機(jī)模塊為42BYGHW型步進(jìn)電機(jī),為系統(tǒng)的執(zhí)行模塊;外部按鍵模塊按鍵1可控制電機(jī)的啟動和停止,按鍵2可控制電機(jī)的轉(zhuǎn)動方向,按鍵3可控制電機(jī)的轉(zhuǎn)速,按鍵4可控制轉(zhuǎn)動圈數(shù)(每按1次加1圈);LCD顯示當(dāng)前轉(zhuǎn)動方向、轉(zhuǎn)速、圈數(shù);上位機(jī)設(shè)置步進(jìn)電機(jī)啟動、停止、正傳、反轉(zhuǎn)、步進(jìn)電機(jī)轉(zhuǎn)速(快、中、慢),

4、圈數(shù),并保存電機(jī)的工作狀態(tài)至文檔,從文檔讀取電機(jī)的工作狀態(tài),可以對串口進(jìn)行設(shè)置,由VS2010MFC編程而得。二、硬件設(shè)計(jì)控制芯片:80C52單片機(jī)學(xué)習(xí)板驅(qū)動芯片:UM2003顯示屏:LCD1602電機(jī):42BYGHW混合式步進(jìn)電機(jī)選擇控制芯片時還是選用80C52系列,板子當(dāng)然用面積小的比較好;電機(jī)的驅(qū)動芯片選用ULN2003,ULN2003是高壓大電流達(dá)林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動的系統(tǒng),市場價5.00-6.00左右;與80C52學(xué)習(xí)板配套的LCD顯示屏一般都是LCD1602型號,市場價4.00-5.00左右

5、;步進(jìn)電機(jī)選用42BYGHW混合式步進(jìn)電機(jī),步進(jìn)電機(jī)一般分為三種:反應(yīng)式、永磁式、混合式,反應(yīng)式步進(jìn)一般為兩相,轉(zhuǎn)矩和體積較小,步進(jìn)角一般為7.5度 或1.5度;永磁式步進(jìn)一般為三相,可實(shí)現(xiàn)大轉(zhuǎn)矩輸出,步進(jìn)角一般為1.5度,但噪聲和振動都很大;混合式步進(jìn)是指混合了永磁式和反應(yīng)式的優(yōu)點(diǎn)。它又分為兩相、三相和五相:兩相步進(jìn)角一般為1.8度而五相步進(jìn)角一般為 0.72度,混合式步進(jìn)電機(jī)隨著相數(shù)(通電繞組數(shù))的增加,步進(jìn)角減小,精度提高,這種步進(jìn)電機(jī)的應(yīng)用最為廣泛。42BYGHW市場價30.00-40.00左右。ULN2003作為電極的驅(qū)動芯片,由七個硅NPN達(dá)林頓管組成。ULN2003的每一對達(dá)林頓

6、都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路 直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來處理的數(shù)據(jù)。除管腳8接地、管腳9接VCC之外,管腳1-7作為脈沖輸入端,管腳10-16脈沖信號輸出端。一般從80C52單片機(jī)輸出出來的脈沖作為脈沖的輸入端,脈沖信號輸出端輸出幅值12V及以上的脈沖來驅(qū)動電機(jī)轉(zhuǎn)動。詳細(xì)的硬件電路圖如下:三、軟件設(shè)計(jì)是否接收到數(shù)據(jù)電機(jī)狀態(tài)相應(yīng)改變用戶是否按下按鍵更新界面否是否是電機(jī)狀態(tài)相應(yīng)改變更新界面?zhèn)鬟f給下位機(jī)上位機(jī)主要為用戶提供控制界面,在用戶按下相應(yīng)按鍵之前一直等待,按下按鍵后按照按下按鍵的類型改變相應(yīng)的電機(jī)狀態(tài),更新界面,并傳遞給下位機(jī)

7、;如果下位機(jī)的傳遞了電機(jī)狀態(tài),便改變成相應(yīng)的電機(jī)狀態(tài),更新界面。圖3-1 上位機(jī)程序流程圖開始根 據(jù) 電 機(jī) 狀 態(tài) 顯 示 并 驅(qū) 動 電 機(jī)是否接收到數(shù)據(jù)電機(jī)狀態(tài)相應(yīng)改變是否是否有外部按鍵按下電機(jī)狀態(tài)相應(yīng)改變否是而下位機(jī)需要根據(jù)電機(jī)狀態(tài)來控制步進(jìn)電機(jī),并將相應(yīng)的電機(jī)狀態(tài)打印到LCD顯示屏上;如果接受到上位機(jī)傳遞的數(shù)據(jù)便改變自己相應(yīng)的電機(jī)狀態(tài),如果有外部按鍵按下,則改變自己相應(yīng)的電機(jī)狀態(tài),并將該狀態(tài)上傳給上位機(jī)。圖3-2 下位機(jī)程序流程圖四、結(jié)果分析或項(xiàng)目所實(shí)現(xiàn)的功能、指標(biāo)上位機(jī)運(yùn)行界面如下:圖4-1 上位機(jī)運(yùn)行圖像圖中轉(zhuǎn)向0代表反轉(zhuǎn),1代表正轉(zhuǎn),保存參數(shù)按鈕能夠?qū)⒛壳暗碾姍C(jī)參數(shù)存入.txt

8、文件中,“讀取參數(shù)”按鈕能夠?qū)?txt中的參數(shù)讀入。右下角的小框?yàn)榻邮艿降南挛粰C(jī)電機(jī)參數(shù)。第一位數(shù)字開閉字位0代表電機(jī)停止,1代表電機(jī)起轉(zhuǎn)。第二位數(shù)字為速度字位0代表低數(shù),1代表中數(shù),2代表高速。第三位數(shù)字代表正反位,0為反轉(zhuǎn),1為正轉(zhuǎn)。最后一位數(shù)字代表圈數(shù)。運(yùn)行前必須先設(shè)置好串口,才能使用。下位機(jī)組裝如下圖: 圖4-2 下位機(jī)組裝圖按鍵1可控制電機(jī)的啟動和停止,按鍵2可控制電機(jī)的轉(zhuǎn)動方向,按鍵3可控制電機(jī)的轉(zhuǎn)速,按鍵4可控制轉(zhuǎn)動圈數(shù)(每按1次加1圈),在電機(jī)停轉(zhuǎn)的時候,LCD顯示“OFF”,在電機(jī)啟動的時候,LCD第一行第一個單詞顯示“ON”,下個字符正轉(zhuǎn)顯示Z反轉(zhuǎn)時顯示F,然后顯示“LOO

9、P:”后面跟圈數(shù),第二行顯示”SPEED:”,L代表低速,M代表中速,H代表高速。五、明細(xì)清單器件單價LY5A-L2A V4 STC89C52學(xué)習(xí)板1602液晶顯示器42BYGHWULN2003 合計(jì):六、設(shè)計(jì)調(diào)試中遇到的疑難問題及解決方法周歐翔:1、對于MFC中C+串口類不熟悉,所以只能在網(wǎng)上查有關(guān)的實(shí)例,并按照自己的要求不停地修改,然后在實(shí)驗(yàn)室不停地實(shí)驗(yàn),并且在界面中專門用了一個編輯框不停地查看回傳的數(shù)據(jù)。還有對于下位機(jī)串口設(shè)置方面有些不熟悉,我就一直在查找有關(guān)方面的書籍,以及相關(guān)的例子進(jìn)行修改。2、對于串口的時序一開始的時候不是很懂,一開始的時候想著在上下位機(jī)通訊的時候就只是由上位機(jī)傳輸

10、數(shù)字字符串,由字符在字符串中的位置來決定傳遞的是什么,但是時序老是出錯,最后沒有辦法,只有將所有的字符換成單獨(dú)的字母字符,這樣就不會出錯了。3、MFC在VS2010中的COMBO控件老是出錯,不能夠顯示下拉欄,在網(wǎng)上找了好多的實(shí)力也沒有解決,可能是我電腦配置的問題。所以最后我只是使用了普通的EDIT控件,在控件中輸入數(shù)據(jù)來達(dá)到設(shè)置串口的目的。張璐:1、硬件原理圖比較簡單,只是需要上網(wǎng)查閱相關(guān)管腳的資料。焊接電路時基本沒有什么問題,但是進(jìn)行調(diào)試時電機(jī)不轉(zhuǎn)。用萬用表測VCC以及地端,并檢查各管腳有沒有虛焊。焊接沒有問題,我們又用示波器測量ULN2003的輸入信號和輸出信號,輸入信號即單片機(jī)的輸出信

11、號為5v脈沖沒有問題,但輸出信號一直為高電平。無奈應(yīng)該是驅(qū)動芯片有問題。我們又換了一塊板子;2、第二次接入電路電機(jī)依舊不轉(zhuǎn),檢查過后發(fā)現(xiàn)是芯片插反了。調(diào)整過后電機(jī)終于轉(zhuǎn)了起來。但是電機(jī)轉(zhuǎn)動幅度不大。將控制程序中四路輸出相鄰的延時時間變長,電機(jī)終于正常轉(zhuǎn)動了。后來對電機(jī)控制的各種參數(shù)進(jìn)行微調(diào),最終達(dá)到了實(shí)驗(yàn)效果。七、心得體會與建議周歐翔:單片機(jī)是自動化行業(yè)在實(shí)際生產(chǎn)生活中必不可少的伙伴,現(xiàn)在越來越多的產(chǎn)品都涉及到了單片機(jī)領(lǐng)域,所以這次的課程設(shè)計(jì)對我意義頗深,特別是這種給你一個題目,自主去做的模式,非常符合實(shí)際生產(chǎn)中生產(chǎn)形式。自主查找信息,學(xué)習(xí)單片機(jī)芯片資料,尋找相關(guān)的例程,這些都是非常寶貴的經(jīng)驗(yàn)

12、。這個題目如果再往深了做就是結(jié)合手機(jī)安卓系統(tǒng)與上位機(jī)的通訊,或者就是手機(jī)充當(dāng)上位機(jī),來遠(yuǎn)程控制步進(jìn)電機(jī)。我覺得老師在芯片資料方面給的不是太詳細(xì),有些東西必須在網(wǎng)上找相似的器件才能夠滿足要求,加大了查找資料的難度,然后實(shí)驗(yàn)報(bào)告所占的分值過多,實(shí)驗(yàn)報(bào)告終究只是其次,最重要的還是將項(xiàng)目完成,所以我認(rèn)為項(xiàng)目完成情況應(yīng)該占分?jǐn)?shù)的大頭。張璐:單片機(jī)在各行各業(yè)的應(yīng)用都很廣泛,特別在自動化行業(yè)是重頭。之前做大創(chuàng)項(xiàng)目有接觸過這方面,所以上手并不難。對步進(jìn)電機(jī)的控制之前沒有做過,但通過查閱資料后也大致明白了其具體原理,就是基于單片機(jī)自身產(chǎn)生的晶振,由串口輸出一定占空比的脈沖進(jìn)而控制步進(jìn)電機(jī)。硬件方面主要由我負(fù)責(zé),

13、雖然之前做過DSP小車底盤的焊接,但是此次實(shí)驗(yàn)硬件部分進(jìn)行得也不是很順利。主要是有些芯片是壞掉的,所以耽誤了一些時間。上位機(jī)程序是由周歐翔同學(xué)編寫,但我也對相關(guān)知識進(jìn)行了學(xué)習(xí),這種單獨(dú)做小項(xiàng)目能夠做出來成果后我們有很大的成就感,而且從中受益匪淺。課程設(shè)計(jì)時間安排較為靈活十分合理,我們也基本比較滿意。可能大家對于驗(yàn)收等待老師比較有意見,我覺得老師本來就比較忙碌,我們等待驗(yàn)收是應(yīng)該的,而且大部分同學(xué)第一次驗(yàn)收都存在問題,都沒有太多的耐心。對于實(shí)驗(yàn)室的建議就是,可以對用過的芯片、器件進(jìn)行復(fù)查,有些器件已經(jīng)壞掉了,再給同學(xué)們繼續(xù)使用會耽誤項(xiàng)目的進(jìn)程。最后感謝三位實(shí)驗(yàn)老師的細(xì)心教導(dǎo)!參考文獻(xiàn)1林洋電子.

14、LY5A-L2A V4原理圖. L2常州市合泰電機(jī)電器有限公司.42BYGHW產(chǎn)品說明書3郭天祥. 新概念51單片機(jī)C語言教程 入門 提高【M】.北京.電子工業(yè)出版社附錄下位機(jī)源程序:#include<reg52.h> sbit lcden = P12; /LCD使能端 sbit lcdrs = P10; /LCD控制端 sbit on_off_key = P37; /按鍵1 sbit orientation_key = P36; /按鍵2 sbit speed_key = P35; /按鍵3 sbit loop_key = P34; /按鍵4 bit clockwise_flag

15、 = 1; /轉(zhuǎn)向位 bit on_off_flag = 0; /開關(guān)位 bit com_flag = 0; /COM位 unsigned char char_num = 0; unsigned char on_off,clock=0; unsigned char num = 1; unsigned char loops = 1; /圈數(shù) unsigned char table_begin = 0; unsigned char code table1 = 0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01;/電機(jī)運(yùn)行表 unsigned char code char

16、_table5 = "Speed:"/LCD顯示字符串?dāng)?shù)組 unsigned char code char_table4 = "Loop:" /LCD顯示字符串?dāng)?shù)組 unsigned char code char_table3 = "ON Z "/LCD顯示字符串?dāng)?shù)組 unsigned char code char_table2 = "ON F "/LCD顯示字符串?dāng)?shù)組 unsigned char code char_table1 = "OFF "/LCD顯示字符串?dāng)?shù)組 unsigned cha

17、r speed_c = 0; unsigned char loop_c = 0; unsigned char receive_char = 0; unsigned char letter_inx =0; unsigned char loop_count = 0;/用于判斷已轉(zhuǎn)的圈數(shù) void delay(unsigned char i) /延時函數(shù) unsigned char j,k;for(j=i;j>0;j-)for(k=125;k>0;k-); void write_status(unsigned char com) /LCD狀態(tài)設(shè)置 lcdrs = 0; P0 = com;

18、 delay(5); lcden = 1; delay(5); lcden = 0; void write_data(unsigned char Data) /LCD顯示一個字符 lcdrs = 1; P0 = Data; delay(5); lcden = 1; delay(5); lcden =0; void init_lcd() /LCD初始化 lcden=0; write_status(0x38); write_status(0x0c); write_status(0x06); write_status(0x01); write_status(0x80); void init_com(

19、) /串口初始化 TMOD = 0x20; TH1 = 0xfa; /波特率為4800 TL1 = 0xfa; TR1 = 1; REN = 1; SM0 = 0; SM1 = 1; EA = 1; ES = 1; void send_data() /向上位機(jī)發(fā)送數(shù)據(jù) ES = 0;on_off = on_off_flag;clock = clockwise_flag;SBUF = '0'+on_off;while(!TI);TI = 0;SBUF = ' ' while(!TI);TI = 0;SBUF = '0'+num;while(!TI)

20、;TI = 0;SBUF = ' ' while(!TI);TI = 0; SBUF = '0'+clock; while(!TI);TI = 0;SBUF = ' ' while(!TI);TI = 0; SBUF = '0'+loops; while(!TI);TI = 0;ES = 1; void key() /檢查按鍵狀態(tài)的函數(shù) if(on_off_key = 0) delay(5); if(on_off_key = 0) on_off_flag = on_off_flag; send_data();while(on_of

21、f_key=0); if(orientation_key = 0) delay(5); if(orientation_key=0) clockwise_flag = clockwise_flag; loop_count=0; send_data(); while(orientation_key=0) ; if(speed_key = 0) delay(5); if(speed_key = 0) if(num=2) num=0; else num+; send_data(); while(speed_key = 0) ; if(loop_key = 0) delay(5); if(loop_ke

22、y = 0) loops+; send_data(); while(speed_key = 0) ; void display() /LCD顯示函數(shù) init_lcd(); if(on_off_flag=0) for(char_num=0;char_num<4;char_num+) write_data(char_table1char_num); else if(clockwise_flag=1) for(char_num=0;char_num<5;char_num+) write_data(char_table3char_num); for(char_num=0;char_num

23、<5;char_num+) write_data(char_table4char_num); write_data('0'+loops); write_status(0x80+0x40); for(char_num=0;char_num<6;char_num+) write_data(char_table5char_num); if(num=0) write_data('L'); else if(num=1) write_data('M'); else if(num=2) write_data('H'); else f

24、or(char_num=0;char_num<5;char_num+) write_data(char_table2char_num); for(char_num=0;char_num<5;char_num+) write_data(char_table4char_num); write_data('0'+loops); write_status(0x80+0x40); for(char_num=0;char_num<6;char_num+) write_data(char_table5char_num); if(num=0) write_data('

25、L'); else if(num=1) write_data('M'); else if(num=2) write_data('H'); void dispose()/判斷是否反向 if(clockwise_flag = 0) table_begin=0; else table_begin=4; void motor_run() /驅(qū)動電機(jī) unsigned char i,j; if(on_off_flag = 0) /如果需要停止電機(jī) display(); P1 = 0x00; return;else display(); if(loop_count=

26、50*loops) on_off_flag = 0; loop_count=0; send_data(); return; loop_count+;for(j=0+table_begin;j<4+table_begin;j+) P1 = table1j; for(i=(num+1)*2;i<10;i+) delay(8); void main() while(1) init_com(); init_lcd(); key();dispose();motor_run();/ void receive_data() interrupt 4 /中斷函數(shù),用于處理上位機(jī)傳遞的數(shù)據(jù) RI=0;

27、 receive_char = SBUF; if(receive_char = ' ') return; if(receive_char = 'f') on_off_flag = 0; else if(receive_char = 'n') on_off_flag = 1; else if(receive_char = 'l') num = 0; else if(receive_char = 'm') num = 1; else if(receive_char = 'h') num = 2; els

28、e if(receive_char = 'u') clockwise_flag = 0; else if(receive_char = 'c') clockwise_flag = 1; else if(receive_char>='0'&&receive_char<='9') loops = receive_char - '0'上位機(jī)程序:/ motorDlg.h : 頭文件/#pragma once#include "afxcmn.h"#include "

29、mscomm1.h"#include "afxwin.h"/ CmotorDlg 對話框class CmotorDlg : public CDialogEx/ 構(gòu)造public:CmotorDlg(CWnd* pParent = NULL);/ 標(biāo)準(zhǔn)構(gòu)造函數(shù)/ 對話框數(shù)據(jù)enum IDD = IDD_MOTOR_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV 支持/ 實(shí)現(xiàn)protected:HICON m_hIcon;/ 生成的消息映射函數(shù)virtual BOO

30、L OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedStart();void updateSt

31、atus();CSliderCtrl Speed_Slider;int m_motor_on;int m_loop;int m_speed;int m_clockwise;afx_msg void OnBnClickedLoad();afx_msg void OnBnClickedSave();CMscomm1 m_mscomm;afx_msg void OnBnClickedStop();afx_msg void OnBnClickedOrientation();afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);CSt

32、ring m_clockwise_edit;CString m_loop_edit;DECLARE_EVENTSINK_MAP()void OnCommMscomm1();bool ComSendData();CString m_motor_status;CString m_bode_str;CString m_odd_str;CString m_data_str;int m_bode;char m_odd;int m_data;afx_msg void OnBnClickedApplybutton();CString m_serial_num;int m_serial;CString m_o

33、noff;CString m_strReceive;afx_msg void OnEnChangeEdit8();CEdit m_serial_edit;afx_msg void OnEnChangeBodeedit();CEdit m_bode_edit;/ motorDlg.cpp : 實(shí)現(xiàn)文件/#include "stdafx.h"#include "motor.h"#include "motorDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DE

34、BUG_NEW#endif/ 用于應(yīng)用程序“關(guān)于”菜單項(xiàng)的 CAboutDlg 對話框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 對話框數(shù)據(jù)enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 實(shí)現(xiàn)protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:Do

35、DataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ CmotorDlg 對話框CmotorDlg:CmotorDlg(CWnd* pParent /*=NULL*/): CDialogEx(CmotorDlg:IDD, pParent), m_motor_on(0), m_loop(1), m_speed(1), m_clockwise(1), m_clockwise_edit(_T(""

36、), m_loop_edit(_T(""), m_motor_status(_T(""), m_bode_str(_T(""), m_odd_str(_T(""), m_data_str(_T(""), m_bode(0), m_odd(0), m_data(0), m_serial_num(_T(""), m_serial(0), m_onoff(_T(""), m_strReceive(_T("")m_hIcon = AfxGetA

37、pp()->LoadIcon(IDR_MAINFRAME);void CmotorDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDC_SLIDER1, Speed_Slider);DDX_Control(pDX, IDC_MSCOMM1, m_mscomm);DDX_Text(pDX, IDC_EDIT2, m_clockwise_edit);DDX_Text(pDX, IDC_EDIT1, m_loop_edit);DDX_Text(pDX, IDC_BODEE

38、DIT, m_bode_str);DDX_Text(pDX, IDC_ODDEDIT, m_odd_str);DDX_Text(pDX, IDC_DATAEDIT, m_data_str);DDX_Text(pDX, IDC_EDIT8, m_serial_num);DDX_Text(pDX, IDC_EDIT3, m_onoff);DDX_Text(pDX, IDC_EDIT4, m_strReceive);DDX_Control(pDX, IDC_EDIT8, m_serial_edit);DDX_Control(pDX, IDC_BODEEDIT, m_bode_edit);BEGIN_

39、MESSAGE_MAP(CmotorDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CmotorDlg:OnNMCustomdrawSlider1)ON_BN_CLICKED(IDC_START, &CmotorDlg:OnBnClickedStart)ON_BN_CLICKED(IDC_LOAD, &CmotorDlg:OnBnClickedLoad)ON_BN_CLICKED(IDC_SAVE, &

40、;CmotorDlg:OnBnClickedSave)ON_BN_CLICKED(IDC_STOP, &CmotorDlg:OnBnClickedStop)ON_BN_CLICKED(IDC_Orientation, &CmotorDlg:OnBnClickedOrientation)ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CmotorDlg:OnDeltaposSpin1)ON_BN_CLICKED(IDC_APPLYBUTTON, &CmotorDlg:OnBnClickedApplybutton)ON_EN_CHANGE(I

41、DC_EDIT8, &CmotorDlg:OnEnChangeEdit8)ON_EN_CHANGE(IDC_BODEEDIT, &CmotorDlg:OnEnChangeBodeedit)END_MESSAGE_MAP()/ CmotorDlg 消息處理程序BOOL CmotorDlg:OnInitDialog()CDialogEx:OnInitDialog();/ 將“關(guān)于.”菜單項(xiàng)添加到系統(tǒng)菜單中。/ IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_AB

42、OUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,

43、 strAboutMenu);/ 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動/ 執(zhí)行此操作SetIcon(m_hIcon, TRUE);/ 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE);/ 設(shè)置小圖標(biāo)/ TODO: 在此添加額外的初始化代碼 m_bode_str = _T("9600");m_odd_str = _T("無");m_data_str = _T("8");m_serial_num = _T("11");m_bode = 4800;m_odd = 'n'm_

44、data = 8;m_serial = 1;Speed_Slider.SetRange(0,2);Speed_Slider.SetTicFreq(1);Speed_Slider.SetPos(0);m_mscomm.put_CommPort(11);m_mscomm.put_Settings(_T("9600, n, 8, 1");m_mscomm.put_InputMode(1); m_mscomm.put_InputLen(0);m_mscomm.put_InBufferSize(1024);m_mscomm.put_OutBufferSize(1024);m_msco

45、mm.put_RThreshold(1);m_mscomm.put_SThreshold(0);/m_mscomm.put_PortOpen(true);/打開串口CString str1("1");m_clockwise_edit = str1;CString str2; str2.Format(_T("%d"),m_loop);m_loop_edit = str2;updateStatus();UpdateData(false);return TRUE; / 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUEvoid CmotorDlg:OnSysComman

46、d(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼/ 來繪制該圖標(biāo)。對于使用文檔/視圖模型的 MFC 應(yīng)用程序,/ 這將由框架自動完成。void CmotorDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于繪制的設(shè)備上下文SendMessage(WM_ICONERAS

47、EBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc(), 0);/ 使圖標(biāo)在工作區(qū)矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 繪制圖標(biāo)dc.DrawIcon(x, y, m_hI

48、con);elseCDialogEx:OnPaint();/當(dāng)用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)/顯示。HCURSOR CmotorDlg:OnQueryDragIcon()return static_cast<HCURSOR>(m_hIcon);void CmotorDlg:OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);/ TODO: 在此添加控件通知處理程序代碼int p

49、os = Speed_Slider.GetPos();m_speed = pos;updateStatus();ComSendData();*pResult = 0;void CmotorDlg:OnBnClickedStart()/ TODO: 在此添加控件通知處理程序代碼m_motor_on = 1;updateStatus();ComSendData();void CmotorDlg:OnBnClickedLoad()/ TODO: 在此添加控件通知處理程序代碼CStdioFile m_file;CString m_path_str;CString str;TCHAR szFilter

50、= _T( "文本文件 (*.txt)|*.txt| 所有文件(*.*)|*.*|" );CFileDialog file(TRUE,_T("txt"),NULL,OFN_HIDEREADONLY/*|OFN_OVERWRITEPROMPT*/|OFN_ALLOWMULTISELECT,szFilter,this);if(IDOK=file.DoModal()m_path_str = file.GetPathName();m_file.Open(m_path_str,CFile:modeRead);CString o_str,s_str,c_str,l_

51、str;m_file.ReadString(o_str);m_file.ReadString(s_str);m_file.ReadString(c_str);m_file.ReadString(l_str);m_motor_on = _ttoi(o_str);m_speed = _ttoi(s_str);m_clockwise = _ttoi(c_str);m_loop = _ttoi(l_str);updateStatus();m_file.Close();ComSendData();void CmotorDlg:OnBnClickedSave()/ TODO: 在此添加控件通知處理程序代碼TCHAR szFilter = _T( "文本文件 (*.txt)|*.txt| 所有文件(*.*)|*.*|" );CFileDialog file(FALSE,_T(&q

溫馨提示

  • 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

提交評論