找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2603|回复: 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 单片机教程网

快速回复 返回顶部 返回列表