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