完整的畢業(yè)設(shè)計(jì)下載:
按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速.doc
(791.5 KB, 下載次數(shù): 11)
2016-10-18 14:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
今天無(wú)意中看到了我6年前的畢業(yè)設(shè)計(jì),就像一個(gè)成年人在翻看童年時(shí)的照片,別有一番樂(lè)趣。那是2006年的最后一個(gè)學(xué)期,我在深圳的實(shí)習(xí)期間完成的。當(dāng)時(shí)還沒(méi)接觸過(guò)仿真器,燒錄器,也不知道有keil這個(gè)平臺(tái)軟件,更加不知道有匯編的編譯器,我們?cè)趯W(xué)校做實(shí)驗(yàn),都是自己在編寫匯編程序之后,通過(guò)自己對(duì)照匯編與機(jī)器碼的指令表,先人工把匯編程序翻譯成16進(jìn)制的機(jī)器碼。再把機(jī)器碼一個(gè)個(gè)敲進(jìn)設(shè)備里。出于對(duì)電子的瘋狂熱愛(ài),我把第一個(gè)月的實(shí)習(xí)工資都拿去買了仿真器,燒錄器,還有一些基本的工具與電子元器件,當(dāng)時(shí)還沒(méi)錢買電腦,有一個(gè)熱心的同事就借了一臺(tái)電腦給我,有了這些工具之后,我每天下班都在租房里練。我的畢業(yè)設(shè)計(jì),現(xiàn)在看起來(lái)很簡(jiǎn)單,就是做一圈跑馬燈,用按鍵來(lái)設(shè)定正轉(zhuǎn)與反轉(zhuǎn),可以設(shè)定圈數(shù)與調(diào)速度,我當(dāng)時(shí)錯(cuò)誤的以為這樣是在模擬步進(jìn)電機(jī),所以起的標(biāo)題《按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速》有點(diǎn)不恰當(dāng),F(xiàn)在貼出來(lái)跟大家分享,有興趣的朋友可以下載看看。
以下是內(nèi)容預(yù)覽:
按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速 指導(dǎo)老師: 管利銳 作者: 33103109 吳堅(jiān)鴻 Keyword: Expand8255Chip External Interrupt Button Display Summary: Step-Motor is more and more important in industry today, especially in the field of computer outside equipment. The function of this design is how to use Chip89C51 to control the Step-Motor. It includes the knowledge of Expand8255Chip , External Interrupt INT0,INT1. Via this activity ,I practice the ability of doing by myself and comprehend more knowledge than before .
關(guān)鍵字: 擴(kuò)展芯片8255 外部中斷 按鍵 顯示 摘要 步進(jìn)馬達(dá)在當(dāng)今信息工業(yè)社會(huì)中所扮演的角色日趨重要,尤以計(jì)算機(jī)外圍的一些裝置更是不可缺少。本畢業(yè)設(shè)計(jì)利用89C51來(lái)實(shí)現(xiàn)對(duì)模擬步進(jìn)馬達(dá)的控制。其中涉及到擴(kuò)展芯片8255,外部中斷INT0,INT1的知識(shí).在整個(gè)焊板,仿真,燒錄過(guò)程中,鍛煉了我們的動(dòng)手能力,并且加深了對(duì)單片機(jī)的知識(shí)的理解。 第一章 基本原理 用24個(gè)發(fā)光二極管圍成一個(gè)圓圈,每個(gè)發(fā)光二極管依次點(diǎn)亮,在外觀上模擬步進(jìn)馬達(dá)的轉(zhuǎn)動(dòng)。在89C51外圍擴(kuò)展兩片8255,一片用于驅(qū)動(dòng)24個(gè)發(fā)光二極管,一片用于驅(qū)動(dòng)紅色數(shù)碼顯示管,用來(lái)顯示馬達(dá)的圈數(shù)。用一個(gè)指示燈表示馬達(dá)的正逆轉(zhuǎn),亮則正轉(zhuǎn),滅則逆轉(zhuǎn)。此外,本設(shè)計(jì)還充分地利用到89C51單片機(jī)的兩個(gè)外部中斷INT0,INT1,分別接到兩個(gè)按鍵,用來(lái)設(shè)定轉(zhuǎn)速,并在綠色的數(shù)碼管顯示轉(zhuǎn)速檔。與其它的設(shè)置不同的是,由于設(shè)置轉(zhuǎn)速檔是用到兩個(gè)外部中斷,所以,無(wú)論馬達(dá)是停止還是運(yùn)行都可以隨時(shí)改變其速度。 第二章 實(shí)物制作過(guò)程(圖片) 一.焊板二. 仿真
1.001.jpg (14.08 KB, 下載次數(shù): 39)
下載附件
2016-10-18 14:26 上傳
1.002.jpg (15.07 KB, 下載次數(shù): 51)
下載附件
2016-10-18 14:26 上傳
三.燒錄 四.作品
1.003.jpg (8.67 KB, 下載次數(shù): 37)
下載附件
2016-10-18 14:26 上傳
1.004.jpg (9.41 KB, 下載次數(shù): 41)
下載附件
2016-10-18 14:26 上傳
1.005.jpg (8.98 KB, 下載次數(shù): 44)
下載附件
2016-10-18 14:26 上傳
第三章 功能說(shuō)明 (一) 正逆轉(zhuǎn)。矩形指示燈亮表示正轉(zhuǎn),滅表示逆轉(zhuǎn)。指示燈下面對(duì)應(yīng)的是按鍵K1,按一下指示燈滅,再按一下亮,依次循環(huán),用來(lái)設(shè)置正逆轉(zhuǎn)。 (二)調(diào)轉(zhuǎn)速。綠色數(shù)碼顯示管能顯示1(。-----9(大)檔的轉(zhuǎn)速,下面是對(duì)應(yīng)的兩個(gè)按鍵K2,K3。K2用來(lái)加速,按一下加一檔,并在綠色數(shù)碼顯示管上顯示,當(dāng)加速到第9檔時(shí),再按則又從第1檔開始。K3用來(lái)減速,當(dāng)減到第1檔時(shí),再按則又從第9擋開始。由于本功能是利用兩個(gè)中斷,所以無(wú)論馬達(dá)是正在運(yùn)行還是停止都可以調(diào)轉(zhuǎn)速。 (三)設(shè)置轉(zhuǎn)數(shù)。兩個(gè)紅色數(shù)碼顯示管可以顯示00—99,表示設(shè)置的轉(zhuǎn)數(shù),步進(jìn)馬達(dá)每轉(zhuǎn)一圈,其顯示數(shù)值就會(huì)減1,一直到00為止馬達(dá)才停止運(yùn)行。下面對(duì)應(yīng)的是兩個(gè)按鍵K4,K5。 K4用來(lái)設(shè)置十位數(shù),K5用來(lái)設(shè)置個(gè)位數(shù),每按一次,則相應(yīng)的數(shù)碼顯示管就加1,一直到9又從0開始。 (四)啟動(dòng)。只要轉(zhuǎn)數(shù)不為零,按一下K6,馬達(dá)就開始以所設(shè)定的參數(shù)運(yùn)行,直到紅色的數(shù)碼顯示管為00才停止。 第四章 硬件電路: 主要包括以下幾部分 (一)1片單片機(jī)89C51,2片8255,3片7447。 (二)1個(gè)紅色矩形發(fā)光二極管,24個(gè)發(fā)光二極管,2個(gè)共陽(yáng)紅色數(shù)碼顯示管,1個(gè)共陽(yáng)綠色數(shù)碼顯示管。 (三)6個(gè)按鍵 (四)9伏---1安的交流轉(zhuǎn)直流電源插口。 如圖所指示:
1.006.jpg (52.31 KB, 下載次數(shù): 49)
下載附件
2016-10-18 14:26 上傳
第五章 控制程序 第一節(jié)程序說(shuō)明 START 主要用于初始化 MIAN 用于主程序掃描按鍵 SET1 用于轉(zhuǎn)數(shù)個(gè)位數(shù)加1 SET2 用于轉(zhuǎn)數(shù)十位數(shù)加1 SET3 設(shè)定正逆轉(zhuǎn) LOOP1 正轉(zhuǎn) LOOP 逆轉(zhuǎn) DELAY 用來(lái)控制轉(zhuǎn)速 DELAY1 用來(lái)消除抖動(dòng) EXT0 外部中斷子程序INT0的中斷入口 EXT1 外部中斷子程序INT1的中斷入口 R5 為轉(zhuǎn)速的顯示寄存器 30H,31H 為轉(zhuǎn)數(shù)的顯示地址 第二節(jié)程序流程圖
0.png (40.54 KB, 下載次數(shù): 35)
下載附件
2016-10-18 14:25 上傳
第三節(jié) 程序清單。 - ORG 00H 主程序入口地址
- LJMP START
- ORG 03H 外部中斷INT0子程序入口地址
- LJMP EXT0
- ORG 13H 外部中斷INT1子程序入口地址
- LJMP EXT1
-
- START:CLR P2.6 正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
- MOV R5,#01H R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
- MOV IE,#85H INT0,INT1中斷使能
- MOV IP,#00H 同級(jí)中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
- CLR P2.2 8255(1)復(fù)位
- SETB P2.2
- CLR P2.2
- SETB P2.0 A0=1,A1=1,8255控制寄存器地址
- SETB P2.1
- MOV A,#80H 設(shè)8255(1)PA,PB,PC口為輸出口
- MOVX @R0,A
- SETB P2.5 不選8255(2)
- CLR P2.4 選8255(1)
- CLR P2.0 選A口
- CLR P2.1
- MOV A,#0FFH 熄滅A口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
-
- SETB P2.4 不選8255(1)
- CLR P2.5 片選8255(2)
- CLR P2.3 8255(2)復(fù)位
- SETB P2.3
- CLR P2.3
- SETB P2.0 A0=1,A1=1 8255控制寄存器地址
- SETB P2.1
- MOV A,#88H PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
- MOVX @R0,A
-
- MOV 30H,#01H 轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
- MOV 31H,#00H 轉(zhuǎn)數(shù)十位顯示寄存器顯示0
-
- MIAN:JNB P3.4,SET2 是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
- JNB P3.5,SET1 是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動(dòng)
- JNB P2.7,[code]ORG 00H 主程序入口地址
- LJMP START
- ORG 03H 外部中斷INT0子程序入口地址
- LJMP EXT0
- ORG 13H 外部中斷INT1子程序入口地址
- LJMP EXT1
-
- START:CLR P2.6 正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
- MOV R5,#01H R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
- MOV IE,#85H INT0,INT1中斷使能
- MOV IP,#00H 同級(jí)中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
- CLR P2.2 8255(1)復(fù)位
- SETB P2.2
- CLR P2.2
- SETB P2.0 A0=1,A1=1,8255控制寄存器地址
- SETB P2.1
- MOV A,#80H 設(shè)8255(1)PA,PB,PC口為輸出口
- MOVX @R0,A
- SETB P2.5 不選8255(2)
- CLR P2.4 選8255(1)
- CLR P2.0 選A口
- CLR P2.1
- MOV A,#0FFH 熄滅A口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
-
- SETB P2.4 不選8255(1)
- CLR P2.5 片選8255(2)
- CLR P2.3 8255(2)復(fù)位
- SETB P2.3
- CLR P2.3
- SETB P2.0 A0=1,A1=1 8255控制寄存器地址
- SETB P2.1
- MOV A,#88H PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
- MOVX @R0,A
-
- MOV 30H,#01H 轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
- MOV 31H,#00H 轉(zhuǎn)數(shù)十位顯示寄存器顯示0
-
- MIAN:JNB P3.4,SET2 是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
- JNB P3.5,SET1 是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動(dòng)
- JNB P2.7,[ DISCUZ_CODE_2 ]nbsp; 按鍵K1是否放開?是則往下執(zhí)行
- CPL P2.6 設(shè)定正逆轉(zhuǎn)
- JMP MIAN
-
- SET2:CALL DELAY1 消除抖動(dòng)
- JNB P3.4,[ DISCUZ_CODE_2 ]nbsp; 按鍵K4是否放開?是則往下執(zhí)行
- INC 31H 數(shù)十位顯示加1
- MOV A,31H
- CJNE A,#0AH,D6 加1后是否超過(guò)9,不是則返回主程序
- MOV 31H,#00H 是則先把十位顯示清0再返回
- D6:JMP MIAN
-
- SET1:CALL DELAY1 消除抖動(dòng)
- JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
- INC 30H 轉(zhuǎn)數(shù)個(gè)位加1
- MOV A,30H
- CJNE A,#0AH,D7 加1后是否超過(guò)9,不是則返回主程序
- MOV 30H,#00H 是則先把個(gè)位顯示清0再返回
- D7:JMP MIAN
-
- DISP:MOV A,R5 顯示轉(zhuǎn)速
- MOV P1,A
- MOV A,31H 顯示轉(zhuǎn)數(shù)
- SWAP A
- ORL A,30H
-
- SETB P2.4 通過(guò)8255(2)顯示轉(zhuǎn)數(shù)
- CLR P2.5
- SETB P2.0
- CLR P2.1
-
- MOVX @R0,A
- RET
- D15:JMP LOOP2
- LOOP1:CALL DELAY1 消除抖動(dòng)
- JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動(dòng)鍵是否放開
- JNB P2.6,D15 判斷正逆轉(zhuǎn) LOOP1 為正轉(zhuǎn)
- LOOP為逆轉(zhuǎn)
- LOOP:CALL DISP 轉(zhuǎn)完一圈后更新相關(guān)顯示
-
- MOV A,30H 判斷轉(zhuǎn)數(shù)是否為0,是則停止運(yùn)行,否則繼續(xù)運(yùn)行
- JZ D10
- DEC 30H
- JMP D14
- D10:MOV A,31H
- JZ D11 D11程序入口為JMP MIAN
- DEC 31H
- MOV 30H,#09H
-
- D14:SETB P2.5 片選8255(1)
- CLR P2.4
- CLR P2.0 選A口
- CLR P2.1
- MOV R4,#08H 依次顯示
- MOV A,#0FEH
- D3:MOVX @R0,A
- CALL DELAY 控制轉(zhuǎn)速
- RL A
- DJNZ R4,D3
- MOV A,#0FFH A口的8個(gè)發(fā)光二極管亮過(guò)后,把所有的A口等滅掉,為下一個(gè)亮B口做準(zhǔn)備
- MOVX @R0,A
-
- SETB P2.0 選B口,以下的程序與A口相類似
- CLR P2.1
- MOV R4,#08H
- MOV A,#0FEH
- D4:MOVX @R0,A
- CALL DELAY
- RL A
- DJNZ R4,D4
- MOV A,#0FFH
- MOVX @R0,A
-
- CLR P2.0
- SETB P2.1
- MOV R4,#08H
- MOV A,#0FEH
- D5:MOVX @R0,A
- CALL DELAY
- RL A
- DJNZ R4,D5
- MOV A,#0FFH
- MOVX @R0,A
-
- JMP LOOP
- D11:JMP MIAN
-
- LOOP2:CALL DISP 正轉(zhuǎn),程序與逆轉(zhuǎn)相類似。
-
- MOV A,30H
- JZ D16
- DEC 30H
- JMP D17
- D16:MOV A,31H
- JZ D11
- DEC 31H
- MOV 30H,#09H
-
- D17:SETB P2.5
- CLR P2.4
- CLR P2.0
- SETB P2.1
- MOV R4,#08H
- MOV A,#7FH
- D18:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D18
- MOV A,#0FFH
- MOVX @R0,A
-
- SETB P2.0
- CLR P2.1
- MOV R4,#08H
- MOV A,#7FH
- D19:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D19
- MOV A,#0FFH
- MOVX @R0,A
-
- CLR P2.0
- CLR P2.1
- MOV R4,#08H
- MOV A,#7FH
- D20:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D20
- MOV A,#0FFH
- MOVX @R0,A
-
- JMP LOOP2
-
- DELAY:MOV 33H,R6 該延時(shí)用于控制轉(zhuǎn)速
- MOV R7,33H
- D1:MOV R2,#0FH
- D2:MOV R3,#0FFH
- DJNZ R3,$
- DJNZ R2,D2
- DJNZ R7,D1
- RET
- DELAY1:MOV R3,#02H 該延時(shí)用于消除抖動(dòng)
- D9:MOV R1,#0FFH
- D8:MOV R2,#0FFH
- DJNZ R2,$
- DJNZ R1,D8
- DJNZ R3,D9
- RET
-
- EXT0:CALL DELAY1 中斷INT0的入口,用于加速
- PUSH ACC
- PUSH PSW
-
- INC R5 R5為顯示寄存器顯示轉(zhuǎn)速檔
-
- DEC R6 R6是控制轉(zhuǎn)速延時(shí)的參數(shù)。R5每加1檔,則R6就減1,則延時(shí)就更短,速度更快
- MOV A,R5
- CJNE A,#0AH,D12
- MOV R5,#01H
- MOV R6,#09H
- D12:POP PSW
- POP ACC
- RETI
-
- EXT1:CALL DELAY1 中斷INT1的入口,用于減速
- PUSH ACC
- PUSH PSW
-
- DEC R5
-
- INC R6
- MOV A,R5
- JNZ D13
- MOV R5,#09H
- MOV R6,#01H
-
- D13:POP PSW
- POP ACC
- RETI
- END
復(fù)制代碼 nbsp; 按鍵K1是否放開?是則往下執(zhí)行
CPL P2.6 設(shè)定正逆轉(zhuǎn)
JMP MIAN
SET2:CALL DELAY1 消除抖動(dòng)
JNB P3.4,- ORG 00H 主程序入口地址
- LJMP START
- ORG 03H 外部中斷INT0子程序入口地址
- LJMP EXT0
- ORG 13H 外部中斷INT1子程序入口地址
- LJMP EXT1
-
- START:CLR P2.6 正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
- MOV R5,#01H R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
- MOV IE,#85H INT0,INT1中斷使能
- MOV IP,#00H 同級(jí)中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
- CLR P2.2 8255(1)復(fù)位
- SETB P2.2
- CLR P2.2
- SETB P2.0 A0=1,A1=1,8255控制寄存器地址
- SETB P2.1
- MOV A,#80H 設(shè)8255(1)PA,PB,PC口為輸出口
- MOVX @R0,A
- SETB P2.5 不選8255(2)
- CLR P2.4 選8255(1)
- CLR P2.0 選A口
- CLR P2.1
- MOV A,#0FFH 熄滅A口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個(gè)發(fā)光二極管
- MOVX @R0,A
-
-
- SETB P2.4 不選8255(1)
- CLR P2.5 片選8255(2)
- CLR P2.3 8255(2)復(fù)位
- SETB P2.3
- CLR P2.3
- SETB P2.0 A0=1,A1=1 8255控制寄存器地址
- SETB P2.1
- MOV A,#88H PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
- MOVX @R0,A
-
- MOV 30H,#01H 轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
- MOV 31H,#00H 轉(zhuǎn)數(shù)十位顯示寄存器顯示0
-
- MIAN:JNB P3.4,SET2 是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
- JNB P3.5,SET1 是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動(dòng)
- JNB P2.7,[ DISCUZ_CODE_2 ]nbsp; 按鍵K1是否放開?是則往下執(zhí)行
- CPL P2.6 設(shè)定正逆轉(zhuǎn)
- JMP MIAN
-
- SET2:CALL DELAY1 消除抖動(dòng)
- JNB P3.4,[ DISCUZ_CODE_2 ]nbsp; 按鍵K4是否放開?是則往下執(zhí)行
- INC 31H 數(shù)十位顯示加1
- MOV A,31H
- CJNE A,#0AH,D6 加1后是否超過(guò)9,不是則返回主程序
- MOV 31H,#00H 是則先把十位顯示清0再返回
- D6:JMP MIAN
-
- SET1:CALL DELAY1 消除抖動(dòng)
- JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
- INC 30H 轉(zhuǎn)數(shù)個(gè)位加1
- MOV A,30H
- CJNE A,#0AH,D7 加1后是否超過(guò)9,不是則返回主程序
- MOV 30H,#00H 是則先把個(gè)位顯示清0再返回
- D7:JMP MIAN
-
- DISP:MOV A,R5 顯示轉(zhuǎn)速
- MOV P1,A
- MOV A,31H 顯示轉(zhuǎn)數(shù)
- SWAP A
- ORL A,30H
-
- SETB P2.4 通過(guò)8255(2)顯示轉(zhuǎn)數(shù)
- CLR P2.5
- SETB P2.0
- CLR P2.1
-
- MOVX @R0,A
- RET
- D15:JMP LOOP2
- LOOP1:CALL DELAY1 消除抖動(dòng)
- JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動(dòng)鍵是否放開
- JNB P2.6,D15 判斷正逆轉(zhuǎn) LOOP1 為正轉(zhuǎn)
- LOOP為逆轉(zhuǎn)
- LOOP:CALL DISP 轉(zhuǎn)完一圈后更新相關(guān)顯示
-
- MOV A,30H 判斷轉(zhuǎn)數(shù)是否為0,是則停止運(yùn)行,否則繼續(xù)運(yùn)行
- JZ D10
- DEC 30H
- JMP D14
- D10:MOV A,31H
- JZ D11 D11程序入口為JMP MIAN
- DEC 31H
- MOV 30H,#09H
-
- D14:SETB P2.5 片選8255(1)
- CLR P2.4
- CLR P2.0 選A口
- CLR P2.1
- MOV R4,#08H 依次顯示
- MOV A,#0FEH
- D3:MOVX @R0,A
- CALL DELAY 控制轉(zhuǎn)速
- RL A
- DJNZ R4,D3
- MOV A,#0FFH A口的8個(gè)發(fā)光二極管亮過(guò)后,把所有的A口等滅掉,為下一個(gè)亮B口做準(zhǔn)備
- MOVX @R0,A
-
- SETB P2.0 選B口,以下的程序與A口相類似
- CLR P2.1
- MOV R4,#08H
- MOV A,#0FEH
- D4:MOVX @R0,A
- CALL DELAY
- RL A
- DJNZ R4,D4
- MOV A,#0FFH
- MOVX @R0,A
-
- CLR P2.0
- SETB P2.1
- MOV R4,#08H
- MOV A,#0FEH
- D5:MOVX @R0,A
- CALL DELAY
- RL A
- DJNZ R4,D5
- MOV A,#0FFH
- MOVX @R0,A
-
- JMP LOOP
- D11:JMP MIAN
-
- LOOP2:CALL DISP 正轉(zhuǎn),程序與逆轉(zhuǎn)相類似。
-
- MOV A,30H
- JZ D16
- DEC 30H
- JMP D17
- D16:MOV A,31H
- JZ D11
- DEC 31H
- MOV 30H,#09H
-
- D17:SETB P2.5
- CLR P2.4
- CLR P2.0
- SETB P2.1
- MOV R4,#08H
- MOV A,#7FH
- D18:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D18
- MOV A,#0FFH
- MOVX @R0,A
-
- SETB P2.0
- CLR P2.1
- MOV R4,#08H
- MOV A,#7FH
- D19:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D19
- MOV A,#0FFH
- MOVX @R0,A
-
- CLR P2.0
- CLR P2.1
- MOV R4,#08H
- MOV A,#7FH
- D20:MOVX @R0,A
- CALL DELAY
- RR A
- DJNZ R4,D20
- MOV A,#0FFH
- MOVX @R0,A
-
- JMP LOOP2
-
- DELAY:MOV 33H,R6 該延時(shí)用于控制轉(zhuǎn)速
- MOV R7,33H
- D1:MOV R2,#0FH
- D2:MOV R3,#0FFH
- DJNZ R3,$
- DJNZ R2,D2
- DJNZ R7,D1
- RET
- DELAY1:MOV R3,#02H 該延時(shí)用于消除抖動(dòng)
- D9:MOV R1,#0FFH
- D8:MOV R2,#0FFH
- DJNZ R2,$
- DJNZ R1,D8
- DJNZ R3,D9
- RET
-
- EXT0:CALL DELAY1 中斷INT0的入口,用于加速
- PUSH ACC
- PUSH PSW
-
- INC R5 R5為顯示寄存器顯示轉(zhuǎn)速檔
-
- DEC R6 R6是控制轉(zhuǎn)速延時(shí)的參數(shù)。R5每加1檔,則R6就減1,則延時(shí)就更短,速度更快
- MOV A,R5
- CJNE A,#0AH,D12
- MOV R5,#01H
- MOV R6,#09H
- D12:POP PSW
- POP ACC
- RETI
-
- EXT1:CALL DELAY1 中斷INT1的入口,用于減速
- PUSH ACC
- PUSH PSW
-
- DEC R5
-
- INC R6
- MOV A,R5
- JNZ D13
- MOV R5,#09H
- MOV R6,#01H
-
- D13:POP PSW
- POP ACC
- RETI
- END
復(fù)制代碼 nbsp; 按鍵K4是否放開?是則往下執(zhí)行
INC 31H 數(shù)十位顯示加1
MOV A,31H
CJNE A,#0AH,D6 加1后是否超過(guò)9,不是則返回主程序
MOV 31H,#00H 是則先把十位顯示清0再返回
D6:JMP MIAN
SET1:CALL DELAY1 消除抖動(dòng)
JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
INC 30H 轉(zhuǎn)數(shù)個(gè)位加1
MOV A,30H
CJNE A,#0AH,D7 加1后是否超過(guò)9,不是則返回主程序
MOV 30H,#00H 是則先把個(gè)位顯示清0再返回
D7:JMP MIAN
DISP:MOV A,R5 顯示轉(zhuǎn)速
MOV P1,A
MOV A,31H 顯示轉(zhuǎn)數(shù)
SWAP A
ORL A,30H
SETB P2.4 通過(guò)8255(2)顯示轉(zhuǎn)數(shù)
CLR P2.5
SETB P2.0
CLR P2.1
MOVX @R0,A
RET
D15:JMP LOOP2
LOOP1:CALL DELAY1 消除抖動(dòng)
JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動(dòng)鍵是否放開
JNB P2.6,D15 判斷正逆轉(zhuǎn) LOOP1 為正轉(zhuǎn)
LOOP為逆轉(zhuǎn)
LOOP:CALL DISP 轉(zhuǎn)完一圈后更新相關(guān)顯示
MOV A,30H 判斷轉(zhuǎn)數(shù)是否為0,是則停止運(yùn)行,否則繼續(xù)運(yùn)行
JZ D10
DEC 30H
JMP D14
D10:MOV A,31H
JZ D11 D11程序入口為JMP MIAN
DEC 31H
MOV 30H,#09H
D14:SETB P2.5 片選8255(1)
CLR P2.4
CLR P2.0 選A口
CLR P2.1
MOV R4,#08H 依次顯示
MOV A,#0FEH
D3:MOVX @R0,A
CALL DELAY 控制轉(zhuǎn)速
RL A
DJNZ R4,D3
MOV A,#0FFH A口的8個(gè)發(fā)光二極管亮過(guò)后,把所有的A口等滅掉,為下一個(gè)亮B口做準(zhǔn)備
MOVX @R0,A
SETB P2.0 選B口,以下的程序與A口相類似
CLR P2.1
MOV R4,#08H
MOV A,#0FEH
D4:MOVX @R0,A
CALL DELAY
RL A
DJNZ R4,D4
MOV A,#0FFH
MOVX @R0,A
CLR P2.0
SETB P2.1
MOV R4,#08H
MOV A,#0FEH
D5:MOVX @R0,A
CALL DELAY
RL A
DJNZ R4,D5
MOV A,#0FFH
MOVX @R0,A
JMP LOOP
D11:JMP MIAN
LOOP2:CALL DISP 正轉(zhuǎn),程序與逆轉(zhuǎn)相類似。
MOV A,30H
JZ D16
DEC 30H
JMP D17
D16:MOV A,31H
JZ D11
DEC 31H
MOV 30H,#09H
D17:SETB P2.5
CLR P2.4
CLR P2.0
SETB P2.1
MOV R4,#08H
MOV A,#7FH
D18:MOVX @R0,A
CALL DELAY
RR A
DJNZ R4,D18
MOV A,#0FFH
MOVX @R0,A
SETB P2.0
CLR P2.1
MOV R4,#08H
MOV A,#7FH
D19:MOVX @R0,A
CALL DELAY
RR A
DJNZ R4,D19
MOV A,#0FFH
MOVX @R0,A
CLR P2.0
CLR P2.1
MOV R4,#08H
MOV A,#7FH
D20:MOVX @R0,A
CALL DELAY
RR A
DJNZ R4,D20
MOV A,#0FFH
MOVX @R0,A
JMP LOOP2
DELAY:MOV 33H,R6 該延時(shí)用于控制轉(zhuǎn)速
MOV R7,33H
D1:MOV R2,#0FH
D2:MOV R3,#0FFH
DJNZ R3,$
DJNZ R2,D2
DJNZ R7,D1
RET
DELAY1:MOV R3,#02H 該延時(shí)用于消除抖動(dòng)
D9:MOV R1,#0FFH
D8:MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,D8
DJNZ R3,D9
RET
EXT0:CALL DELAY1 中斷INT0的入口,用于加速
PUSH ACC
PUSH PSW
INC R5 R5為顯示寄存器顯示轉(zhuǎn)速檔
DEC R6 R6是控制轉(zhuǎn)速延時(shí)的參數(shù)。R5每加1檔,則R6就減1,則延時(shí)就更短,速度更快
MOV A,R5
CJNE A,#0AH,D12
MOV R5,#01H
MOV R6,#09H
D12:POP PSW
POP ACC
RETI
EXT1:CALL DELAY1 中斷INT1的入口,用于減速
PUSH ACC
PUSH PSW
DEC R5
INC R6
MOV A,R5
JNZ D13
MOV R5,#09H
MOV R6,#01H
D13:POP PSW
POP ACC
RETI
END[/code]
第六章 實(shí)驗(yàn)結(jié)果與分析: 本作品剛開始的時(shí)候是用16鍵盤掃描輸入的,但是后來(lái)發(fā)現(xiàn)16鍵盤掃描輸入的穩(wěn)定性很難保證,所以就改成6個(gè)獨(dú)立按鍵輸入。程序也是經(jīng)過(guò)在仿真器上不斷的調(diào)試,最終做出來(lái),F(xiàn)在本作品能實(shí)現(xiàn)它的功能,但是還是有一些小缺陷需要改進(jìn),比如在步進(jìn)馬達(dá)正在運(yùn)行時(shí),按中斷按鍵K2或者K3來(lái)加速時(shí),會(huì)看到步進(jìn)馬達(dá)會(huì)略微停頓一下,是因?yàn)橹袛嗟陌存I子程序上加了一個(gè)用于消除抖動(dòng)的延時(shí)程序。還有,如果在單片機(jī)上的復(fù)位電路上加一個(gè)手動(dòng)復(fù)位按鍵,用來(lái)做急停開關(guān)則功能更強(qiáng)。 第七章 總結(jié) 本設(shè)計(jì)涉及的知識(shí)點(diǎn)很多,軟件上主要有:輸入按鍵的應(yīng)用,數(shù)碼顯示管的應(yīng)用,兩個(gè)外部中斷的應(yīng)用,更具挑戰(zhàn)性的是,本設(shè)計(jì)在89C51外圍擴(kuò)展了兩片8255,如何在程序上處理好單片機(jī)與兩片8255的工作,是本設(shè)計(jì)的難點(diǎn)所在。在硬件上,可以學(xué)到一些基本的焊接技術(shù),如何使用仿真器進(jìn)行在線仿真,如何使用燒錄器把仿真好,編譯好的可執(zhí)行文件燒錄到芯片89C51中,以前都沒(méi)有接觸到仿真器,燒錄器,現(xiàn)在由于自己的興趣,自己花錢把這些開發(fā)設(shè)備買回來(lái)并且已經(jīng)學(xué)會(huì)使用?傊,通過(guò)這次畢業(yè)設(shè)計(jì),獲益甚豐。 參考資料: 1)李全利 主編. 單片機(jī)原理及應(yīng)用技術(shù). 北京.高等教育出版社, 2001 2)吳金戌 沈慶陽(yáng) 郭庭古 主編. 8051單片機(jī)實(shí)踐與應(yīng)用. 北京. 清華大學(xué)出版社, 2002 3)陳明熒 主編. 8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材. 北京. 清華大學(xué)出版社, 2004 4)余孟嘗 主編. 模擬,數(shù)字及電力電子技術(shù). 北京. 機(jī)械工業(yè)出版社, 1999年 致謝: 感謝管利銳老師這一年多來(lái)的指導(dǎo),讓我不但掌握單片機(jī)的基本知識(shí),而且對(duì)單片機(jī)產(chǎn)生濃重的興趣,還要感謝陳慧敏老師,是她先教我們專業(yè)的匯編語(yǔ)言,讓我在調(diào)程序時(shí)少走許多彎路。感謝我的同事李文化,余興社,是他們提供電腦和相機(jī)讓我完成這份畢業(yè)設(shè)計(jì)。
|