找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2663|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速 畢業(yè)設(shè)計(jì)論文下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140725 發(fā)表于 2016-10-18 14:26 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
完整的畢業(yè)設(shè)計(jì)下載:
按鍵設(shè)定步進(jìn)馬達(dá)正逆轉(zhuǎn),轉(zhuǎn)數(shù)及轉(zhuǎn)速.doc (791.5 KB, 下載次數(shù): 11)

   今天無(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ò)程(圖片)
.. 仿真
.燒錄                                        四.作品
            
第三章 功能說(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)直流電源插口。
如圖所指示:


第五章 控制程序
第一節(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é)程序流程圖

第三節(jié) 程序清單
  1. ORG 00H                    主程序入口地址
  2. LJMP START         
  3. ORG 03H                    外部中斷INT0子程序入口地址
  4. LJMP EXT0
  5. ORG 13H                    外部中斷INT1子程序入口地址
  6. LJMP EXT1

  7. START:CLR P2.6            正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
  8. MOV R5,#01H              R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
  9. MOV IE,#85H              INT0,INT1中斷使能
  10. MOV IP,#00H               同級(jí)中斷:先按先中斷
  11. MOV TCON,#00H           INT0,INT1為電平觸發(fā)
  12. MOV SP,#70H               設(shè)定堆棧在70H地址

  13. SETB P2.5                  不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
  14. CLR P2.4                   片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
  15. CLR P2.2                   8255(1)復(fù)位
  16. SETB P2.2
  17. CLR P2.2
  18. SETB P2.0                 A0=1,A1=1,8255控制寄存器地址
  19. SETB P2.1
  20. MOV A,#80H                設(shè)8255(1)PA,PB,PC口為輸出口
  21. MOVX @R0,A
  22. SETB P2.5                 不選8255(2)
  23. CLR P2.4                   選8255(1)
  24. CLR P2.0                   選A口
  25. CLR P2.1
  26. MOV A,#0FFH             熄滅A口的8個(gè)發(fā)光二極管  
  27. MOVX @R0,A

  28. SETB P2.0                  選B口
  29. CLR P2.1
  30. MOV A,#0FFH              熄滅B口的8個(gè)發(fā)光二極管  
  31. MOVX @R0,A

  32. CLR P2.0                 選C口
  33. SETB P2.1
  34. MOV A,#0FFH             熄滅C口的8個(gè)發(fā)光二極管  
  35. MOVX @R0,A


  36. SETB P2.4                   不選8255(1)
  37. CLR P2.5                    片選8255(2)
  38. CLR P2.3                    8255(2)復(fù)位
  39. SETB P2.3            
  40. CLR P2.3
  41. SETB P2.0                  A0=1,A1=1 8255控制寄存器地址
  42. SETB P2.1
  43. MOV A,#88H               PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
  44. MOVX @R0,A

  45. MOV 30H,#01H             轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
  46. MOV 31H,#00H              轉(zhuǎn)數(shù)十位顯示寄存器顯示0

  47. MIAN:JNB P3.4,SET2       是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
  48. JNB P3.5,SET1              是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
  49. JNB P2.7,SET3              是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)

  50. CALL DISP                 調(diào)用顯示程序
  51. JNB P3.0,LOOP1            是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
  52. JMP MIAN

  53. SET3:CALL DELAY1        消除抖動(dòng)
  54. JNB P2.7,[code]ORG 00H                    主程序入口地址
  55. LJMP START         
  56. ORG 03H                    外部中斷INT0子程序入口地址
  57. LJMP EXT0
  58. ORG 13H                    外部中斷INT1子程序入口地址
  59. LJMP EXT1

  60. START:CLR P2.6            正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
  61. MOV R5,#01H              R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
  62. MOV IE,#85H              INT0,INT1中斷使能
  63. MOV IP,#00H               同級(jí)中斷:先按先中斷
  64. MOV TCON,#00H           INT0,INT1為電平觸發(fā)
  65. MOV SP,#70H               設(shè)定堆棧在70H地址

  66. SETB P2.5                  不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
  67. CLR P2.4                   片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
  68. CLR P2.2                   8255(1)復(fù)位
  69. SETB P2.2
  70. CLR P2.2
  71. SETB P2.0                 A0=1,A1=1,8255控制寄存器地址
  72. SETB P2.1
  73. MOV A,#80H                設(shè)8255(1)PA,PB,PC口為輸出口
  74. MOVX @R0,A
  75. SETB P2.5                 不選8255(2)
  76. CLR P2.4                   選8255(1)
  77. CLR P2.0                   選A口
  78. CLR P2.1
  79. MOV A,#0FFH             熄滅A口的8個(gè)發(fā)光二極管  
  80. MOVX @R0,A

  81. SETB P2.0                  選B口
  82. CLR P2.1
  83. MOV A,#0FFH              熄滅B口的8個(gè)發(fā)光二極管  
  84. MOVX @R0,A

  85. CLR P2.0                 選C口
  86. SETB P2.1
  87. MOV A,#0FFH             熄滅C口的8個(gè)發(fā)光二極管  
  88. MOVX @R0,A


  89. SETB P2.4                   不選8255(1)
  90. CLR P2.5                    片選8255(2)
  91. CLR P2.3                    8255(2)復(fù)位
  92. SETB P2.3            
  93. CLR P2.3
  94. SETB P2.0                  A0=1,A1=1 8255控制寄存器地址
  95. SETB P2.1
  96. MOV A,#88H               PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
  97. MOVX @R0,A

  98. MOV 30H,#01H             轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
  99. MOV 31H,#00H              轉(zhuǎn)數(shù)十位顯示寄存器顯示0

  100. MIAN:JNB P3.4,SET2       是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
  101. JNB P3.5,SET1              是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
  102. JNB P2.7,SET3              是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)

  103. CALL DISP                 調(diào)用顯示程序
  104. JNB P3.0,LOOP1            是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
  105. JMP MIAN

  106. SET3:CALL DELAY1        消除抖動(dòng)
  107. JNB P2.7,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K1是否放開?是則往下執(zhí)行
  108. CPL P2.6                  設(shè)定正逆轉(zhuǎn)
  109. JMP MIAN

  110. SET2:CALL DELAY1         消除抖動(dòng)
  111. JNB P3.4,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K4是否放開?是則往下執(zhí)行
  112. INC 31H                    數(shù)十位顯示加1
  113. MOV A,31H               
  114. CJNE A,#0AH,D6           加1后是否超過(guò)9,不是則返回主程序
  115. MOV 31H,#00H             是則先把十位顯示清0再返回
  116. D6:JMP MIAN

  117. SET1:CALL DELAY1       消除抖動(dòng)
  118. JNB P3.5,[        DISCUZ_CODE_2        ]nbsp;                按鍵K5是否放開?是則往下執(zhí)行
  119. INC 30H                  轉(zhuǎn)數(shù)個(gè)位加1
  120. MOV A,30H
  121. CJNE A,#0AH,D7            加1后是否超過(guò)9,不是則返回主程序
  122. MOV 30H,#00H             是則先把個(gè)位顯示清0再返回
  123. D7:JMP MIAN

  124. DISP:MOV A,R5           顯示轉(zhuǎn)速
  125. MOV P1,A
  126. MOV A,31H       顯示轉(zhuǎn)數(shù)
  127. SWAP A
  128. ORL A,30H

  129. SETB P2.4         通過(guò)8255(2)顯示轉(zhuǎn)數(shù)
  130. CLR P2.5
  131. SETB P2.0
  132. CLR P2.1

  133. MOVX @R0,A
  134. RET
  135. D15:JMP LOOP2      
  136. LOOP1:CALL DELAY1     消除抖動(dòng)
  137. JNB P3.0,[        DISCUZ_CODE_2        ]nbsp;              K6啟動(dòng)鍵是否放開
  138. JNB P2.6,D15             判斷正逆轉(zhuǎn)  LOOP1              為正轉(zhuǎn)
  139.                         LOOP為逆轉(zhuǎn)
  140. LOOP:CALL DISP       轉(zhuǎn)完一圈后更新相關(guān)顯示

  141. MOV A,30H            判斷轉(zhuǎn)數(shù)是否為0,是則停止運(yùn)行,否則繼續(xù)運(yùn)行
  142. JZ D10
  143. DEC 30H
  144. JMP D14
  145. D10:MOV A,31H
  146. JZ D11                  D11程序入口為JMP MIAN
  147. DEC 31H
  148. MOV 30H,#09H

  149. D14:SETB P2.5      片選8255(1)
  150. CLR P2.4
  151. CLR P2.0            選A口
  152. CLR P2.1
  153. MOV R4,#08H     依次顯示
  154. MOV A,#0FEH
  155. D3:MOVX @R0,A
  156. CALL DELAY          控制轉(zhuǎn)速
  157. RL A
  158. DJNZ R4,D3
  159. MOV A,#0FFH    A口的8個(gè)發(fā)光二極管亮過(guò)后,把所有的A口等滅掉,為下一個(gè)亮B口做準(zhǔn)備
  160. MOVX @R0,A

  161. SETB P2.0        選B口,以下的程序與A口相類似
  162. CLR P2.1
  163. MOV R4,#08H
  164. MOV A,#0FEH
  165. D4:MOVX @R0,A
  166. CALL DELAY
  167. RL A
  168. DJNZ R4,D4
  169. MOV A,#0FFH
  170. MOVX @R0,A

  171. CLR P2.0
  172. SETB P2.1
  173. MOV R4,#08H
  174. MOV A,#0FEH
  175. D5:MOVX @R0,A
  176. CALL DELAY
  177. RL A
  178. DJNZ R4,D5
  179. MOV A,#0FFH
  180. MOVX @R0,A

  181. JMP LOOP
  182. D11:JMP MIAN

  183. LOOP2:CALL DISP    正轉(zhuǎn),程序與逆轉(zhuǎn)相類似。

  184. MOV A,30H
  185. JZ D16
  186. DEC 30H
  187. JMP D17
  188. D16:MOV A,31H
  189. JZ D11
  190. DEC 31H
  191. MOV 30H,#09H

  192. D17:SETB P2.5
  193. CLR P2.4
  194. CLR P2.0
  195. SETB P2.1
  196. MOV R4,#08H
  197. MOV A,#7FH
  198. D18:MOVX @R0,A
  199. CALL DELAY
  200. RR A
  201. DJNZ R4,D18
  202. MOV A,#0FFH
  203. MOVX @R0,A

  204. SETB P2.0
  205. CLR P2.1
  206. MOV R4,#08H
  207. MOV A,#7FH
  208. D19:MOVX @R0,A
  209. CALL DELAY
  210. RR A
  211. DJNZ R4,D19
  212. MOV A,#0FFH
  213. MOVX @R0,A

  214. CLR P2.0
  215. CLR P2.1
  216. MOV R4,#08H
  217. MOV A,#7FH
  218. D20:MOVX @R0,A
  219. CALL DELAY
  220. RR A
  221. DJNZ R4,D20
  222. MOV A,#0FFH
  223. MOVX @R0,A

  224. JMP LOOP2

  225. DELAY:MOV 33H,R6  該延時(shí)用于控制轉(zhuǎn)速
  226. MOV R7,33H
  227. D1:MOV R2,#0FH
  228. D2:MOV R3,#0FFH
  229. DJNZ R3,$
  230. DJNZ R2,D2
  231. DJNZ R7,D1
  232. RET
  233. DELAY1:MOV R3,#02H   該延時(shí)用于消除抖動(dòng)
  234. D9:MOV R1,#0FFH
  235. D8:MOV R2,#0FFH
  236. DJNZ R2,$
  237. DJNZ R1,D8
  238. DJNZ R3,D9
  239. RET

  240. EXT0:CALL DELAY1      中斷INT0的入口,用于加速
  241. PUSH ACC
  242. PUSH PSW

  243. INC R5             R5為顯示寄存器顯示轉(zhuǎn)速檔

  244. DEC R6            R6是控制轉(zhuǎn)速延時(shí)的參數(shù)。R5每加1檔,則R6就減1,則延時(shí)就更短,速度更快
  245. MOV A,R5
  246. CJNE A,#0AH,D12
  247. MOV R5,#01H
  248. MOV R6,#09H
  249. D12:POP PSW
  250. POP ACC
  251. RETI

  252. EXT1:CALL DELAY1     中斷INT1的入口,用于減速
  253. PUSH ACC
  254. PUSH PSW

  255. DEC R5            

  256. INC R6
  257. MOV A,R5
  258. JNZ D13
  259. MOV R5,#09H
  260. MOV R6,#01H

  261. D13:POP PSW
  262. POP ACC
  263. RETI
  264. END
