接口技术——洗衣机控制器

实现功能:

若洗衣机定时到,停机并发出音响信号,用两个数码管显示洗涤预置时间(分钟),按倒计时方式作计时显示,用3只LED灯表示“正转”、“反转”、“暂停”三个状态。能按键设置洗衣机定时时间,倒计时显示分和秒;能按键调整洗衣机的转速;洗衣机每转动一定的时间,会自动改变转动方向。

具体设计:

1 CPU与各芯片连接电路图:

CPU通过总线与8255A芯片(片选CS1)、8253芯片(片选CS2)、8259A芯片(片选CS3)、74HC273芯片(片选CS5)以及实验箱连接。8253为定时器,设置T0、T1两个计数器,将OUT0连接8259A的IR0端以及8253的CLK1端,触发中断给电机送出数据,控制电机旋转,T1实现1s定时,将OUT1连接8259A的IR1端,每过1s触发中断,改变计数变量,实现计时功能。8255控制数码管的显示以及键盘的扫描。74HC273控制LED灯的显示和蜂鸣器。

2.8255A控制数码管及键盘

8255A的工作方式为:PA口和PB口方式0输出,用于控制数码管;PC口低四位方式0输入,用于接收按键信息,PC口高四位方式0输出,用于控制电机。

3.步进电机模拟风扇转,步进电机的A、B、C、D分别与8255的PC4、PC5、PC6、PC7相连。

4.74HC273控制LED灯和蜂鸣器

74HC273的输出端与F4区的8个发光二极管以及蜂鸣器相连。

程序流程图:

 

 

 完整汇编代码:

	.MODEL	TINY
EXTRN	InitKeyDisplay:NEAR, GetKeyA:NEAR, DisPlay8:NEAR
IO8259_0	EQU	0250H
IO8259_1	EQU	0251H
Con_8253	EQU	0263H
T0_8253		EQU	0260H
T1_8253		EQU	0261H
Con_8255	EQU	0273H
PA_8255		EQU	0270H
PB_8255		EQU	0271H
PC_8255		EQU	0272H
ADDR_273	EQU	0230H
	.STACK	100
	.DATA
GREEN	 	DB	11111110B	;绿灯亮,正转
YELLOW		DB	11111101B	;黄灯亮,反转
RED		DB	11111011B	;红灯亮,停止
XIANG		DB	11110111B	;停止时蜂鸣器响
StepControl	DB	0	;下一次送给步进电机的值
buffer		DB	8 DUP(0) ;8字节显示缓冲区
SpeedNo		DB	0	;选择哪一级速度
StepDelay	DB	0	;转动一步后,延时常数
StartStepDelay	DB	0	;若选择速度过快,延时由长到短,最终使用对应延时常数
StartStepDelay1	DB	0	;StartStepDelay
bFirst		DB	0	;有没有转动过步进电机
bRatation	DB	0	;转动状态 0 反转 1 正转 
ReDisplayFlag	DB	0	;0表示计数值不变,1表示计数值发生改变
bChange		DB	0	;改变转向的时间
AutoFlag	DB	0	;自动改变转向的标志
StepTime	DB	0	;倒计时分
Second		DB	0	;倒计时秒
StepDelayTab:	DB	100,91,75,62,50,42,36,32,28,24	;转速级别
DriverTab:	DW	Speed_up	;提高转速
		DW	Speed_Down	;降低转速
		DW	Direction	;转动方向
		DW	Exec	    	;步进电机根据方向、转速、步数开始转动
		DW	Reset		;重启
	.CODE	
START:	MOV  	AX,@DATA
	MOV	DS,AX
	MOV	ES,AX
	NOP
	CALL	InitKeyDisplay	;初始化键盘、数码管控制器(8255)
	MOV	bFirst,1	;有没有转动过步进电机
	MOV	bRatation,1
	MOV	StepControl,33H	;下一次送给步进电机的值
	MOV	SpeedNo,5	;第五级速度
	CALL	Init8253
	CALL	Init8259
	CALL	WriIntver
	MOV	bChange,30
	MOV	StepTime,30	;初始30分钟
	MOV	buffer,0	;显示缓冲器初始化
	MOV	buffer+1,0	;秒用两位
	MOV	buffer+2,0
	MOV	buffer+3,0	;分用两位
	MOV	buffer+4,10H
	MOV	AL,SpeedNo
	MOV	buffer+5,AL	;显示速度级别
	MOV	buffer+6,10H
	MOV	buffer+7,0	;显示转动方向
	MOV	DX,ADDR_273
	MOV	AL,RED
	OUT	DX,AL
