专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
如何用51单片机驱动2相4线步进电机
2019-07-15 16:04
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
12528
8
986
电机驱动
芯片
用的是ULN2003,输入的4个线接
单片机
,输出多一个线怎么接,求接线方法及C程序、、、、、、、、、、、
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
vivatakethat
2019-07-15 18:05
我很早前玩的,你可以看看好了
ENA EQU P1.0 ENB EQU P1.1 IN1 EQU P1.2 IN2 EQU P1.3 IN3 EQU P1.4 IN4 EQU P1.5 SWITCH EQU P3.3 FAST EQU P3.6 SLOW EQU P3.5
CYCLENUM EQU 50H ;存放对应定时循环次数
TEMP EQU 53H ;存放按键次数。初值为5,每按加速叠加1,按减速递减 MARK EQU 56H ;启动停止标识 LEDBUF EQU 57H
ORG 0 AJMP START
;*****************检测是否开启启动电机键*************************** START:
MOV P0,#0 ;清显示
SETB MARK ;预启动电机工作,标识为1 MOV TEMP,#5 ;开始工作于5Hz MOV CYCLENUM,#01H ;循环1次 JNB SWITCH,NEXT ;按键按下? SJMP START ;没有返回继续检测 NEXT:
CALL DELAY ;消抖确认
JNB SWITCH,MAIN ;再次确认按键,不为1说明按键按下 SJMP START ;没有按下,继续检测
;*****************开始运行电机*************************************** MAIN:
MOV A,TEMP MOV DPTR,#TAB4 MOVC A,@A+DPTR MOV LEDBUF,A ;送显示 CALL DISPLAY LOOP:
JB MARK,WORK ;检测运行标识是否为1,为1则继续运行,为0则停止运行 NOTWORK: CLR ENA CLR ENB SJMP START WORK:
MOV P1,#000010111B ;步进电机运行方式为两相四拍 CALL TIMER CALL TESTSTOP
MOV P1,#000011011B ;第二拍 CALL TIMER CALL TESTSTOP
MOV P1,#000101011B ;第三拍 CALL TIMER CALL TESTSTOP
MOV P1,#000100111B ;第四拍 CALL TIMER CALL TESTSTOP CALL TESTKEY SJMP MAIN
;***************************检测是否有按键按下************************ TESTKEY: SETB FAST SETB SLOW
NEXT1:
JNB FAST,YES2 NEXT2:
JNB SLOW,YES3
SJMP RETURN ;都没有键按下,则返回
YES2:
MOV A,TEMP ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加1 CJNE A,#9,CANFAST DEC A
CANFAST: INC A MOV TEMP,A SJMP RETURN
YES3:
MOV A,TEMP CJNE A,#1,CANSLOW INC A
CANSLOW: DEC A MOV TEMP,A
RETURN: RET
TESTSTOP: SETB SWITCH JNB SWITCH,GO SJMP ENND GO:
CALL DELAY
JNB SWITCH,YESSTOP SJMP ENND YESSTOP: CPL MARK
ENND: RET
;***********************定时器设置******************* TIMER:
MOV TMOD,#10H ;T1工作于定时方式1 CALL TIMERSET SETB TR1 SETB EA
SETB ET1 ;启动定时器工作 WAIT:
JBC TF1,HERE
SJMP WAIT ;定时未到继续等待 HERE:
DJNZ CYCLENUM,TIMER ;循环次数未满继续定时 MOV A,TEMP MOV DPTR,#TAB3 MOVC A,@A+DPTR MOV CYCLENUM,A RET
TIMERSET: MOV A,TEMP
MOV DPTR,#TAB1 ;获取定时器高位 MOVC A,@A+DPTR
MOV TH1,A ;存放至定时器高位
MOV A,TEMP MOV DPTR,#TAB2
MOVC A,@A+DPTR ;获取定时器定位 MOV TL1,A ;存放至定时器低位
RET
;***********************50ms延时********************** DELAY:
MOV R0,#100 DL1:
MOV R1,#10 DJNZ R1,$ DJNZ R0,DL1 RET
;************显示子程序**************************** DISPLAY: CLR P2.7 CLR P2.6 CLR P2.5
SETB P2.4 ;关闭高三位,保留个位 MOV P0,LEDBUF RET
TAB1: DB 15H,0AH,07H,05H,04H,03H,03H,02H,02H ;定时器高位TH1 TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H ;定时器地位TL1 TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H ;循环次数CYCLENUM TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码显示0~9
复制代码
最佳答案
加载中...
查看其它8个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- ENA EQU P1.0 ENB EQU P1.1 IN1 EQU P1.2 IN2 EQU P1.3 IN3 EQU P1.4 IN4 EQU P1.5 SWITCH EQU P3.3 FAST EQU P3.6 SLOW EQU P3.5
-
-
-
- CYCLENUM EQU 50H ;存放对应定时循环次数
- TEMP EQU 53H ;存放按键次数。初值为5,每按加速叠加1,按减速递减 MARK EQU 56H ;启动停止标识 LEDBUF EQU 57H
-
- ORG 0 AJMP START
-
- ;*****************检测是否开启启动电机键*************************** START:
- MOV P0,#0 ;清显示
- SETB MARK ;预启动电机工作,标识为1 MOV TEMP,#5 ;开始工作于5Hz MOV CYCLENUM,#01H ;循环1次 JNB SWITCH,NEXT ;按键按下? SJMP START ;没有返回继续检测 NEXT:
- CALL DELAY ;消抖确认
- JNB SWITCH,MAIN ;再次确认按键,不为1说明按键按下 SJMP START ;没有按下,继续检测
-
- ;*****************开始运行电机*************************************** MAIN:
- MOV A,TEMP MOV DPTR,#TAB4 MOVC A,@A+DPTR MOV LEDBUF,A ;送显示 CALL DISPLAY LOOP:
- JB MARK,WORK ;检测运行标识是否为1,为1则继续运行,为0则停止运行 NOTWORK: CLR ENA CLR ENB SJMP START WORK:
- MOV P1,#000010111B ;步进电机运行方式为两相四拍 CALL TIMER CALL TESTSTOP
-
-
-
- MOV P1,#000011011B ;第二拍 CALL TIMER CALL TESTSTOP
-
- MOV P1,#000101011B ;第三拍 CALL TIMER CALL TESTSTOP
-
- MOV P1,#000100111B ;第四拍 CALL TIMER CALL TESTSTOP CALL TESTKEY SJMP MAIN
- ;***************************检测是否有按键按下************************ TESTKEY: SETB FAST SETB SLOW
-
- NEXT1:
- JNB FAST,YES2 NEXT2:
- JNB SLOW,YES3
- SJMP RETURN ;都没有键按下,则返回
-
- YES2:
- MOV A,TEMP ;FAST按下,若此时temp等于9,则保持速度不变,若小于则加1 CJNE A,#9,CANFAST DEC A
-
- CANFAST: INC A MOV TEMP,A SJMP RETURN
-
- YES3:
- MOV A,TEMP CJNE A,#1,CANSLOW INC A
-
-
- CANSLOW: DEC A MOV TEMP,A
-
- RETURN: RET
-
- TESTSTOP: SETB SWITCH JNB SWITCH,GO SJMP ENND GO:
- CALL DELAY
- JNB SWITCH,YESSTOP SJMP ENND YESSTOP: CPL MARK
-
- ENND: RET
- ;***********************定时器设置******************* TIMER:
- MOV TMOD,#10H ;T1工作于定时方式1 CALL TIMERSET SETB TR1 SETB EA
- SETB ET1 ;启动定时器工作 WAIT:
- JBC TF1,HERE
- SJMP WAIT ;定时未到继续等待 HERE:
- DJNZ CYCLENUM,TIMER ;循环次数未满继续定时 MOV A,TEMP MOV DPTR,#TAB3 MOVC A,@A+DPTR MOV CYCLENUM,A RET
-
- TIMERSET: MOV A,TEMP
-
-
- MOV DPTR,#TAB1 ;获取定时器高位 MOVC A,@A+DPTR
- MOV TH1,A ;存放至定时器高位
-
- MOV A,TEMP MOV DPTR,#TAB2
- MOVC A,@A+DPTR ;获取定时器定位 MOV TL1,A ;存放至定时器低位
-
- RET
- ;***********************50ms延时********************** DELAY:
- MOV R0,#100 DL1:
- MOV R1,#10 DJNZ R1,$ DJNZ R0,DL1 RET
-
-
- ;************显示子程序**************************** DISPLAY: CLR P2.7 CLR P2.6 CLR P2.5
- SETB P2.4 ;关闭高三位,保留个位 MOV P0,LEDBUF RET
-
- TAB1: DB 15H,0AH,07H,05H,04H,03H,03H,02H,02H ;定时器高位TH1 TAB2: DB 0B3H,0D9H,3BH,6CH,57H,0A5H,19H,0B6H,69H ;定时器地位TL1 TAB3: DB 01H,01H,01H,01H,01H,01H,01H,01H,01H ;循环次数CYCLENUM TAB4: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码显示0~9
复制代码 最佳答案一周热门 更多>