我很早前玩的,你可以看看好了
- 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
复制代码
最佳答案
|
|
2015-9-21 19:41:35
评论
举报
|
|
|