BUFFUP:	LEA	SI,buffer
	CALL	Display8
	CMP	AutoFlag,1
	MOV	AutoFlag,0
	JZ	JIXU
ANJIAN:	
	CALL	GetKeyA
	JB	SHUZI
	CMP	ReDisplayFlag,0
	JZ	ANJIAN
	MOV	ReDisplayFlag,0
	CALL	LedDisplay
	JMP	BUFFUP
JIXU:	MOV	bChange,30
	CALL	LedLight
	JMP	TIMER1_2
SHUZI:	CLI
	PUSH	DX
	PUSH	AX
	MOV	DX,ADDR_273
	MOV	AL,RED
	OUT	DX,AL
	POP	AX
	POP	DX
	CMP	AL,10
	JNB	CAOZUO
	MOV	AH,buffer+2
	MOV	buffer+3,AH
	MOV	buffer+2,AL
	MOV	Second,0
	MOV	buffer+1,0
	MOV	buffer,0
	JMP	BUFFUP
CAOZUO:	CMP	AL,15
	JNB	BUFFUP
	LEA	SI,DriverTab
	SUB	AL,10
	SHL	AL,1
	XOR	AH,AH
	MOV	BX,AX
	JMP	CS:[SI+BX]
Direction:
	CMP	bRatation,0
	JZ	Clockwise
	MOV	bRatation,0
	MOV	buffer+7,1
AntiClockwise:	CMP	bFirst,0
	JZ	AntiClockwise1
	MOV	StepControl,91H
	JMP	Direction1
AntiClockwise1:	MOV	AL,StepControl
	ROR	AL,2
	MOV	StepControl,AL
	JMP	Direction1
Clockwise:	MOV	bRatation,1
	MOV	buffer+7,0
	CMP	bFirst,0
	JZ	Clockwise1
	MOV	StepControl,33H
	JMP	Direction1
Clockwise1:	MOV	AL,StepControl
	ROL	AL,2
	MOV	StepControl,AL
Direction1:JMP	BUFFUP
;提高转速
Speed_up:	MOV	AL,SpeedNo
	CMP	AL,9
	JZ	Speed_up2
Speed_up1:	INC	AL
	MOV	SpeedNo,AL
	MOV	buffer+5,AL
Speed_up2:	JMP	BUFFUP
;降低转速
Speed_Down:	MOV	AL,SpeedNo
	CMP	AL,1
	JZ	Speed_Down1
	DEC	AL
	MOV	SpeedNo,AL	
	MOV	buffer+5,AL
Speed_Down1:	JMP	BUFFUP
;运行电机
Exec:	MOV	bFirst,0
	CALL	TakeStepTime
	LEA	BX,StepDelayTab
	MOV	AL,SpeedNo
	XLAT
	MOV	StepDelay,AL
	CMP	AL,50
	JNB	Exec1
	MOV	AL,50
Exec1:	MOV	StartStepDelay,AL
	MOV	StartStepDelay1,AL
	CALL	LedLight
	STI
	JMP	BUFFUP
Reset:	JMP	START

STOP:	CLI
	PUSH	DX
	PUSH	AX
	PUSH	CX
	MOV	CX,3
	MOV	DX,ADDR_273
THREE:	MOV	AL,XIANG
	OUT	DX,AL
	CALL	Delay1
	MOV	AL,0FFH
	OUT	DX,AL
	CALL	Delay0
	LOOP	THREE
	MOV	AL,RED
	OUT	DX,AL
	POP	CX
	POP	AX
	POP	DX
	JMP	BUFFUP
TIMER0:	PUSH	AX
	PUSH	DX
	DEC	StartStepDelay
	JNZ	TIMER0_1
	MOV	AL,StartStepDelay1
	CMP	AL,StepDelay
	JZ	TIMER0_2
	DEC	AL
	MOV	StartStepDelay1,AL
TIMER0_2:	MOV	StartStepDelay,AL
	MOV	AL,StepControl
	MOV	DX,PC_8255
	OUT	DX,AL
	CMP	bRatation,0
	JNZ	TIMER0_3
	ROR	AL,1
	JMP	TIMER0_4
