久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2679|回復: 0
打印 上一主題 下一主題
收起左側

按鍵設定步進馬達正逆轉,轉數及轉速 畢業設計論文下載

[復制鏈接]
跳轉到指定樓層
樓主
完整的畢業設計下載:
按鍵設定步進馬達正逆轉,轉數及轉速.doc (791.5 KB, 下載次數: 11)

   今天無意中看到了我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,分別接到兩個按鍵,用來設定轉速,并在綠色的數碼管顯示轉速檔。與其它的設置不同的是,由于設置轉速檔是用到兩個外部中斷,所以,無論馬達是停止還是運行都可以隨時改變其速度。
第二 實物制作過程(圖片)
.. 仿真
.燒錄                                        四.作品
            
第三章 功能說明
(一)  正逆轉。矩形指示燈亮表示正轉,滅表示逆轉。指示燈下面對應的是按鍵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安的交流轉直流電源插口。
如圖所指示:


第五章 控制程序
第一節程序說明
START  主要用于初始化
MIAN   用于主程序掃描按鍵
SET1   用于轉數個位數加1
SET2   用于轉數十位數加1
SET3   設定正逆轉
LOOP1  正轉
LOOP   逆轉
DELAY  用來控制轉速
DELAY1  用來消除抖動
EXT0    外部中斷子程序INT0的中斷入口
EXT1    外部中斷子程序INT1的中斷入口
R5    為轉速的顯示寄存器
30H,31H  為轉數的顯示地址
第二節程序流程圖

第三節 程序清單
  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            正逆轉指示燈亮,表示開機默認為正轉
  8. MOV R5,#01H              R5為轉速顯示寄存器,開機默認為第1檔轉速
  9. MOV IE,#85H              INT0,INT1中斷使能
  10. MOV IP,#00H               同級中斷:先按先中斷
  11. MOV TCON,#00H           INT0,INT1為電平觸發
  12. MOV SP,#70H               設定堆棧在70H地址

  13. SETB P2.5                  不選8255(2):8255(1)用來控制顯示轉數
  14. CLR P2.4                   片選8255(1):8255(1)用來驅動24個發光二極管
  15. CLR P2.2                   8255(1)復位
  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                設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個發光二極管  
  27. MOVX @R0,A

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

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


  36. SETB P2.4                   不選8255(1)
  37. CLR P2.5                    片選8255(2)
  38. CLR P2.3                    8255(2)復位
  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             轉數個位顯示寄存器顯示1,
  46. MOV 31H,#00H              轉數十位顯示寄存器顯示0

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

  50. CALL DISP                 調用顯示程序
  51. JNB P3.0,LOOP1            是否按啟動按鍵K6,是則啟動步進馬達
  52. JMP MIAN

  53. SET3:CALL DELAY1        消除抖動
  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            正逆轉指示燈亮,表示開機默認為正轉
  61. MOV R5,#01H              R5為轉速顯示寄存器,開機默認為第1檔轉速
  62. MOV IE,#85H              INT0,INT1中斷使能
  63. MOV IP,#00H               同級中斷:先按先中斷
  64. MOV TCON,#00H           INT0,INT1為電平觸發
  65. MOV SP,#70H               設定堆棧在70H地址

  66. SETB P2.5                  不選8255(2):8255(1)用來控制顯示轉數
  67. CLR P2.4                   片選8255(1):8255(1)用來驅動24個發光二極管
  68. CLR P2.2                   8255(1)復位
  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                設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個發光二極管  
  80. MOVX @R0,A

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

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


  89. SETB P2.4                   不選8255(1)
  90. CLR P2.5                    片選8255(2)
  91. CLR P2.3                    8255(2)復位
  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             轉數個位顯示寄存器顯示1,
  99. MOV 31H,#00H              轉數十位顯示寄存器顯示0

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

  103. CALL DISP                 調用顯示程序
  104. JNB P3.0,LOOP1            是否按啟動按鍵K6,是則啟動步進馬達
  105. JMP MIAN

  106. SET3:CALL DELAY1        消除抖動
  107. JNB P2.7,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K1是否放開?是則往下執行
  108. CPL P2.6                  設定正逆轉
  109. JMP MIAN

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

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

  124. DISP:MOV A,R5           顯示轉速
  125. MOV P1,A
  126. MOV A,31H       顯示轉數
  127. SWAP A
  128. ORL A,30H

  129. SETB P2.4         通過8255(2)顯示轉數
  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     消除抖動
  137. JNB P3.0,[        DISCUZ_CODE_2        ]nbsp;              K6啟動鍵是否放開
  138. JNB P2.6,D15             判斷正逆轉  LOOP1              為正轉
  139.                         LOOP為逆轉
  140. LOOP:CALL DISP       轉完一圈后更新相關顯示

  141. MOV A,30H            判斷轉數是否為0,是則停止運行,否則繼續運行
  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          控制轉速
  157. RL A
  158. DJNZ R4,D3
  159. MOV A,#0FFH    A口的8個發光二極管亮過后,把所有的A口等滅掉,為下一個亮B口做準備
  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    正轉,程序與逆轉相類似。

  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  該延時用于控制轉速
  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   該延時用于消除抖動
  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為顯示寄存器顯示轉速檔

  244. DEC R6            R6是控制轉速延時的參數。R5每加1檔,則R6就減1,則延時就更短,速度更快
  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
