51汇编:从玩数目管到玩步进电机

前言

学习一下51单片机的汇编。除了上一篇的简单显示外,51汇编还有许多需要学习和注意的地方。

案例一:数码管显示数字2,并左移7位再右移7位
在这里插入图片描述
我的单片机是共阴数码管,P0控制。
LED是P2控制,其中P24、P23、P22对应着一个译码器,也就是数码管的片选。P24=LSC、P23=LSB、P22=LSA为输入的数据,三个口组成的3位数据表示选择8个数码管中的某一个。

在这里插入图片描述
不管高位,设置零和一都无所谓。
为了让数码管显示的数字从左往右移动到头,再右移到尾,再循环往复。那么低位就有必要考虑了,如果没有低位,那么只需要对某个计数的变量加一和减一,但是这里有两个低位------------那么,每次使片选的三位能增加一位,那么低位就要增加4位

有两种方案:

  1. 设置8X4 - 1的计数,每循环4次数码管显示数字左移一个。减一的目的是为了防止溢出,溢出的话数码管在显示到最左边时会跳到最右边,然后跳回来。
  2. 每次数码管显示一次,计数器加或减4
	org 0000h
	ljmp main
main:
	mov r0,#0e0h ;p2.4=0   p2.3=0   p2.2=0
	mov r1,#31 
	mov r3,#31
	
L1:
	mov p2,r0 ;select one number led array
	inc r0
	mov p0,#05bh ;2
	lcall delay_1s
	;ljmp L1
	djnz r1, L1

L2:
	mov p2,r0
	clr c
	mov a,r0
	subb a,#1
	mov r0,a
	mov p0,#05bh
	lcall delay_1s
	djnz r3, L2
	ljmp main



		
;-------------------------delay 1 s for eliminating jitter-----------
delay_1s:     
	mov r7,#0a7h
DL1:
	mov r6,#0abh
DL0:
	mov r5,#10h
	djnz r5,$
	djnz r6,DL0
	djnz r7,DL1
	ret
	end

方案一显示效果:
在这里插入图片描述

	org 0000h
	ljmp main
main:
	mov r0,#0h ;p2.4=0   p2.3=0   p2.2=0
	mov r1,#7  
	mov r3,#7
	
L1:
	mov p2,r0 ;select one number led array
	mov a,r0
	add a,#4
	mov r0,a
	mov p0,#05bh ;2
	lcall delay_1s
	;ljmp L1
	djnz r1, L1

L2:
	mov p2,r0
	clr c
	mov a,r0
	subb a,#4
	mov r0,a
	mov p0,#05bh
	lcall delay_1s
	djnz r3, L2
	ljmp main



		
;-------------------------delay 1 s for eliminating jitter-----------
delay_1s:     
	mov r7,#0a7h
DL1:
	mov r6,#0abh
DL0:
	mov r5,#10h
	djnz r5,$
	djnz r6,DL0
	djnz r7,DL1
	ret
	end

方案二显示效果:
在这里插入图片描述

案例二:弄响蜂鸣器

这个部分注意的是,要想听见蜂鸣器发声,不单单要反复开闭来产生声波。而且,延迟时间需要足够短,不然听不见。一般用Keil调试时是把delay延迟成零点几个毫秒的。

	org 0000h
	ljmp main
main:
	setb p1.5
start:
	clr p1.5
	lcall delay
	setb p1.5
	lcall delay
	ljmp main
	
delay:    
	mov r6,#10h
DL0:
	mov r5,#20h
	djnz r5,$
	djnz r6,DL0
	ret
	end

案例三:步进电机驱动

  • 5线4相

实际图
在这里插入图片描述
原理图
在这里插入图片描述
在这里插入图片描述
5个控制端,Ph1表示步进电机A线圈电流方向,1正向,0方向。Ph2表示步进电机B线圈电流方向,1正向,0方向。I01,I11表示A线圈输出电流大小--------11到00,从零每步进1/3到1。I11,I12表示B线圈电流大小。

5线4相步进电机原理
由两个线圈电流方向不同而产生的磁场不同,带动转子绕一个方向移动。
在这里插入图片描述

如何设计步进电机的转动?
下面在A线圈和B线圈电流强度的地方取了巧,都设定了00(最大电流)。
在这里插入图片描述

	org 000h
	ljmp main
main:
	mov p1,#28h
	lcall delay
	mov p1,#16h
	lcall delay
	mov p1,#2bh
	lcall delay
	mov p1,#15h
	lcall delay
	ljmp main
	
	
delay:
	mov r7,#10h
DL1:
	mov r6,#10h
DL0:
	mov r5,#10h
	djnz r5,$
	djnz r6,DL0
	djnz r7,DL1
	ret
  • 4线2相

2相步进电机的工作方式有三种:1相驱动,2相驱动,1-2相驱动。

猜你喜欢

转载自blog.csdn.net/weixin_41374099/article/details/88858272