版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 微機(jī)接口課程設(shè)計(jì)報(bào)告</p><p> 利用步進(jìn)電機(jī)模擬小車的運(yùn)行</p><p> 需求分析及實(shí)驗(yàn)?zāi)康模?lt;/p><p> 此次實(shí)驗(yàn)的需求分析如下:</p><p> 計(jì)算每次加電代碼輸入步進(jìn)電機(jī)以后小車(步進(jìn)電機(jī))行進(jìn)的距離(弧度,并按照一定的比例換算成長(zhǎng)度)</p><p> 利用
2、8個(gè)開關(guān)設(shè)計(jì)8個(gè)檔位,其中一個(gè)倒檔,6個(gè)進(jìn)檔,1個(gè)靜止檔,不同檔位設(shè)置不同的行進(jìn)速度,其中出靜止檔外倒檔最低;</p><p> 在屏幕上顯示2個(gè)窗口,分別顯示小車當(dāng)前的速度與行駛里程,其中行駛里程與程序運(yùn)行的次數(shù)無(wú)關(guān);</p><p> 利用8個(gè)led顯示當(dāng)前的檔位狀況,其中:</p><p> 倒檔時(shí),某一個(gè)等閃爍</p><p>
3、 靜止檔是,全部等閃爍</p><p> 另外設(shè)計(jì)一種小車的自動(dòng)行駛模式,在這種模式下,小車不通過開關(guān)控制檔位,而通過一個(gè)窗口的輸入小車行進(jìn)模式 (請(qǐng)自行設(shè)計(jì)行進(jìn)代碼),實(shí)現(xiàn)小車在不同檔位下運(yùn)行的時(shí)間、次序。</p><p> 實(shí)驗(yàn)要求同學(xué)能夠理解8255A的0工作方式下通過時(shí)序?qū)Σ竭M(jìn)電機(jī)的工作流程的控制,同時(shí)將流水燈當(dāng)作檔位的控制開關(guān),能夠更好的體現(xiàn)對(duì)接口芯片的控制過程,而自動(dòng)方式
4、控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn),題目非常的開放,能夠充分的發(fā)揮同學(xué)們的想象空間,同學(xué)們可以通過不同的編碼形式來(lái)完成這個(gè)題目。</p><p><b> 設(shè)計(jì)</b></p><p> 2.0 8255A芯片簡(jiǎn)介</p><p> 由于此次的設(shè)計(jì)涉及到8255A接口芯片的編程,因此在這里先對(duì)8255A的接口芯片做簡(jiǎn)要的介紹:8255A是一個(gè)具有兩個(gè)8位
5、和兩個(gè)4位并行I/O端口的接口芯片,它為Intle系列的CPU與外部設(shè)備之間提供TTL電平兼容的接口,以及需要同時(shí)兩位以上信息傳送的一切形式的并行接口。在學(xué)校的實(shí)驗(yàn)平臺(tái)上它的命令口的地址為0x0c803,PA,PB,PC口的端口地址分別為0x0c800,0x0c801,0x0c802。</p><p> 其引腳圖和內(nèi)部框圖分別如下:</p><p> 2.1流水燈的控制平臺(tái)的介紹:&l
6、t;/p><p> 在學(xué)校的實(shí)驗(yàn)平臺(tái)上LED燈的端口地址是0x0c860,通過控制LED輸入電平的高低來(lái)控制LED燈的明與暗,而電平的高低是通過想端口寫的數(shù)據(jù)來(lái)體現(xiàn)的,例如向端口寫1就代表輸入的是高電平而0則代表的是低電平。因而要實(shí)現(xiàn)需求分析中的流水燈的各種功能,只需要控制各端口的電平的高低,也就是對(duì)端口寫數(shù)據(jù)的不同。燈的閃爍的實(shí)現(xiàn)就是在LED燈全明與全暗之間設(shè)置一個(gè)延遲,這樣觀察的效果就是閃爍,而從左至右和從右至
7、左的變化是通過將初始值(10h和01h)進(jìn)行向左移位或者向右移位即可。</p><p><b> 圖3:實(shí)驗(yàn)平臺(tái)簡(jiǎn)介</b></p><p><b> 2.2設(shè)計(jì)思想:</b></p><p> 在以前的上機(jī)實(shí)驗(yàn)中我們分別做過流水燈和步進(jìn)電機(jī)的實(shí)驗(yàn),而且都成功的完成了這兩次實(shí)驗(yàn),因此此次課程設(shè)計(jì)算的上是對(duì)以前做的實(shí)驗(yàn)
8、的一次綜合,而創(chuàng)新點(diǎn)就在于在自動(dòng)控制方式下編碼與解碼的問題,因此在設(shè)計(jì)思想中,手動(dòng)控制這一塊我將只做簡(jiǎn)要介紹,詳細(xì)介紹的是在自動(dòng)控制中所采用的方法。</p><p> 手動(dòng)控制:因?yàn)闀r(shí)間和速度都是按照一定的比例來(lái)完成的,所以不同檔位的實(shí)現(xiàn)也就是LED燈的控制開關(guān)在不同狀態(tài)下時(shí)延遲時(shí)間不同的控制,同時(shí)在不同的延遲時(shí)間下給每個(gè)檔位指定一個(gè)速度,延遲長(zhǎng)的速度小,延遲短的速度大,這樣便能實(shí)現(xiàn)對(duì)不同檔位的控制,而燈的閃爍
9、也只是在燈的明與暗之間加上一個(gè)延遲的時(shí)間便能完成,總體來(lái)說手動(dòng)控制的大體思想較為簡(jiǎn)單,而難點(diǎn)主要是在檔位切換的問題,開關(guān)的拔動(dòng)和檔位的變換以及電機(jī)做出的反應(yīng)這期間的時(shí)間差應(yīng)該越小越好,因而在程序的書寫過程中我使用的Switch…Case…語(yǔ)句,電機(jī)每走一步就進(jìn)行一次判斷,而不是用For循環(huán)來(lái)控制,這樣能將時(shí)間差縮短到很小的范圍內(nèi)。</p><p><b> 表1:相序表的設(shè)計(jì)</b><
10、;/p><p> 自動(dòng)控制:檔位的切換和LED燈的明暗控制和手動(dòng)控制肯定是沒有什么區(qū)別的,而自動(dòng)控制的主要難點(diǎn)在于對(duì)控制序列的定義及解析,也就是將不同的檔位及在該檔位下行進(jìn)的步數(shù)進(jìn)行的定義。我的解決思路是用a b c d e f g h八個(gè)不同的字母來(lái)分別表示不同的檔位,同時(shí)用數(shù)字表示在該檔位下運(yùn)行的步驟,在得知檔位和數(shù)字后,就只需要用循環(huán)來(lái)控制在當(dāng)前檔位下的行進(jìn)步數(shù)便能完成在自動(dòng)控制下的工作??刂菩蛄械妮斎朐谖业?/p>
11、程序中并不是用常用的文本輸入(實(shí)驗(yàn)后發(fā)現(xiàn)文本輸入更為簡(jiǎn)單而不需要進(jìn)行數(shù)字的轉(zhuǎn)換,這里走了彎路,但是還是按照最初自己的設(shè)計(jì)思路來(lái)說明的),我是從編輯框的控件進(jìn)行輸入的,由于編輯框的數(shù)據(jù)相當(dāng)與字符串的類型,因而并不能對(duì)數(shù)字進(jìn)行識(shí)別(即在編輯框中輸入123,程序中只能分別識(shí)別數(shù)字1 2 3 而不是整數(shù)123 而文本輸入便能解決這個(gè)問題,這就是我說的彎路所在),同時(shí)在序列輸入完畢后我會(huì)對(duì)該序列進(jìn)行遍歷,如果遇到不是a~h 或者不是0~9中的字符
12、便提示該序列是非法序列,否則用兩個(gè)數(shù)組對(duì)字母或者數(shù)字分別進(jìn)行存儲(chǔ),同時(shí)用計(jì)數(shù)器進(jìn)行計(jì)數(shù)來(lái)判別字母或者數(shù)字是否相對(duì)應(yīng),一個(gè)字母應(yīng)該相對(duì)應(yīng)的對(duì)應(yīng)一個(gè)數(shù)字,這樣才算完</p><p> 值得注意的是無(wú)論是自動(dòng)測(cè)試還是手動(dòng)測(cè)試,都要求用文件來(lái)保存小車行駛的里程,以便下次程序運(yùn)行時(shí)開始重新調(diào)用,因此在程序中涉及到了讀、寫文件的操作,我的設(shè)計(jì)過程中,都是在電機(jī)沒運(yùn)轉(zhuǎn)一步時(shí)便開始重新將里程寫入文件,而讀文件是在每次程序開始重
13、新運(yùn)行時(shí)。</p><p> 2.3基于MFC的程序具體的設(shè)計(jì)步驟:</p><p><b> 主程序框圖如下:</b></p><p> 主程序的設(shè)計(jì)框圖如下:</p><p><b> 是</b></p><p><b> 否</b>&l
14、t;/p><p> ?。?)詳細(xì)的設(shè)計(jì)步驟</p><p> 步驟1:創(chuàng)建基于對(duì)話框的MFC程序,同時(shí)將主對(duì)話框及作為程序的主登錄界面,給程序添加自動(dòng)測(cè)試和手動(dòng)測(cè)試的選擇按鈕,及進(jìn)入測(cè)試的按鈕,如圖示:</p><p><b> 圖4:主程序界面</b></p><p> 步驟2:創(chuàng)建2個(gè)新的對(duì)話框分別作為手動(dòng)測(cè)試和自
15、動(dòng)測(cè)試的主界面,同時(shí)都給對(duì)話框分別添加速度和里程顯示的編輯框以及進(jìn)入測(cè)試的按鈕,同時(shí)MFC的頭文件中還必須添加#include "conio.h"的頭文件,以便對(duì)實(shí)驗(yàn)中的端口地址進(jìn)行調(diào)用。界面設(shè)置如圖示:</p><p> 圖5:各測(cè)試程序界面</p><p> 步驟3:完成相應(yīng)代碼部分的書寫</p><p><b> 調(diào)試分析&
16、lt;/b></p><p> 調(diào)試過程中在手動(dòng)控制這塊基本沒有什么問題,問題主要是集中在自動(dòng)測(cè)試的過程中,這也和每個(gè)人的程序書寫有關(guān),由于我的程序不是用的文本來(lái)進(jìn)行控制序列的輸入,因此在進(jìn)行字符的轉(zhuǎn)換這一塊經(jīng)常一些沒想到的情況出現(xiàn),但是通過不斷的調(diào)試和老師的驗(yàn)收,最后還是圓滿的完成了此次課程設(shè)計(jì)。</p><p> 下面主要給出自動(dòng)測(cè)試過程中一些非法的序列輸入:</p&g
17、t;<p> 圖六 :一些非法的輸入</p><p> 其中正確的輸入即為程序中定義的a~h八個(gè)檔位加數(shù)字(及在檔位行進(jìn)的步數(shù))如下圖:</p><p> 圖七:正確的輸入序列</p><p> 4 .實(shí)驗(yàn)結(jié)果及收獲</p><p> 本次實(shí)驗(yàn)一共是四個(gè)人一組,因此在糾錯(cuò)方面能夠較為迅速的發(fā)現(xiàn)問題同時(shí)解決問題,在第二次
18、實(shí)驗(yàn)的時(shí)候我們組就已經(jīng)驗(yàn)收了,這里也頗為自豪。實(shí)驗(yàn)的過程印象較為深刻的是老師在檢查自動(dòng)運(yùn)轉(zhuǎn)這一塊,有幾次都是因?yàn)槌绦虿粔驀?yán)謹(jǐn)而犯了錯(cuò)誤,因此在以后的程序書寫過程中應(yīng)該更加認(rèn)真的審視自己的程序。同時(shí)此次實(shí)驗(yàn)也是對(duì)MFC綜合應(yīng)用的一次鍛煉,在以后的學(xué)習(xí)中應(yīng)該自己多給自己創(chuàng)造一些這樣的機(jī)會(huì),鍛煉自己學(xué)習(xí)的綜合運(yùn)用能力。 </p><p><b> 部分程序清單如下:</b></p&
19、gt;<p> //不同狀態(tài)的定義 分別表示不同的檔位</p><p> typedef enum{s0,s1,s2,s3,s4,s5,s6,s7,s8,s9}State;</p><p><b> //手動(dòng)測(cè)試部分</b></p><p> void Speed::OnButtonStart() </p>
20、<p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> fp=fopen("data.txt","r");//打開保存里程的文檔</p><p> if(!feof
21、(fp))</p><p><b> {</b></p><p> fscanf(fp,"%d",&m_length);</p><p><b> }</b></p><p> _outp(0x0c803,0x80);</p><p>&l
22、t;b> while(1)</b></p><p> {ReadDota();</p><p> if(flag==1)</p><p><b> {</b></p><p><b> flag=0;</b></p><p> fp=fopen
23、("data.txt","w");</p><p> fprintf(fp,"%d",m_length);</p><p> MessageBox("本次測(cè)試結(jié)束,請(qǐng)重新開始!");</p><p><b> break;</b></p><
24、;p><b> }</b></p><p> switch(state)</p><p><b> {</b></p><p> case s0://測(cè)試開始開關(guān)</p><p><b> flag=1;</b></p><p><
25、b> break;</b></p><p> case s1://靜止</p><p> _outp(0x0c860,255);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p>
26、<p><b> break;</b></p><p> case s2://進(jìn)檔1</p><p> m_speed=60;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _outp
27、(0x0c860,2);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case s3://進(jìn)檔2</p><
28、p> m_speed=70;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,4);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);&l
29、t;/p><p> Sleep(300);</p><p><b> break;</b></p><p> case s4://進(jìn)檔3</p><p> m_speed=80;</p><p> m_length+=40;</p><p><b> Ri
30、ght();</b></p><p> _outp(0x0c860,8);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p&g
31、t;<p> case s5://進(jìn)檔4</p><p> m_speed=90;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,16);</p><p> Sleep(30
32、0);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case s6://進(jìn)檔5</p><p> m_speed=100;</p><p> m
33、_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,32);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p>
34、;<p><b> break;</b></p><p> case s7://進(jìn)檔6</p><p> m_speed=120;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _
35、outp(0x0c860,64);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case s8://倒檔</p>
36、<p> m_speed=40;</p><p> m_length+=40;</p><p><b> Left();</b></p><p> _outp(0x0c860,128);</p><p> Sleep(300);</p><p> _outp(0x0c860,
37、0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case s9://換檔</p><p> MessageBox("確定要換檔?");</p><p><b> break;</b&g
38、t;</p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }&
39、lt;/b></p><p> //初始化及檔位的判斷</p><p> int Speed::ReadDota()</p><p><b> {</b></p><p><b> int k;</b></p><p> k=_inp(0x0c860);//讀
40、入LED的開關(guān)信息</p><p> //根據(jù)開關(guān)的信息做出判斷當(dāng)前檔位</p><p> if(k==0)//</p><p> else if(k==1)</p><p><b> state=s1;</b></p><p> else if(k==2)</p><
41、;p><b> {</b></p><p><b> state=s2;</b></p><p> dalay=1000;</p><p><b> }</b></p><p> else if(k==4)</p><p><b&g
42、t; {</b></p><p><b> state=s3;</b></p><p> dalay=800;</p><p><b> }</b></p><p> else if(k==8)</p><p><b> {</b>
43、;</p><p><b> state=s4;</b></p><p> dalay=600;</p><p><b> }</b></p><p> else if(k==16)</p><p><b> {</b></p>
44、<p><b> state=s5;</b></p><p> dalay=400;</p><p><b> }</b></p><p> else if(k==32)</p><p><b> {</b></p><p><
45、b> state=s6;</b></p><p> dalay=200;</p><p><b> }</b></p><p> else if(k==64)</p><p><b> {</b></p><p><b> state=
46、s7;</b></p><p> dalay=100;</p><p><b> }</b></p><p> else if(k==128)</p><p><b> {</b></p><p><b> state=s8;</b>
47、;</p><p> dalay=1500;</p><p><b> }</b></p><p><b> else</b></p><p><b> state=s9;</b></p><p> UpdateData(0);</p&g
48、t;<p> UpdateWindow();</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //電機(jī)開始右轉(zhuǎn)</b></p><p> int Speed::Right()</
49、p><p><b> {</b></p><p> _outp(0x0c801,a[ii]);</p><p> ii++;//到下一相序</p><p><b> if(ii==8)</b></p><p><b> ii=0;</b></
50、p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //電機(jī)開始左轉(zhuǎn)</b></p><p> int Speed::Left()</p><p><b> {</b&g
51、t;</p><p> _outp(0x0c801,a[jj]);</p><p> jj--;//到下一相序</p><p> if(jj==-1)</p><p><b> jj=7;</b></p><p><b> return 0;</b></p&g
52、t;<p><b> }</b></p><p><b> //自動(dòng)測(cè)試部分</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // Length me
53、ssage handlers</p><p> //對(duì)輸入的初始行進(jìn)序列的判斷 判斷是否合法 如果合法則開始存儲(chǔ) 運(yùn)行</p><p> void Length::OnButton1() </p><p><b> {</b></p><p> // TODO: Add your control notifica
54、tion handler code here</p><p> m_ceshi="";</p><p> fp1=fopen("data.txt","r");//文件操作</p><p> if(!feof(fp1))</p><p><b> {</b>
55、;</p><p> fscanf(fp1,"%d",&m_length);</p><p><b> }</b></p><p> char s[1000];</p><p><b> int n;</b></p><p><b&g
56、t; int i,j;</b></p><p> char alp[200];</p><p> int num[200],tmp=0;</p><p> int count1=0,count2=0,countN=0;</p><p> int flag=0;//表示是數(shù)字 1表示是字母</p><p
57、> char z[10];</p><p> UpdateData(1);</p><p> n=m_ceshi.GetLength();</p><p> itoa(n,z,10);</p><p> MessageBox(z);</p><p> s[0]=m_ceshi.GetAt(0);<
58、;/p><p> if(!(s[0]>=97&&s[0]<=104))</p><p><b> {</b></p><p> MessageBox("非法序列monkey!");</p><p> m_ceshi="";</p>&l
59、t;p><b> nimei();</b></p><p><b> return ;</b></p><p><b> }</b></p><p> //用于序列的判斷及存儲(chǔ)</p><p> for(i=0;i<n;i++)</p>&l
60、t;p><b> {</b></p><p> s[i]=m_ceshi.GetAt(i);</p><p> if(s[i]>=97&&s[i]<=104)</p><p><b> {</b></p><p> if(flag==1)</p>
61、;<p><b> {</b></p><p> MessageBox("非法序列biaoge !");</p><p> m_ceshi="";</p><p><b> nimei();</b></p><p><b>
62、break;</b></p><p><b> }</b></p><p> if(countN!=0)</p><p><b> {</b></p><p> for(j=0;j<countN;j++)</p><p><b> {&l
63、t;/b></p><p><b> int jj;</b></p><p> jj=countN-j-1;</p><p> tmp+=PanDuan(jj)*((int)s[i-countN+j]-48);</p><p><b> }</b></p><p&g
64、t; num[count2++]=tmp;</p><p><b> tmp=0;</b></p><p><b> countN=0;</b></p><p><b> }</b></p><p> alp[count1++]=s[i];</p>&l
65、t;p><b> flag=1;</b></p><p><b> countN=0;</b></p><p><b> }</b></p><p> else if(s[i]>=48&&s[i]<=57)</p><p><b&
66、gt; {</b></p><p><b> countN++;</b></p><p><b> flag=0;</b></p><p><b> }</b></p><p><b> else</b></p><
67、;p><b> {</b></p><p> MessageBox("非法序列meng ge2!");</p><p> m_ceshi="";</p><p><b> nimei();</b></p><p><b> retur
68、n ;</b></p><p><b> }</b></p><p> if((i==(n-1))&&(flag==0)&&(s[i]>=48)&&(s[i]<=57))</p><p><b> {</b></p><p&g
69、t; for(j=0;j<countN;j++)</p><p><b> {</b></p><p><b> int jj;</b></p><p> jj=countN-j-1;</p><p> tmp+=PanDuan(jj)*((int)s[i-countN+j+1]-4
70、8);</p><p><b> }</b></p><p> //MessageBox("wo fu le ni ");</p><p> num[count2++]=tmp;</p><p><b> tmp=0;</b></p><p>
71、 //countN=0;</p><p><b> }</b></p><p> /*if(s[i]==97)</p><p><b> {</b></p><p><b> flag=0;</b></p><p><b> }*
72、/</b></p><p><b> }</b></p><p><b> //序列之間不匹配</b></p><p> if(flag==1)</p><p><b> {</b></p><p> MessageBox(&quo
73、t;非法序列meng ge!");</p><p> m_ceshi="";</p><p><b> nimei();</b></p><p><b> return ;</b></p><p><b> }</b></p>
74、<p> //itoa(count2,z,10);</p><p> //MessageBox(z);</p><p> /*for(i=0;i<count2;i++)</p><p><b> {</b></p><p> m_speed=num[i];</p><p&g
75、t; Sleep(300);</p><p><b> nimei();</b></p><p><b> }</b></p><p> for(i=0;i<count1;i++)</p><p><b> {</b></p><p>
76、 m_length=alp[i];</p><p> Sleep(300);</p><p><b> nimei();</b></p><p><b> }</b></p><p><b> */</b></p><p> for(i=0;i
77、<count1;i++)</p><p><b> {</b></p><p> ReadDota(alp[i]);</p><p> SoGa(num[i]);</p><p><b> }</b></p><p> UpdateData(1);</
78、p><p> fp1=fopen("data.txt","w");</p><p> fprintf(fp1,"%d",m_length);</p><p><b> }</b></p><p><b> //刷新窗口</b></
79、p><p> int Length::nimei()</p><p><b> {</b></p><p> UpdateData(0);</p><p> UpdateWindow();</p><p><b> return 0;</b></p>&l
80、t;p><b> }</b></p><p> //主要用于在進(jìn)行序列判斷時(shí) 序列當(dāng)前位數(shù)的識(shí)別</p><p> int Length::PanDuan(int &n)</p><p><b> {</b></p><p> switch (n)</p>&l
81、t;p><b> {</b></p><p><b> case 0:</b></p><p><b> return 1;</b></p><p><b> case 1:</b></p><p> return 10;</p>
82、;<p><b> case 2:</b></p><p> return 100;</p><p><b> case 3:</b></p><p> return 1000;</p><p><b> case 4:</b></p>&
83、lt;p> return 10000;</p><p><b> case 5:</b></p><p> return 1000000;</p><p><b> }</b></p><p><b> return 0;</b></p><
84、p><b> }</b></p><p> //自動(dòng)運(yùn)行的主函數(shù)</p><p> int Length::SoGa(int n)</p><p><b> {</b></p><p><b> int i;</b></p><p>
85、UpdateData(1);</p><p> fp1=fopen("data.txt","r");</p><p> if(!feof(fp1))</p><p><b> {</b></p><p> fscanf(fp1,"%d",&m_l
86、ength);</p><p><b> }</b></p><p> _outp(0x0c803,0x80);</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> switch(state)</p
87、><p><b> {</b></p><p> case S1://靜止擋</p><p> _outp(0x0c860,255);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(30
88、0);</p><p><b> break;</b></p><p> case S2://進(jìn)檔1</p><p> m_speed=60;</p><p> m_length+=40;</p><p><b> Right();</b></p>&
89、lt;p> _outp(0x0c860,2);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case S3://進(jìn)檔2&
90、lt;/p><p> m_speed=70;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,4);</p><p> Sleep(300);</p><p> _out
91、p(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case S4://進(jìn)檔3</p><p> m_speed=80;</p><p> m_length+=40;</p><p&g
92、t;<b> Right();</b></p><p> _outp(0x0c860,8);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;<
93、;/b></p><p> case S5://進(jìn)檔4</p><p> m_speed=90;</p><p> m_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,16);</p><
94、p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case S6://進(jìn)檔5</p><p> m_speed=100;</p>
95、;<p> m_length+=40;</p><p><b> Right();</b></p><p> _outp(0x0c860,32);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep
96、(300);</p><p><b> break;</b></p><p> case S7://進(jìn)檔6</p><p> m_speed=120;</p><p> m_length+=40;</p><p><b> Right();</b></p>
97、;<p> _outp(0x0c860,64);</p><p> Sleep(300);</p><p> _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> case S8:/
98、/慢擋</p><p> m_speed=40;</p><p> m_length+=40;</p><p><b> Left();</b></p><p> _outp(0x0c860,128);</p><p> Sleep(300);</p><p>
99、 _outp(0x0c860,0);</p><p> Sleep(300);</p><p><b> break;</b></p><p> //case s9:</p><p> //MessageBox("確定要換檔?");</p><p><b>
100、 //break;</b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p> fp1=fopen("data.txt","
101、;w");</p><p> fprintf(fp1,"%d",m_length);</p><p> UpdateData(0);</p><p> UpdateWindow();</p><p><b> }</b></p><p> //fp=fope
102、n("data.txt","w");</p><p> //fprintf(fp,"%d",m_length);</p><p> //MessageBox("本次測(cè)試結(jié)束,請(qǐng)重新開始!");</p><p><b> return 0;</b></p&
103、gt;<p><b> }</b></p><p> //序列動(dòng)能的識(shí)別 及當(dāng)前序列進(jìn)行翻譯 相當(dāng)于手動(dòng)中的初始化及檔位的識(shí)//別 及相當(dāng)于解碼的功能 解讀當(dāng)前字符的含義完成相應(yīng)動(dòng)作</p><p> int Length::ReadDota(char s)</p><p><b> {</b>&
104、lt;/p><p> if(s=='a')//靜止檔</p><p><b> state=S1;</b></p><p> else if(s=='b')//進(jìn)檔1</p><p><b> {</b></p><p><b>
105、 state=S2;</b></p><p> dalay1=1000;</p><p><b> }</b></p><p> else if(s=='c')//進(jìn)檔2</p><p><b> {</b></p><p><b&
106、gt; state=S3;</b></p><p> dalay1=800;</p><p><b> }</b></p><p> else if(s=='d')//進(jìn)檔3</p><p><b> {</b></p><p><
107、b> state=S4;</b></p><p> dalay1=600;</p><p><b> }</b></p><p> else if(s=='e')//進(jìn)檔4</p><p><b> {</b></p><p>&l
108、t;b> state=S5;</b></p><p> dalay1=400;</p><p><b> }</b></p><p> else if(s=='f')//進(jìn)檔5</p><p><b> {</b></p><p>
109、<b> state=S6;</b></p><p> dalay1=200;</p><p><b> }</b></p><p> else if(s=='g')//進(jìn)檔6</p><p><b> {</b></p><p&g
110、t;<b> state=S7;</b></p><p> dalay1=100;</p><p><b> }</b></p><p> else if(s=='h')//倒檔</p><p><b> {</b></p><p&
111、gt;<b> state=S8;</b></p><p> dalay1=1500;</p><p><b> }</b></p><p> UpdateData(0);</p><p> UpdateWindow();</p><p><b> re
112、turn 0;</b></p><p><b> }</b></p><p><b> //電機(jī)右轉(zhuǎn)</b></p><p> int Length::Right()</p><p><b> {</b></p><p> _out
113、p(0x0c801,a1[iii]);</p><p> iii++;//到下一個(gè)相序</p><p> if(iii==8)</p><p><b> iii=0;</b></p><p><b> return 0;</b></p><p><b>
114、}</b></p><p><b> //電機(jī)左轉(zhuǎn)</b></p><p> int Length::Left()</p><p><b> {</b></p><p> _outp(0x0c801,a1[jjj]);</p><p> jjj--;//
115、到下一個(gè)相序</p><p> if(jjj==-1)</p><p><b> jjj=7;</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> //主程序 用于選擇</
116、p><p> void CMonkeyDlg::OnButtonEnter() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> UpdateData(1);</p>
117、<p> if(m_choose==0)//選擇手動(dòng)測(cè)試程序</p><p><b> {</b></p><p> Speed dlg;</p><p> dlg.DoModal();</p><p><b> }</b></p><p> els
118、e if(m_choose==1)//選擇自動(dòng)測(cè)試程序</p><p><b> {</b></p><p> Length dlg;</p><p> dlg.DoModal();</p><p><b> }</b></p><p><b> }&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)接口課程設(shè)計(jì)-本地步進(jìn)電機(jī)綜合控制
- 微機(jī)原理課程設(shè)計(jì)報(bào)告--步進(jìn)電機(jī)設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---步進(jìn)電機(jī)的微機(jī)控制
- 微機(jī)原理課程設(shè)計(jì)--用8051控制步進(jìn)電機(jī)驅(qū)動(dòng)的玩具小車
- 微機(jī)原理課程設(shè)計(jì)---步進(jìn)電機(jī)設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)課程設(shè)計(jì)報(bào)告 小型步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---步進(jìn)電機(jī)正反轉(zhuǎn)
- 課程設(shè)計(jì)-- 微機(jī)步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 步進(jìn)電機(jī)課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)--步進(jìn)電機(jī)控制系統(tǒng)
- 微機(jī)接口課程設(shè)計(jì)
- 步進(jìn)電機(jī)課程設(shè)計(jì)報(bào)告---步進(jìn)電機(jī)控制系統(tǒng)
- 步進(jìn)電機(jī)的控制課程設(shè)計(jì)報(bào)告
- 步進(jìn)電機(jī)控制a課程設(shè)計(jì)報(bào)告
- 步進(jìn)電機(jī)課程設(shè)計(jì)報(bào)告--步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 評(píng)分系統(tǒng)課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)原理與技術(shù)課程設(shè)計(jì)--步進(jìn)電機(jī)控制
- 步進(jìn)電機(jī)課程設(shè)計(jì)
- 課程設(shè)計(jì)步進(jìn)電機(jī)
評(píng)論
0/150
提交評(píng)論