復制代碼
nbsp;                 按鍵K1是否放開?是則往下執行
CPL P2.6                  設定正逆轉
JMP MIAN

SET2:CALL DELAY1         消除抖動
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            正逆轉指示燈亮,表示開機默認為正轉
  8. MOV R5,#01H              R5為轉速顯示寄存器,開機默認為第1檔轉速
  9. MOV IE,#85H              INT0,INT1中斷使能
  10. MOV IP,#00H               同級中斷:先按先中斷
  11. MOV TCON,#00H           INT0,INT1為電平觸發
  12. MOV SP,#70H               設定堆棧在70H地址

  13. SETB P2.5                  不選8255(2):8255(1)用來控制顯示轉數
  14. CLR P2.4                   片選8255(1):8255(1)用來驅動24個發光二極管
  15. CLR P2.2                   8255(1)復位
  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                設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個發光二極管  
  27. MOVX @R0,A

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

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


  36. SETB P2.4                   不選8255(1)
  37. CLR P2.5                    片選8255(2)
  38. CLR P2.3                    8255(2)復位
  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             轉數個位顯示寄存器顯示1,
  46. MOV 31H,#00H              轉數十位顯示寄存器顯示0

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

  50. CALL DISP                 調用顯示程序
  51. JNB P3.0,LOOP1            是否按啟動按鍵K6,是則啟動步進馬達
  52. JMP MIAN

  53. SET3:CALL DELAY1        消除抖動
  54. JNB P2.7,[        DISCUZ_CODE_2        ]nbsp;                 按鍵K1是否放開?是則往下執行
  55. CPL P2.6                  設定正逆轉
  56. JMP MIAN

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

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

  71. DISP:MOV A,R5           顯示轉速
  72. MOV P1,A
  73. MOV A,31H       顯示轉數
  74. SWAP A
  75. ORL A,30H

  76. SETB P2.4         通過8255(2)顯示轉數
  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     消除抖動
  84. JNB P3.0,[        DISCUZ_CODE_2        ]nbsp;              K6啟動鍵是否放開
  85. JNB P2.6,D15             判斷正逆轉  LOOP1              為正轉
  86.                         LOOP為逆轉
  87. LOOP:CALL DISP       轉完一圈后更新相關顯示

  88. MOV A,30H            判斷轉數是否為0,是則停止運行,否則繼續運行
  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          控制轉速
  104. RL A
  105. DJNZ R4,D3
  106. MOV A,#0FFH    A口的8個發光二極管亮過后,把所有的A口等滅掉,為下一個亮B口做準備
  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    正轉,程序與逆轉相類似。

  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  該延時用于控制轉速
  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   該延時用于消除抖動
  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為顯示寄存器顯示轉速檔

  191. DEC R6            R6是控制轉速延時的參數。R5每加1檔,則R6就減1,則延時就更短,速度更快
  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
復制代碼
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年
致謝
      感謝管利銳老師這一年多來的指導,讓我不但掌握單片機的基本知識,而且對單片機產生濃重的興趣,還要感謝陳慧敏老師,是她先教我們專業的匯編語言,讓我在調程序時少走許多彎路。感謝我的同事李文化,余興社,是他們提供電腦和相機讓我完成這份畢業設計。

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91传媒在线观看 | 国产精品自拍一区 | 毛片站 | 久久久免费电影 | 美女黄色在线观看 | 涩涩视频大全 | 999久久久久久久久6666 | 国产精品99一区二区 | 亚洲国产精品视频一区 | 国产色爽 | 国产三级 | 国产免费黄网 | 91在线免费视频 | 91亚洲精品在线观看 | 欧美国产精品久久久 | 久久中文字幕一区 | 国产精品区二区三区日本 | 欧美福利专区 | 精品久久一区二区三区 | 国产精品亚洲片在线播放 | 午夜精品一区二区三区在线视频 | 午夜男人天堂 | 在线播放精品视频 | 国产精彩视频 | 日本午夜免费福利视频 | 播放一级毛片 | 精品一区二区三区在线观看 | 日韩欧美一区二区在线播放 | 找个黄色片 | 麻豆精品久久久 | av天天看| 中文字幕亚洲在线 | 午夜精品一区二区三区在线观看 | 欧美在线一区二区三区四区 | 欧美一级片 | 中文在线观看视频 | 精品九九 | 黄色免费av | 欧美男人天堂 | 中文字幕在线观看一区二区 | 国产欧美一区二区精品忘忧草 |