復(fù)制代碼
nbsp;                 按鍵K1是否放開?是則往下執(zhí)行
CPL P2.6                  設(shè)定正逆轉(zhuǎn)
JMP MIAN

SET2:CALL DELAY1         消除抖動(dòng)
JNB P3.4,
  1. ORG 00H                    主程序入口地址
  2. LJMP START         
  3. ORG 03H                    外部中斷INT0子程序入口地址
  4. LJMP EXT0
  5. ORG 13H                    外部中斷INT1子程序入口地址
  6. LJMP EXT1

  7. START:CLR P2.6            正逆轉(zhuǎn)指示燈亮,表示開機(jī)默認(rèn)為正轉(zhuǎn)
  8. MOV R5,#01H              R5為轉(zhuǎn)速顯示寄存器,開機(jī)默認(rèn)為第1檔轉(zhuǎn)速
  9. MOV IE,#85H              INT0,INT1中斷使能
  10. MOV IP,#00H               同級(jí)中斷:先按先中斷
  11. MOV TCON,#00H           INT0,INT1為電平觸發(fā)
  12. MOV SP,#70H               設(shè)定堆棧在70H地址

  13. SETB P2.5                  不選8255(2):8255(1)用來(lái)控制顯示轉(zhuǎn)數(shù)
  14. CLR P2.4                   片選8255(1):8255(1)用來(lái)驅(qū)動(dòng)24個(gè)發(fā)光二極管
  15. CLR P2.2                   8255(1)復(fù)位
  16. SETB P2.2
  17. CLR P2.2
  18. SETB P2.0                 A0=1,A1=1,8255控制寄存器地址
  19. SETB P2.1
  20. MOV A,#80H                設(shè)8255(1)PA,PB,PC口為輸出口
  21. MOVX @R0,A
  22. SETB P2.5                 不選8255(2)
  23. CLR P2.4                   選8255(1)
  24. CLR P2.0                   選A口
  25. CLR P2.1
  26. MOV A,#0FFH             熄滅A口的8個(gè)發(fā)光二極管  
  27. MOVX @R0,A

  28. SETB P2.0                  選B口
  29. CLR P2.1
  30. MOV A,#0FFH              熄滅B口的8個(gè)發(fā)光二極管  
  31. MOVX @R0,A

  32. CLR P2.0                 選C口
  33. SETB P2.1
  34. MOV A,#0FFH             熄滅C口的8個(gè)發(fā)光二極管  
  35. MOVX @R0,A


  36. SETB P2.4                   不選8255(1)
  37. CLR P2.5                    片選8255(2)
  38. CLR P2.3                    8255(2)復(fù)位
  39. SETB P2.3            
  40. CLR P2.3
  41. SETB P2.0                  A0=1,A1=1 8255控制寄存器地址
  42. SETB P2.1
  43. MOV A,#88H               PC0口---PC3,PB0口為輸出口,PC4—PC7為輸入口
  44. MOVX @R0,A

  45. MOV 30H,#01H             轉(zhuǎn)數(shù)個(gè)位顯示寄存器顯示1,
  46. MOV 31H,#00H              轉(zhuǎn)數(shù)十位顯示寄存器顯示0

  47. MIAN:JNB P3.4,SET2       是否按按鍵K4,是則跳到子程序SET2:轉(zhuǎn)數(shù)十位數(shù)加1
  48. JNB P3.5,SET1              是否按按鍵K5,是則跳到子程序SET1:轉(zhuǎn)數(shù)個(gè)位數(shù)加1
  49. JNB P2.7,SET3              是否按按鍵K1,是則跳到子程序SET3:設(shè)定正逆轉(zhuǎn)

  50. CALL DISP                 調(diào)用顯示程序
  51. JNB P3.0,LOOP1            是否按啟動(dòng)按鍵K6,是則啟動(dòng)步進(jìn)馬達(dá)
  52. JMP MIAN

  53. SET3:CALL DELAY1        消除抖動(dòng)
  54. JNB P2.7,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K1是否放開?是則往下執(zhí)行
  55. CPL P2.6                  設(shè)定正逆轉(zhuǎn)
  56. JMP MIAN

  57. SET2:CALL DELAY1         消除抖動(dòng)
  58. JNB P3.4,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K4是否放開?是則往下執(zhí)行
  59. INC 31H                    數(shù)十位顯示加1
  60. MOV A,31H               
  61. CJNE A,#0AH,D6           加1后是否超過(guò)9,不是則返回主程序
  62. MOV 31H,#00H             是則先把十位顯示清0再返回
  63. D6:JMP MIAN

  64. SET1:CALL DELAY1       消除抖動(dòng)
  65. JNB P3.5,[        DISCUZ_CODE_2        ]nbsp;                按鍵K5是否放開?是則往下執(zhí)行
  66. INC 30H                  轉(zhuǎn)數(shù)個(gè)位加1
  67. MOV A,30H
  68. CJNE A,#0AH,D7            加1后是否超過(guò)9,不是則返回主程序
  69. MOV 30H,#00H             是則先把個(gè)位顯示清0再返回
  70. D7:JMP MIAN

  71. DISP:MOV A,R5           顯示轉(zhuǎn)速
  72. MOV P1,A
  73. MOV A,31H       顯示轉(zhuǎn)數(shù)
  74. SWAP A
  75. ORL A,30H

  76. SETB P2.4         通過(guò)8255(2)顯示轉(zhuǎn)數(shù)
  77. CLR P2.5
  78. SETB P2.0
  79. CLR P2.1

  80. MOVX @R0,A
  81. RET
  82. D15:JMP LOOP2      
  83. LOOP1:CALL DELAY1     消除抖動(dòng)
  84. JNB P3.0,[        DISCUZ_CODE_2        ]nbsp;              K6啟動(dòng)鍵是否放開
  85. JNB P2.6,D15             判斷正逆轉(zhuǎn)  LOOP1              為正轉(zhuǎn)
  86.                         LOOP為逆轉(zhuǎn)
  87. LOOP:CALL DISP       轉(zhuǎn)完一圈后更新相關(guān)顯示

  88. MOV A,30H            判斷轉(zhuǎn)數(shù)是否為0,是則停止運(yùn)行,否則繼續(xù)運(yùn)行
  89. JZ D10
  90. DEC 30H
  91. JMP D14
  92. D10:MOV A,31H
  93. JZ D11                  D11程序入口為JMP MIAN
  94. DEC 31H
  95. MOV 30H,#09H

  96. D14:SETB P2.5      片選8255(1)
  97. CLR P2.4
  98. CLR P2.0            選A口
  99. CLR P2.1
  100. MOV R4,#08H     依次顯示
  101. MOV A,#0FEH
  102. D3:MOVX @R0,A
  103. CALL DELAY          控制轉(zhuǎn)速
  104. RL A
  105. DJNZ R4,D3
  106. MOV A,#0FFH    A口的8個(gè)發(fā)光二極管亮過(guò)后,把所有的A口等滅掉,為下一個(gè)亮B口做準(zhǔn)備
  107. MOVX @R0,A

  108. SETB P2.0        選B口,以下的程序與A口相類似
  109. CLR P2.1
  110. MOV R4,#08H
  111. MOV A,#0FEH
  112. D4:MOVX @R0,A
  113. CALL DELAY
  114. RL A
  115. DJNZ R4,D4
  116. MOV A,#0FFH
  117. MOVX @R0,A

  118. CLR P2.0
  119. SETB P2.1
  120. MOV R4,#08H
  121. MOV A,#0FEH
  122. D5:MOVX @R0,A
  123. CALL DELAY
  124. RL A
  125. DJNZ R4,D5
  126. MOV A,#0FFH
  127. MOVX @R0,A

  128. JMP LOOP
  129. D11:JMP MIAN

  130. LOOP2:CALL DISP    正轉(zhuǎn),程序與逆轉(zhuǎn)相類似。

  131. MOV A,30H
  132. JZ D16
  133. DEC 30H
  134. JMP D17
  135. D16:MOV A,31H
  136. JZ D11
  137. DEC 31H
  138. MOV 30H,#09H

  139. D17:SETB P2.5
  140. CLR P2.4
  141. CLR P2.0
  142. SETB P2.1
  143. MOV R4,#08H
  144. MOV A,#7FH
  145. D18:MOVX @R0,A
  146. CALL DELAY
  147. RR A
  148. DJNZ R4,D18
  149. MOV A,#0FFH
  150. MOVX @R0,A

  151. SETB P2.0
  152. CLR P2.1
  153. MOV R4,#08H
  154. MOV A,#7FH
  155. D19:MOVX @R0,A
  156. CALL DELAY
  157. RR A
  158. DJNZ R4,D19
  159. MOV A,#0FFH
  160. MOVX @R0,A

  161. CLR P2.0
  162. CLR P2.1
  163. MOV R4,#08H
  164. MOV A,#7FH
  165. D20:MOVX @R0,A
  166. CALL DELAY
  167. RR A
  168. DJNZ R4,D20
  169. MOV A,#0FFH
  170. MOVX @R0,A

  171. JMP LOOP2

  172. DELAY:MOV 33H,R6  該延時(shí)用于控制轉(zhuǎn)速
  173. MOV R7,33H
  174. D1:MOV R2,#0FH
  175. D2:MOV R3,#0FFH
  176. DJNZ R3,$
  177. DJNZ R2,D2
  178. DJNZ R7,D1
  179. RET
  180. DELAY1:MOV R3,#02H   該延時(shí)用于消除抖動(dòng)
  181. D9:MOV R1,#0FFH
  182. D8:MOV R2,#0FFH
  183. DJNZ R2,$
  184. DJNZ R1,D8
  185. DJNZ R3,D9
  186. RET

  187. EXT0:CALL DELAY1      中斷INT0的入口,用于加速
  188. PUSH ACC
  189. PUSH PSW

  190. INC R5             R5為顯示寄存器顯示轉(zhuǎn)速檔

  191. DEC R6            R6是控制轉(zhuǎn)速延時(shí)的參數(shù)。R5每加1檔,則R6就減1,則延時(shí)就更短,速度更快
  192. MOV A,R5
  193. CJNE A,#0AH,D12
  194. MOV R5,#01H
  195. MOV R6,#09H
  196. D12:POP PSW
  197. POP ACC
  198. RETI

  199. EXT1:CALL DELAY1     中斷INT1的入口,用于減速
  200. PUSH ACC
  201. PUSH PSW

  202. DEC R5            

  203. INC R6
  204. MOV A,R5
  205. JNZ D13
  206. MOV R5,#09H
  207. MOV R6,#01H

  208. D13:POP PSW
  209. POP ACC
  210. RETI
  211. 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ì)。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表