完整的畢業(yè)設(shè)計下載:
按鍵設(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
今天無意中看到了我6年前的畢業(yè)設(shè)計,就像一個成年人在翻看童年時的照片,別有一番樂趣。那是2006年的最后一個學(xué)期,我在深圳的實(shí)習(xí)期間完成的。當(dāng)時還沒接觸過仿真器,燒錄器,也不知道有keil這個平臺軟件,更加不知道有匯編的編譯器,我們在學(xué)校做實(shí)驗(yàn),都是自己在編寫匯編程序之后,通過自己對照匯編與機(jī)器碼的指令表,先人工把匯編程序翻譯成16進(jìn)制的機(jī)器碼。再把機(jī)器碼一個個敲進(jìn)設(shè)備里。出于對電子的瘋狂熱愛,我把第一個月的實(shí)習(xí)工資都拿去買了仿真器,燒錄器,還有一些基本的工具與電子元器件,當(dāng)時還沒錢買電腦,有一個熱心的同事就借了一臺電腦給我,有了這些工具之后,我每天下班都在租房里練。我的畢業(yè)設(shè)計,現(xiàn)在看起來很簡單,就是做一圈跑馬燈,用按鍵來設(shè)定正轉(zhuǎn)與反轉(zhuǎn),可以設(shè)定圈數(shù)與調(diào)速度,我當(dāng)時錯誤的以為這樣是在模擬步進(jìn)電機(jī),所以起的標(biāo)題《按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速》有點(diǎn)不恰當(dāng)。現(xiàn)在貼出來跟大家分享,有興趣的朋友可以下載看看。
以下是內(nèi)容預(yù)覽:
按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速 指導(dǎo)老師: 管利銳 作者: 33103109 吳堅鴻 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è)社會中所扮演的角色日趨重要,尤以計算機(jī)外圍的一些裝置更是不可缺少。本畢業(yè)設(shè)計利用89C51來實(shí)現(xiàn)對模擬步進(jìn)馬達(dá)的控制。其中涉及到擴(kuò)展芯片8255,外部中斷INT0,INT1的知識.在整個焊板,仿真,燒錄過程中,鍛煉了我們的動手能力,并且加深了對單片機(jī)的知識的理解。 第一章 基本原理 用24個發(fā)光二極管圍成一個圓圈,每個發(fā)光二極管依次點(diǎn)亮,在外觀上模擬步進(jìn)馬達(dá)的轉(zhuǎn)動。在89C51外圍擴(kuò)展兩片8255,一片用于驅(qū)動24個發(fā)光二極管,一片用于驅(qū)動紅色數(shù)碼顯示管,用來顯示馬達(dá)的圈數(shù)。用一個指示燈表示馬達(dá)的正逆轉(zhuǎn),亮則正轉(zhuǎn),滅則逆轉(zhuǎn)。此外,本設(shè)計還充分地利用到89C51單片機(jī)的兩個外部中斷INT0,INT1,分別接到兩個按鍵,用來設(shè)定轉(zhuǎn)速,并在綠色的數(shù)碼管顯示轉(zhuǎn)速檔。與其它的設(shè)置不同的是,由于設(shè)置轉(zhuǎn)速檔是用到兩個外部中斷,所以,無論馬達(dá)是停止還是運(yùn)行都可以隨時改變其速度。 第二章 實(shí)物制作過程(圖片) 一.焊板二. 仿真
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 上傳
第三章 功能說明 (一) 正逆轉(zhuǎn)。矩形指示燈亮表示正轉(zhuǎn),滅表示逆轉(zhuǎn)。指示燈下面對應(yīng)的是按鍵K1,按一下指示燈滅,再按一下亮,依次循環(huán),用來設(shè)置正逆轉(zhuǎn)。 (二)調(diào)轉(zhuǎn)速。綠色數(shù)碼顯示管能顯示1(。-----9(大)檔的轉(zhuǎn)速,下面是對應(yīng)的兩個按鍵K2,K3。K2用來加速,按一下加一檔,并在綠色數(shù)碼顯示管上顯示,當(dāng)加速到第9檔時,再按則又從第1檔開始。K3用來減速,當(dāng)減到第1檔時,再按則又從第9擋開始。由于本功能是利用兩個中斷,所以無論馬達(dá)是正在運(yùn)行還是停止都可以調(diào)轉(zhuǎn)速。 (三)設(shè)置轉(zhuǎn)數(shù)。兩個紅色數(shù)碼顯示管可以顯示00—99,表示設(shè)置的轉(zhuǎn)數(shù),步進(jìn)馬達(dá)每轉(zhuǎn)一圈,其顯示數(shù)值就會減1,一直到00為止馬達(dá)才停止運(yùn)行。下面對應(yīng)的是兩個按鍵K4,K5。 K4用來設(shè)置十位數(shù),K5用來設(shè)置個位數(shù),每按一次,則相應(yīng)的數(shù)碼顯示管就加1,一直到9又從0開始。 (四)啟動。只要轉(zhuǎn)數(shù)不為零,按一下K6,馬達(dá)就開始以所設(shè)定的參數(shù)運(yùn)行,直到紅色的數(shù)碼顯示管為00才停止。 第四章 硬件電路: 主要包括以下幾部分 (一)1片單片機(jī)89C51,2片8255,3片7447。 (二)1個紅色矩形發(fā)光二極管,24個發(fā)光二極管,2個共陽紅色數(shù)碼顯示管,1個共陽綠色數(shù)碼顯示管。 (三)6個按鍵 (四)9伏---1安的交流轉(zhuǎn)直流電源插口。 如圖所指示:
1.006.jpg (52.31 KB, 下載次數(shù): 49)
下載附件
2016-10-18 14:26 上傳
第五章 控制程序 第一節(jié)程序說明 START 主要用于初始化 MIAN 用于主程序掃描按鍵 SET1 用于轉(zhuǎn)數(shù)個位數(shù)加1 SET2 用于轉(zhuǎn)數(shù)十位數(shù)加1 SET3 設(shè)定正逆轉(zhuǎn) LOOP1 正轉(zhuǎn) LOOP 逆轉(zhuǎn) DELAY 用來控制轉(zhuǎn)速 DELAY1 用來消除抖動 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 同級中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來驅(qū)動24個發(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個發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個發(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ù)個位顯示寄存器顯示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ù)個位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動按鍵K6,是則啟動步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動
- 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 同級中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來驅(qū)動24個發(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個發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個發(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ù)個位顯示寄存器顯示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ù)個位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動按鍵K6,是則啟動步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動
- JNB P2.7,[ DISCUZ_CODE_2 ]nbsp; 按鍵K1是否放開?是則往下執(zhí)行
- CPL P2.6 設(shè)定正逆轉(zhuǎn)
- JMP MIAN
-
- SET2:CALL DELAY1 消除抖動
- JNB P3.4,[ DISCUZ_CODE_2 ]nbsp; 按鍵K4是否放開?是則往下執(zhí)行
- INC 31H 數(shù)十位顯示加1
- MOV A,31H
- CJNE A,#0AH,D6 加1后是否超過9,不是則返回主程序
- MOV 31H,#00H 是則先把十位顯示清0再返回
- D6:JMP MIAN
-
- SET1:CALL DELAY1 消除抖動
- JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
- INC 30H 轉(zhuǎn)數(shù)個位加1
- MOV A,30H
- CJNE A,#0AH,D7 加1后是否超過9,不是則返回主程序
- MOV 30H,#00H 是則先把個位顯示清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 通過8255(2)顯示轉(zhuǎn)數(shù)
- CLR P2.5
- SETB P2.0
- CLR P2.1
-
- MOVX @R0,A
- RET
- D15:JMP LOOP2
- LOOP1:CALL DELAY1 消除抖動
- JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動鍵是否放開
- 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個發(fā)光二極管亮過后,把所有的A口等滅掉,為下一個亮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 該延時用于控制轉(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 該延時用于消除抖動
- 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ù)。R5每加1檔,則R6就減1,則延時就更短,速度更快
- 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 消除抖動
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 同級中斷:先按先中斷
- MOV TCON,#00H INT0,INT1為電平觸發(fā)
- MOV SP,#70H 設(shè)定堆棧在70H地址
-
- SETB P2.5 不選8255(2):8255(1)用來控制顯示轉(zhuǎn)數(shù)
- CLR P2.4 片選8255(1):8255(1)用來驅(qū)動24個發(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個發(fā)光二極管
- MOVX @R0,A
-
- SETB P2.0 選B口
- CLR P2.1
- MOV A,#0FFH 熄滅B口的8個發(fā)光二極管
- MOVX @R0,A
-
- CLR P2.0 選C口
- SETB P2.1
- MOV A,#0FFH 熄滅C口的8個發(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ù)個位顯示寄存器顯示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ù)個位數(shù)加1
- JNB P2.7,SET3 是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)
-
- CALL DISP 調(diào)用顯示程序
- JNB P3.0,LOOP1 是否按啟動按鍵K6,是則啟動步進(jìn)馬達(dá)
- JMP MIAN
-
- SET3:CALL DELAY1 消除抖動
- JNB P2.7,[ DISCUZ_CODE_2 ]nbsp; 按鍵K1是否放開?是則往下執(zhí)行
- CPL P2.6 設(shè)定正逆轉(zhuǎn)
- JMP MIAN
-
- SET2:CALL DELAY1 消除抖動
- JNB P3.4,[ DISCUZ_CODE_2 ]nbsp; 按鍵K4是否放開?是則往下執(zhí)行
- INC 31H 數(shù)十位顯示加1
- MOV A,31H
- CJNE A,#0AH,D6 加1后是否超過9,不是則返回主程序
- MOV 31H,#00H 是則先把十位顯示清0再返回
- D6:JMP MIAN
-
- SET1:CALL DELAY1 消除抖動
- JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
- INC 30H 轉(zhuǎn)數(shù)個位加1
- MOV A,30H
- CJNE A,#0AH,D7 加1后是否超過9,不是則返回主程序
- MOV 30H,#00H 是則先把個位顯示清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 通過8255(2)顯示轉(zhuǎn)數(shù)
- CLR P2.5
- SETB P2.0
- CLR P2.1
-
- MOVX @R0,A
- RET
- D15:JMP LOOP2
- LOOP1:CALL DELAY1 消除抖動
- JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動鍵是否放開
- 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個發(fā)光二極管亮過后,把所有的A口等滅掉,為下一個亮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 該延時用于控制轉(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 該延時用于消除抖動
- 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ù)。R5每加1檔,則R6就減1,則延時就更短,速度更快
- 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后是否超過9,不是則返回主程序
MOV 31H,#00H 是則先把十位顯示清0再返回
D6:JMP MIAN
SET1:CALL DELAY1 消除抖動
JNB P3.5,[ DISCUZ_CODE_2 ]nbsp; 按鍵K5是否放開?是則往下執(zhí)行
INC 30H 轉(zhuǎn)數(shù)個位加1
MOV A,30H
CJNE A,#0AH,D7 加1后是否超過9,不是則返回主程序
MOV 30H,#00H 是則先把個位顯示清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 通過8255(2)顯示轉(zhuǎn)數(shù)
CLR P2.5
SETB P2.0
CLR P2.1
MOVX @R0,A
RET
D15:JMP LOOP2
LOOP1:CALL DELAY1 消除抖動
JNB P3.0,[ DISCUZ_CODE_2 ]nbsp; K6啟動鍵是否放開
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個發(fā)光二極管亮過后,把所有的A口等滅掉,為下一個亮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 該延時用于控制轉(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 該延時用于消除抖動
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ù)。R5每加1檔,則R6就減1,則延時就更短,速度更快
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é)果與分析: 本作品剛開始的時候是用16鍵盤掃描輸入的,但是后來發(fā)現(xiàn)16鍵盤掃描輸入的穩(wěn)定性很難保證,所以就改成6個獨(dú)立按鍵輸入。程序也是經(jīng)過在仿真器上不斷的調(diào)試,最終做出來。現(xiàn)在本作品能實(shí)現(xiàn)它的功能,但是還是有一些小缺陷需要改進(jìn),比如在步進(jìn)馬達(dá)正在運(yùn)行時,按中斷按鍵K2或者K3來加速時,會看到步進(jìn)馬達(dá)會略微停頓一下,是因?yàn)橹袛嗟陌存I子程序上加了一個用于消除抖動的延時程序。還有,如果在單片機(jī)上的復(fù)位電路上加一個手動復(fù)位按鍵,用來做急停開關(guān)則功能更強(qiáng)。 第七章 總結(jié) 本設(shè)計涉及的知識點(diǎn)很多,軟件上主要有:輸入按鍵的應(yīng)用,數(shù)碼顯示管的應(yīng)用,兩個外部中斷的應(yīng)用,更具挑戰(zhàn)性的是,本設(shè)計在89C51外圍擴(kuò)展了兩片8255,如何在程序上處理好單片機(jī)與兩片8255的工作,是本設(shè)計的難點(diǎn)所在。在硬件上,可以學(xué)到一些基本的焊接技術(shù),如何使用仿真器進(jìn)行在線仿真,如何使用燒錄器把仿真好,編譯好的可執(zhí)行文件燒錄到芯片89C51中,以前都沒有接觸到仿真器,燒錄器,現(xiàn)在由于自己的興趣,自己花錢把這些開發(fā)設(shè)備買回來并且已經(jīng)學(xué)會使用?傊,通過這次畢業(yè)設(shè)計,獲益甚豐。 參考資料: 1)李全利 主編. 單片機(jī)原理及應(yīng)用技術(shù). 北京.高等教育出版社, 2001 2)吳金戌 沈慶陽 郭庭古 主編. 8051單片機(jī)實(shí)踐與應(yīng)用. 北京. 清華大學(xué)出版社, 2002 3)陳明熒 主編. 8051單片機(jī)課程設(shè)計實(shí)訓(xùn)教材. 北京. 清華大學(xué)出版社, 2004 4)余孟嘗 主編. 模擬,數(shù)字及電力電子技術(shù). 北京. 機(jī)械工業(yè)出版社, 1999年 致謝: 感謝管利銳老師這一年多來的指導(dǎo),讓我不但掌握單片機(jī)的基本知識,而且對單片機(jī)產(chǎn)生濃重的興趣,還要感謝陳慧敏老師,是她先教我們專業(yè)的匯編語言,讓我在調(diào)程序時少走許多彎路。感謝我的同事李文化,余興社,是他們提供電腦和相機(jī)讓我完成這份畢業(yè)設(shè)計。
|