计算机硬件课程设计 洗衣机功能模拟文档格式.docx
《计算机硬件课程设计 洗衣机功能模拟文档格式.docx》由会员分享,可在线阅读,更多相关《计算机硬件课程设计 洗衣机功能模拟文档格式.docx(46页珍藏版)》请在冰点文库上搜索。
![计算机硬件课程设计 洗衣机功能模拟文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/502c1fe2-d3d1-401a-923f-90003e496518/502c1fe2-d3d1-401a-923f-90003e4965181.gif)
以下逐一进行详细阐述。
初始化:
主要由以下两个部分组成,最初数据和8255的初始化。
数据的输入即运行过程中各种变量的设定,在输入时可以键盘的按键次数设定,这是本方案设计的特色之一;
另一部分是8255的初始化,本次设计为A口前6位为数码管的位选,后两位分别是开关指示灯和启/停键指示灯的输出,B口是数码管的段选,C口低4位是开关状态输入。
键盘上的0键控制启/停,1键控制水位档,2键控制选择清洁程序的类型。
检查按键:
在设计本部分时,采用的是读入键盘接口的信息进行数据的时时输入,完成键盘按键检查。
当读键盘接口有键(0、1、2)按下时指引程序往下运行,并通过程序的比较得出被按下的是哪个键。
声音提示、开灭灯:
用寄存器保存声音频率,用8254的2通道输出声音的频率后延时使通道2的输出保持以便延长发声的时间,再通过电脑的扬声器发出声音。
指示灯有开关标志灯和启停标志灯,分别在A口高4位中的第一位、第二位(即40H和0COH),控制过程只需在特定的程序中赋值就可以使指示灯亮。
运行(洗涤、漂洗、甩干等):
这是程序的核心,主要包括三个不同的清洁程序,分别是标准清洁程序、快速清洁程序、自定义清洁程序,三个程序中对于洗涤过程、漂洗过程、甩干过程各有不同,并且在每个部分的时间、频率各不相同,后面都将进行详略有别的说明
运行结束:
0键的再次按键标志着清洁程序的停止,E键的按键标志着程序的退出,开关键的按键标志着电源的切断
二.操作说明:
(1)、洗衣机操作的详细过程
1、8255的初始化,控制字是89H,A口输出,B口输出,C口输入,采用的基本输入输出方式是方式1。
2、查询按键,首先是查询键盘缓冲区是否有字符(即是否有键按下),接着比较按下的键是否是退出程序键“E”,有则直接退出程序,没有则执行下面的操作。
3、检查一次洗衣过程是否结束,如果结束则调用声音子程序,声音响起,并且将所有状态初始化;
程序会在第2、3步间循环,直到“E”键退出。
如果没有结束则执行下面的操作。
4、检查开关键是否按下,如果没有按下开关键,那么就将开关指示灯和数码管全部灭掉;
然后程序在2、3、4步间循环,直到有键按下(“E”键或者开关键)。
如果开关键已经按下,则执行下面的操作。
5、是否发声,经过变量的对比来判断是否发声过,如果没有,则调用声音子程序,声音响起,并且显示操作用语,变量初始化,然后执行下面的操作。
如果声音发生过,则直接执行下面的操作。
6、开关标志灯的亮起,直接通过程序在这里使开关标志灯亮(40H,A口的高两位中一位是控制开关标志灯,一位是控制启停标志灯),然后执行下面的操作。
7、按键状态的查询,通过调用按键查询子程序查询0、1、2三个键是否按下,然后再调用按键处理子程序查询3个键各自按下的次数,最后通过调用状态设置子程序分别得到当前的状态数并分别存入变量QT,SHUIWEI,QINGJIE中。
然后执行下面的操作。
8、检查启停键是否按下,如果没有,则程序在2、3、4、5、6、7、8步间循环,直到有键按下。
如果启停键按下,则通过程序在这里使启停标志灯亮,然后执行下面的操作。
9、倒计时语句的设定,通过设定的倒计时变量YAN3从初始值9每循环一次减1,并且通过字符显示倒计时语句,直到YAN3减到0为止。
在这个过程中,如果QINGJIE变量的值为0(即没有按2键),倒计时过程中也没有按动2键,那么默认清洁程序为标准清洁程序。
如果在倒计时过程中因为2键的按动致使QINGJIE变量的值不为0,那么清洁程序也会相应的改变。
10、洗衣过程结束,当洗衣机在相应的清洁子程序中清洗完毕后,循环次数加1,即表示已经洗衣结束,然后程序会跳转到第2步,第3步,提示声音响起,变量初始化,然后程序会一直在第2、3、4步间循环,无外在表现,直到有键按下为止。
(2)、使用者操作简述
1、首先需要按下开关键,按下过后开关指示灯会亮,并且出现“K1-电源,0-启停,1-水位设置,2-清洁模式设置”的操作用语。
2、这个时候可以将水位设置和清洁模式设置好,它们分别通过1键和2键的按下次数决定。
(1键不按默认低水位,按1下中水位,按2下高水位;
2键不按默认标准清洁程序,按1下快速清洁程序,按2下自定义清洁程序)
3,、按下启停键,这个时候启停指示灯会亮。
屏幕上会出现倒计时用语,你可以方便清楚的看到倒计时剩余时间,情节模式内容。
如果在第2步你的设置有问题,这个时候仍然可以通过按键改变状态,但是请注意,你的时间只有9秒钟。
4、甩干完成后,可以按E键退出程序,也可直接按开关键断电退出(此时程序还在模拟)。
三.硬件设计:
PC对键盘的管理采用了查询方式,数码管的亮灭由8255决定,A口的前6位决定数码管的位选,B口的8位决定数码管的段选。
A口的高两位分别是开关标志灯和启/停标志灯(A6为开关标志灯,A7为启/停标志灯),C口低4位分别接键盘输入状态和开关输入状态(C0~C2分别表示键盘0、1、2,C3表示开关输入状态)。
8255的输入输出方式采用的是方式0,端口与外设间不需要联络信号,CPU只要用输入或输出指令就可以与外设进行数据交换,实现无条件的输入/输出方式。
模拟输出接电压表的硬件连接是Ao接Ai
四.程序流程图:
1.主流程图:
读键盘
运行
停止
读开关
初始化
2.重要模块流程:
在程序清单中你将发现设计子程序较多,不可能一一作出流程加以详述,我们在这儿择要图列。
按键查询子程序:
按键查询子程序的主要功能是对启停键、水位控制键、清洁程序选择键是否按下的查询(初始默认启停键是没有启动的,只有按1下才会启动;
水位控制键初始默认为低水位,按1下为中水位,再按一下为高水位,再按一下为低水位,以此循环;
清洁控制程序选择键初始默认为标准清洁模式,按1下为快速情节模式,再按下为自定义清洁模式,再按1下为标准情节模式,以此循环),查询完毕后,该子程序就会结束;
紧接着就会是按键处理子程序,这个子程序的功能就是记录下每个键的按键次数;
再接着就是一个按键状态设置程序,它会将按键次数与状态值相除的余数赋给状态变量,留待后用。
下面就是按键查询子程序的流程图:
退出
为1键
KEY赋值为1
判断为哪个键按下
为2键
为0键
KEY赋值为9
延时去抖动
读入列线
判断是否有键按下
KEY赋值为0
给行线送0
KEY赋值为02
注水子程序流程图:
调用图形2设置子程序
奇
偶
判断移位次数是否为水位上限
将上次移位过后的值作为初值
将初值移位后作为位选输出
输出段选
判断位选的奇偶
调用图形1设置子程序
Y
退出清洁子程序
N
判断甩干没
调用浸泡子程序
判断循环结束否
判断是否已漂洗
判断是否已洗涤
显示洗涤信息
调用注水子程序
调用甩干子程序
调用正反转子程序
判断水是否注满
判断水是否放完
显示漂洗信息
调用放水子程序
标准清洁程序流程图:
给段选赋初值
甩干子程序流程图:
显示状态信息
将位选右移1位
输出位选
判断循环是否结束
延时
判断数码管是否全亮
输出相对应的段选
将数码管全灭
注水子程序:
该子程序主要是显示注水过程,包含洗涤过程的注水和漂洗过程的注水,区别在于输出地段选不一样。
洗涤过程的注水要显示小数点而漂洗过程没有以示区分。
首先给位选一个初值,然后判断移位次数,没达到上限时将初值右移一位后作为位选输出,并把移位过后的位选作为下次位选初值。
标准清洁程序:
清洗程序包含标准清洗程序、快洗清洁程序和自定义清洁程序。
其中标准清洗程序是按默认设置执行的,包含洗涤过程,漂洗过程和甩干过程。
快洗清洁程序不含洗涤过程。
而自定义清洁程序同标准清洁程序的过程一样都包含洗涤过程,漂洗过程和甩干过程,只是其中的参数可以自己设定,可以设定的参数有浸泡时间、正反转的速度、正反转的时间及甩干的时间。
标准清洗程序的第一步要是注水过程,注水完后就进行正反转洗涤,洗涤完后就放水进入到漂洗过程;
漂洗过程包含注水过程,浸泡过程,正反转漂洗过程和放水过程。
放水完后就进行甩干,甩干完后就表示一次洗衣过程结束。
快洗注水后直接进入漂洗过程而不用洗涤,漂洗过后就甩干。
自定义洗先要从键盘读入设置信息存入相应的暂存,然后进入洗涤过程,浸泡过程,漂洗过程和甩干过程。
甩干子程序:
甩干过程是通过数码管交替显示来表示的,首先给位选送初值,然后送出与之相对应的段选,然后将位选左移一位后送出并送出相应段选直到显示完第一种状态;
然后进行延时,再将第二种状态的位选初值送出,并送出与之相对应的段选,再将位选值左移一位后送出并输出与之对应的段选直到显示完第二种状态。
然后延时并在显示这两种状态间循环到甩干结束。
五、程序清单
.486
DATASEGMENT
SETPTDB89H;
8255控制字10001001B
PORTAEQU208H
PORTBEQU209H
PORTCEQU20AH
PORTKEQU20BH
IN_PORTEQU202H;
DAC0832
DAPORTEQU204H
OUTDADB0
KEYDB9;
按键状态
K0DB2;
0键次数
K1DB3;
1键次数
K2DB3;
2键次数
NUM1DB2;
0键2种状态
NUM2DB3;
1键3种状态
NUM3DB3;
2键2种状态
QTDB0;
启停键当前状态
SHUIWEIDB0;
水位设置键当前状态
QINGJIEDB0;
清洁程序设置键当前状态
YWXIANDB0;
移位次数
FSCSDB0;
放水次数
SETFDW500;
设置声音频率
SETYDW1000;
设置声音响的时间
TUX0DB77H;
‘一’段选码
TUX1DB37H;
‘二’段选码
TUX2DB36H;
‘三’段选码
TUX3DB0F7H;
‘一.’段选码
TUX4DB0B7H;
‘二.’段选码
TUX5DB0B6H;
‘三.’段选码
DAIXDB0;
待显段选码缓存
XHJSDW0;
程序循环次数
JGSJDB3;
放水速度
YBPLDB3;
正反转频率
FUDU1DB40H;
摇摆幅度
FUDU2DB0C0H;
XUANZ1DB0EEH,0F7H,0FEH,0F7H,0FEH,0F5H;
图形段选码
XUANZ2DB0D7H,0FEH,0F7H,0FEH,0F7H,0FAH;
XX0DB1;
声音次数状态变量
XX1DB10;
甩干旋转模拟循环次数状态变量
XX2DB30;
指针摆动次数状态变量
XX3DB0FFH;
放水过程位选移位初值
XX4DB0;
一次完整洗衣过程次数设置状态初值
XX5DB1;
一次完整洗涤过程次数设置状态初值
XX6DB1;
自定义设置次数
XIDIDB0;
洗涤过程状态变量
PIXIDB0;
漂洗过程状态变量
YAN1DW200;
YAN2DW30;
甩干模拟转动次数
YAN3DB9;
清洁程序设置前的延时
YAN4DB10;
浸泡时间
MESS0DB'
K1-电源,0-启停,1-水位设置,2-清洁模式设置'
0AH,0DH,'
$'
MESS1DB'
洗衣结束'
0AH,0DH,'
MESS2DB'
注水'
MESS3DB'
正反转'
MESS4DB'
放水'
MESS5DB'
洗涤:
'
MESS6DB'
漂洗:
MESS7DB'
甩干:
MESS8DB'
请设置清洁程序,您还有'
'
MESS9DB0
MESS10DB'
秒钟'
MESS11DB'
标准清洁程序'
MESS12DB'
快速清洁程序'
MESS13DB'
自定义清洁程序'
MESS14DB'
设定浸泡时间,0-9:
MESS15DB0AH,0DH,'
设定正反转速度,0-9:
MESS16DB0AH,0DH,'
设定正反转时间,0-9:
MESS17DB0AH,0DH,'
设定甩干时间,0-9:
MESS18DB0AH,0DH,'
是否确定(Y/N)?
:
BUF1DB30;
XX2缓存
BUF2DB10;
YAN4缓存
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLC8255;
8255初始化
S0:
MOVAH,01H
INT16H
JZS00
MOVAH,0
INT16H
CMPAL,'
E'
JZSEXIT;
按‘E’键退出
S00:
CMPXX4,1;
检查一次洗衣过程是否结束
JNES1
LEADX,MESS1
MOVAH,9
INT21H
CALLVOICE
CALLZTBL;
JMPS0
S1:
MOVDX,PORTC
INAL,DX
ANDAL,08H
CMPAL,08H;
检查开关键是否按下
JES2
MOVXHJS,0;
循环累计次数清零
MOVDX,PORTA
MOVAL,00H
OUTDX,AL;
灭灯
MOVAL,3FH
OUTDX,AL
MOVDX,PORTB
MOVAL,0FFH
灭数码管
CALLZTBL
JMPS0
S2:
CMPXX0,0;
是否响过一次?
JES3
CALLVOICE;
DECXX0
LEADX,MESS0
MOVYWXIAN,0
MOVFSCS,0
S3:
MOVAL,40H
开关标志灯亮
CALLAJCX;
调用按键查询程序
CALLAJCL;
调用按键处理程序
CALLZTSET;
调用状态设置程序
CMPQT,0;
是否按下启动键
JES0
MOVAL,0C0H
启动标志灯亮(开关标志灯也亮着)
CMPYAN3,0
JES7
MOVAL,YAN3
ADDAL,30H;
换算为ASCII码
MOVMESS9,AL;
LEADX,MESS8;
MOVAH,9;
INT21H;
MOVDL,MESS9;
MOVAH,2;
LEADX,MESS10;
DECYAN3;
CMPQINGJIE,0;
JNES4;
LEADX,MESS11;
JMPS6;
S4:
CMPQINGJIE,1;
JNES5;
LEADX,MESS12;
S5:
LEADX,MESS13;
S6:
MOVYAN1,1000;
CALLDELAY;
JMPS0;
;
S7:
JNES8;
CALLBZQJ2;
调用标准清洁子程序
JMPS10;
S8:
JNES9;
CALLKSQJ;
调用快速清洁子程序
S9:
CALLZDYQJ;
调用自定义清洁子程序
S10:
INCXHJS;
循环次数自加1
JMPS0
SEXIT:
MOVAH,4CH
INT21H
;
C8255PROCNEAR
MOVDX,PORTK
MOVAL,SETPT
OUTDX,AL
RET
C8255ENDP
状态变量初始化
ZTBLPROCNEAR
MOVXX4,0;
洗衣次数初始化
MOVXX0,1;
发声次数初始化
MOVYWXIAN,0;
注水次数初始化
MOVFSCS,0;
放水次数初始化
MOVXX3,0FFH;
放水过程位选移位初值初始化
MOVXX2,30;
摇摆过程次数初始化
MOVBUF1,30;
甩干模拟转动次数初始化
MOVYAN3,9;
清洁程序设置前延时初始化
MOVBUF2,10;
浸泡时间初始化
MOVXIDI,0;
洗涤过程状态变量初始化
MOVPIXI,0;
漂洗过程状态变量初始化
MOVXX5,1;
一次完整洗涤过程次数设置状态初值初始化
MOVXX6,1;
自定义设置次数初始化
MOVK0,2;
0键按键次数初始化
MOVK1,3;
1键按键次数初始化
MOVK2,3;
2键按键次数初始化
RET
ZTBLENDP
按键查询子程序
AJCXPROCNEAR
MOVAL,40H;
01000000B
MOVDX,PORTA;
行线送0
MOVDX,PORTC;
INAL,DX;
ANDAL,0FH;
CMPAL,0FH;
JEA3;
无键按下
MOVBH,AL
MOVYAN1,500
延时去抖动
ANDAL,0FH
无键按下
JEA3
CMPAL,0EH;
0键按下
JEA1
CMPAL,0DH;
1键按下
JEA2
CMPAL,0BH;
2键按下
JNEEXIT;
A0:
MOVKEY,2;
JMPEXIT;
A1:
MOVKEY,0;
A2:
MOVKEY,1;
A3:
MOVKEY,9;
EXIT:
RET;
AJCXENDP
按键处理子程序
AJCLPROCNEAR
CMPKEY,9;
JEAJ3;
CMPKEY,0;
JEAJ0;
CMPKEY,1;
JEAJ1;
CMPKEY,2;
JEAJ2;
JMPAJ3;
AJ0:
INCK0;
按下0键次数
AJ1:
INCK1;
按下1键次数
AJ2:
INCK2;
按下2键次数
AJ3:
AJCLENDP
状态设置子程序
ZTSETPROCNEAR
MOVAH,0;
MOVAL,K0;
DIVNUM1;
除以0键状态数
MOVQT,AH;
存入当前状态值
MOVAL,K1;
DIVNUM2;
除以1键状态数
MOVSHUIWEI,AH;
MOVAL,K2;
DIVNUM3;
除以2键状态数
MOVQINGJIE,AH;
ZTSETENDP
发声子程序
VOICEPROCNEAR
PUSHA
MOVDI,SETF;
DI中保存着频率值
MOVBX,SETY;
B