TIMER0_3:
	ROL	AL,1
TIMER0_4:
	MOV	StepControl,AL
TIMER0_1:	MOV	DX,IO8259_0
	MOV	AL,20H
	OUT	DX,AL
	POP	DX
	POP	AX
	IRET
zhuanxiang:	MOV	AutoFlag,1
	JMP	Direction
TIMER1:	PUSH	AX
	PUSH	DX
	CMP	Second,0
	JNZ	TIMER1_1
	CMP	StepTime,0
	JZ	STOP
	MOV	Second,60
	DEC	StepTime
TIMER1_1:DEC	Second
	DEC	bChange
	JZ	zhuanxiang
TIMER1_2:	MOV	ReDisplayFlag,1
	MOV	DX,IO8259_0
	MOV	AL,24H
	OUT	DX,AL
	POP	AX
	POP	DX
	IRET
LedLight	PROC	NEAR
	PUSH	DX
	PUSH	AX
	MOV	DX,ADDR_273
	CMP	bRatation,1
	JZ	LedLight1
	MOV	AL,GREEN
	JMP	LedLight2
LedLight1:	MOV	AL,YELLOW
LedLight2:	OUT	DX,AL
	POP	AX
	POP	DX
	RET
LedLight	ENDP
;根据输入的数字计算分钟
TakeStepTime	PROC	NEAR
	MOV	AL,buffer+3
	XOR     BX,BX
	MOV	BL,10
	MUL	BL
	ADD	AL,buffer+2
	CMP	AL,0
	JZ	TakeStepTime_1
	MOV	StepTime,AL
TakeStepTime_1:	RET
TakeStepTime	ENDP

LedDisplay PROC	NEAR
	PUSH    AX
	XOR     AX,AX
	MOV	AL,StepTime
	MOV     BL,10
	DIV     BL
	MOV     buffer+2,AH
	MOV     buffer+3,AL
	XOR     AX,AX
	MOV	AL,Second
	MOV     BL,10
	DIV     BL
	MOV     buffer+0,AH
	MOV     buffer+1,AL
	POP     AX
	RET
LedDisplay ENDP
;不同长短的延时
Delay0	PROC	NEAR
	PUSH	CX
	MOV	CX,30000
Delay0_1:	LOOP	Delay0_1
	POP	CX
	RET
Delay0	ENDP
Delay1	PROC 	NEAR
	PUSH	CX
	MOV	CX,2
Delay11:	CALL	Delay0
	LOOP	Delay11
	POP	CX
	RET	
Delay1	ENDP	
;8253初始化
Init8253	PROC	NEAR	
	MOV	DX,Con_8253
	MOV	AL,35H		;00110101B T0控制字
	OUT	DX,AL           ;计数器T0设置在模式2
	MOV	DX,T0_8253	;TO端口地址
	MOV	AL,00H		;低8位
	OUT	DX,AL
	MOV	AL,02H		;高8位,初值200
	OUT	DX,AL
	MOV	DX,Con_8253
	MOV	AL,77H      	;0111,0111B T1控制字
	OUT	DX,AL       	;计数器T1设置在模式2
	MOV	DX,T1_8253
	MOV	AL,00H	    	;低8位
	OUT	DX,AL
	MOV	AL,50H	    	;高8位,初值5000
	OUT	DX,AL
	RET
Init8253	ENDP
;8259初始化
Init8259	PROC	NEAR
	MOV	DX,IO8259_0	;
	MOV	AL,13H		;00010011
	OUT	DX,AL
	MOV	DX,IO8259_1
	MOV	AL,08H		;00001000
	OUT	DX,AL
	MOV	AL,09H		;00001001
	OUT	DX,AL
	MOV	AL,0FCH		;11111100
	OUT	DX,AL
	RET
Init8259	ENDP

WriIntver	PROC	NEAR
	PUSH	ES
	MOV	AX,0
	MOV	ES,AX
	MOV	DI,20H
	LEA	AX,TIMER0
	STOSW
	MOV	AX,CS
	STOSW
	LEA	AX,TIMER1
	STOSW
	MOV	AX,CS
	STOSW
	POP	ES
	RET
WriIntver	ENDP
	END	START

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值