急需51单片机控制直流电机的流程、图 和程序 不要C语言 要 51单片机语言 有的请帮我一下吧 我可不希望被卡在学校不能毕业
可发邮件 [email protected] 谢谢 各位大虾了
查看文章
基于51单片机的直流电机调速程序(单片机课程设计所做)2008-10-25 12:44kg bit B.1 ;用来判断开机等待
t bit B.2 ;用来判断正反转,t=1正转,t=0反转
w bit B.3 ;用来辅助正反转判断,选择了就为1,不选则为0
KK1 BIT B.4 ;用来辅助加速按键,使其不用延时可以按一次速度指甲一档
KK2 BIT B.5 ;同上
cctv bit b.7 ;用来辅助中断显示程序计时
org 0000h
lJMP MAIN
ORG 000BH
LJMP CTC0
ORG 0034h
Graphemic: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,84H,0FFH;共阳0~9字型码
;PN1 EQU 30H ;PN1用来记脉冲的低二位数
;PN2 EQU 31H ;PN2用来记脉冲的高二位数
PN3 EQU 32H ;PN3用来做延时程序
PN4 EQU 33H ;PN4用来做延时程序
ORG 100H
MAIN:
MOV R6,#00H ;用R6来辅助显示计时
MOV B, #00H
CLR KG
CLR W
MOV TMOD,#01H ;T1和T0都是方式一计数
MOV TL0,#18H
MOV TH0,#0E0H
;MOV TL1, #0AFH
; MOV TH1, #3CH
SETB EA
SETB ET0 ;T0中断允许
SETB TR0
SETB P3.4
; SETB ET1 ;T1中断允许
;SETB TR1
SETB PT0 ;设置T1T2的中断优先,都设其为高级中断
; SETB PT1
MOV R1,#5H ;默认开始的时候速度为5档
SETB KK1
SETB KK2
MOV A,#00H ;把PN1,PN2都清零
;MOV PN1,A
; MOV PN2,A
MOV DPTR,#Graphemic
ANL P1,#0FH
;ANL P0,#00H
mainline:
jb p2.2,ks ;关机等待
clr w
clr kg
setb p1.0
setb p1.1
clr p1.2
clr p1.3
ks: jnb kg,wait ;是否开机?开了就往下执行,不开就跳到开机等待
ANL P1,#00011111B ;显示最后一位为1,即是可以工作了的意思
SETB P1.4
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
SPD2:
JB P2.1,KEY1
CLR KK1
KEY1: JNB P2.1,KEY2 ;当p2.1高电平时就往下执行,但是只要执行一次后,kk就为1,往后就不再执行
JB KK1, KEY2
INC R1
SETB KK1 ;这段的任务是不用延时也能消除按键抖动的程序
KEY2: JB P2.4,KEY3
CLR KK2
KEY3: JNB P2.4,pos
JB KK2, pos
SETB KK2
DEC R1
pos: jb p2.0,rev ;正转按钮
setb t
setb w
rev: jb p2.3,tt ;反转按钮
clr t
setb w
tt: jnb w,pos ;选择正反转了吗,选了电机就开始转了,不选电机就不转,等待正反转按钮
jb t,positive
jnb t,reverse
positive: ;电机正转
setb p1.0
clr p1.1
clr p1.2
setb p1.3
lcall BIJIAO0 ;PWM调制
; lcall ShowSpeed ;显示速度程序
LCALL showdigit1
Ljmp mainline
reverse: ;电机反转
clr p1.0
setb p1.1
setb p1.2
clr p1.3
lcall BIJIAO0 ;PWM调制
; lcall ShowSpeed ;显示速度程序
LCALL showdigit2
Ljmp mainline
wait: mov a,#00h ;如果不开始,那么程序就在这里等待,
mov p0,a
wait1: setb p0.6
setb p0.7
anl p1,#0fh
setb p1.4
setb p1.5
setb p1.6
setb p1.7
SETB P3.6
NOP
CLR P3.6
lcall delay
jb p2.5,wait1 ;开机等待
setb kg
Ljmp mainline
showdigit1:
ANL P1,#10001111B ;显示12在首位
SETB P1.7
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
ANL P1,#01001111B
SETB P1.6
MOV A,#2H
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
RET
showdigit2:
ANL P1,#10001111B ;显示21在首位
SETB P1.7
MOV A,#2H
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
ANL P1,#01001111B
SETB P1.6
MOV A,#1H
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
RET
BIJIAO0: MOV A,R1
SUBB A,#0H
JZ JJ0
BIJIAO1: MOV A,R1
SUBB A,#1H
JZ JJ1
BIJIAO2: MOV A,R1
SUBB A,#2H
JZ JJ2
BIJIAO3: MOV A,R1
SUBB A,#3H
JZ JJ3
BIJIAO4: MOV A,R1
SUBB A,#4H
JZ JJ4
BIJIAO5: MOV A,R1
SUBB A,#5H
JZ JJ5
BIJIAO6: MOV A,R1
SUBB A,#6H
JZ JJ6
BIJIAO7: MOV A,R1
SUBB A,#7H
JZ JJ7
BIJIAO8: MOV A,R1
SUBB A,#8H
JZ JJ8
BIJIAO9: MOV A,R1
SUBB A,#9H
JZ JJ9
BIJIAO10:MOV A,R1
SUBB A,#0AH
JZ JJ10
MOV A,R1 ;如果R1的值小于零,则速度和pwm0的速度不变。
SUBB A,#0FFH
JNZ PWM100 ;这一小段是限制调速范围只能在0-10之间
MOV R1,#0H
AJMP PWM0
PWM100: MOV R1,#0AH ;如果r1>10则直接给r1赋值10,然后转速和最大速度不变
LJMP PWM10
JJ0: LJMP PWM0 ;由于JZ跳转的距离不够长,所以这里只能用以下几句转跳转来辅助跳转
JJ1: LJMP PWM1
JJ2: LJMP PWM2
JJ3: LJMP PWM3
JJ4: LJMP PWM4
JJ5: LJMP PWM5
JJ6: LJMP PWM6
JJ7: LJMP PWM7
JJ8: LJMP PWM8
JJ9: LJMP PWM9
JJ10: LJMP PWM10
PWM0: MOV R2,#0FFH
MOV R3,#0FFH
MOV R4,#0f8H
MOV R5,#02fH
MOV A,#0H
LCALL SHOW
LJMP MAINLINE1
PWM1: MOV R2,#0FFH
MOV R3,#037H
MOV R4,#0F8H
MOV R5,#0F7H
MOV A,#1H
LCALL SHOW
LJMP MAINLINE1
PWM2: MOV R2,#0FEH
MOV R3,#06FH
MOV R4,#0F9H
MOV R5,#0BFH
MOV A,#2H
LCALL SHOW
LJMP MAINLINE1
PWM3: MOV R2,#0FDH
MOV R3,#0A7H
MOV R4,#0FAH
MOV R5,#087H
MOV A,#3H
LCALL SHOW
LJMP MAINLINE1
PWM4: MOV R2,#0FCH
MOV R3,#0DFH
MOV R4,#0FBH
MOV R5,#4FH
MOV A,#4H
LCALL SHOW
LJMP MAINLINE1
PWM5: MOV R2,#0FCH
MOV R3,#18H
MOV R4,#0FCH
MOV R5,#18H
MOV A,#5H
LCALL SHOW
LJMP MAINLINE1
PWM6: MOV R2,#0FBH
MOV R3,#4FH
MOV R4,#0FCH
MOV R5,#0DFH
MOV A,#6H
LCALL SHOW
LJMP MAINLINE1
PWM7: MOV R2,#0FAH
MOV R3,#087H
MOV R4,#0FDH
MOV R5,#0A7H
MOV A,#7H
LCALL SHOW
LJMP MAINLINE1
PWM8: MOV R2,#0F9H
MOV R3,#0BFH
MOV R4,#0FEH
MOV R5,#6FH
MOV A,#8H
LCALL SHOW
LJMP MAINLINE1
PWM9: MOV R2,#0F8H
MOV R3,#0F7H
MOV R4,#0FFH
MOV R5,#37H
MOV A,#9H
LCALL SHOW
LJMP MAINLINE1
PWM10: MOV R2,#0f8H
MOV R3,#02FH
MOV R4,#0FFH
MOV R5,#0FFH
MOV A,#0AH
LCALL SHOW
LJMP MAINLINE1
MAINLINE1: RET
show: ANL P1,#00101111B;显示速度档次
SETB P1.5
MOVC A,@A+DPTR
MOV P0,A
SETB P3.6
NOP
NOP
CLR P3.6
LCALL DELAY
RET
DELAY: MOV PN4,#08H ;40ms延时子程序
L7: MOV PN3,#0FAH
L8: DJNZ PN3,L8
DJNZ PN4,L7
RET
;CTCA: MOV TL1, #0AFH ;定时一秒钟输出速度值一次(定时0.05秒R6自加一)
; MOV TH1, #3CH
; INC R6
; RETI
CTC0:
JNB P3.4,CTC1 ;这里是定时中断程序,p3.4的高低电平就是在这里控制的
JB P3.4,CTC2
CTC1: MOV TL0,R3
MOV TH0,R2
CPL P3.4
RETI
CTC2: MOV TL0,R5
MOV TH0,R4
CPL P3.4
RETI
END
本回答被提问者采纳