接口课程设计实验报告周远.docx
- 文档编号:17896442
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:25
- 大小:103.45KB
接口课程设计实验报告周远.docx
《接口课程设计实验报告周远.docx》由会员分享,可在线阅读,更多相关《接口课程设计实验报告周远.docx(25页珍藏版)》请在冰点文库上搜索。
接口课程设计实验报告周远
《宿舍安全系统》设计报告
本系统用来验证身份。
用户从下位机刷卡进入,并录入用户名和密码。
下位机分别将用户名和密码发送给主控机,主控机验证之后,发送相应的反馈信息给下位机。
只有当用户名和密码都被确认,用户身份才合法。
合法时下位机控制发光部件亮灯提示,不合法则下位机控制发声部件鸣声警报。
主控机程序流程图
下位机程序流程图
主控机源程序
;每次验证用户名和密码之前,都有退出提示,即3秒钟内按任意键退出,此时
;按任意键方可退出
datasegment
data51equ308h;8251A数据口
ctr151equ309h;8251A命令/状态口
defuserdb65h,81h,24h,37h,02ah,54h;依次为各用户名
defpwddb20h,17h,34h,25h,04ch,44h;依次为各用户对应的密码
usernodw6;用户数目
YNdb0;发送缓存
userdb0;存放接收的用户名
pwddb0;存放接收的密码
tdw0;延时初值
bufbdb0ah,0dh,'Thedomitorysystemisrunning...!
$'
bufudb0ah,0dh,'username(4characters):
$';接收用户名提示
bufpdb0ah,0dh,'password(6characters):
$';接收密码提示
bufrdb0ah,0dh,'Youcangetin!
!
$';正确提示
bufusdb0ah,0dh,'Errorusername!
!
$';用户名错误提示
bufpddb0ah,0dh,'Errorpassword!
!
$';密码错误提示
buferrdb0ah,0dh,'Cannotidentifythecard!
!
!
!
$';不可识别的卡
bufexitdb0ah,0dh,'Pressanykeywithin3secondstoexit!
$'
dataends
stacksegmentstack
db200dup(0)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
hhmacro;回车换行的宏
movdl,0ah
movah,2
int21h
movdl,0dh
movah,2
int21h
endm
int51procnear;8251A初始化子程
movdx,ctr151;8251A命令口
moval,0;空操作
outdx,al
moval,40h;内部复位
outdx,al
moval,4Eh;8251A方式命令
outdx,al
moval,27h;8251A工作命令
outdx,al
ret
int51endp
delay1proc;延时子程1
pushbx
movbx,t
dl1:
decbx
jnzdl1
popbx
ret
delay1endp
quitproc;3秒钟之内按任意键退出程序
pushcx
leadx,bufexit
movah,9
int21h
movcx,05fffh
qxx:
cmpcx,0
jeqx
movah,1;检测是否有键按下,有则退出
int16h
jnzqnext
movt,0ffffh
calldelay1
deccx
jmpqxx
qnext:
movah,4ch
int21h
qx:
popcx
ret
quitendp
sendmacroa;发送一个字符的宏,首先必须将要发送的字符送入变量YN
movdx,ctr151
a:
inal,dx
testal,01;发送准备好?
TXRDY=1?
jza;未准备好,则等待
movdx,data51;已准备好,则发送Y给下位机
moval,YN
outdx,al
endm
receivemacrob;接收一个字符的宏,接收到al
b:
movdx,ctr151;检测接收准备好没
inal,dx
testal,02;接收数据准备好?
RXRDY=1?
jzb;未准备好则继续检测
movdx,data51;已准备好,即有数据传送过来,则接收1个字符
inal,dx
endm
begin:
movax,data
movds,ax
callint51;调用8251A子程序,初始化8251A
k:
callquit;延时3秒退出
hh
leadx,bufb;系统提示
movah,9
int21h
receiveo;接收插卡信号
cmpal,'O'
jneerror
movYN,'Y';发送卡确认信息
sendyyy
leadx,bufu;用户名提示信息
movah,9
int21h
moval,0
receivea;接收一个字符,用户信息
movuser,al;保存接收的用户信息
movdl,user;显示接收的字符
movah,02h
int21h
jmpcmpuser
error:
leadx,buferr;无法识别的卡
movah,9
int21h
hh
jmpk
over:
movax,4c00h
int21h
cmpuser:
moval,user
leasi,defuser;取用户名数组的首地址
movcx,userno;取用户数目
cu:
cmpcx,0
jesendnu
cmpal,[si]
jesy;和某一个用户名相等则发送Y确认信号
incsi
deccx
jmpcu
sy:
pushsi;保存该用户名的地址
movYN,'Y'
sendy
leadx,bufp;密码提示信息
movah,9
int21h
;接收密码
receivepp
movpwd,al;保存接收的密码
popsi
movax,si
addax,userno;得到该用户名对应的密码在密码数组中的地址
movsi,ax
movbl,[si]
cmppwd,bl;和密码比较
jnesendnp;不相等则发送N,相等则发送Y
movYN,'Y'
sendyy
leadx,bufr;显示正确
movah,9
int21h
hh
jmpk;重新开始
sendnp:
movYN,'N'
sendn
leadx,bufpd;显示密码错误
movah,9
int21h
hh
jmpk;重新开始
sendnu:
movYN,'N'
sendn
leadx,bufus;显示用户名错误
movah,9
int21h
hh
jmpk;重新开始
codeends
endbegin
4.下位机源程序
;程序开始时,提示在3秒钟内按任意键退出,否则继续执行。
若继续执行,首
;先按sw4表示插卡,再由开;关状态设置用户名,按sw1发送之,显示提示信息
;仍然用开关状态设置密码,按sw2发送之,显示提示
;信息,回程序开始.
datasegment
data51equ308h;8251A数据口
ctr151equ309h;8251A命令/状态口
ctr155equ303h;8255命令口
ctr155aequ300h;8255数据口a
ctr155bequ301h;8255数据口b
undb0;存放读入的用户名
pddb0;存放读入的密码
hhdb0ah,0dh,'$';回车换行
lightdb0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh;闪烁灯状态
tdw0;延时初值
fdb0;计数初始值
jdb0;计数初始值
YNdb0
bufexitdb0ah,0dh,'Pressanykeywithin3secondstoexit!
$'
buf1db0ah,0dh,'Presssw4instandofinsertingthecard!
$'
buf2db0ah,0dh,'Changethestateoftheswitchtosetusername!
Presssw1tosendit!
$';提示录入和发送用户名
buf3db0ah,0dh,'Changethestateoftheswitchtosetpassword!
Presssw2tosendit!
$';提示录入和发送密码
buf4db0ah,0dh,'Theuserisnotexistedoryouhavethewrongpassword!
$';错误提示信息
buf5db0ah,0dh,'Youcangetin!
!
$';成功登录信息
dataends
stacksegmentstack
DB200DUP(0)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
int51procnear;8251A初始化子程
movdx,ctr151;8251A命令口
moval,0;空操作
outdx,al
moval,40h;内部复位
outdx,al
moval,4Eh;8251A方式命令
outdx,al
moval,27h;8251A工作命令
outdx,al
ret
int51endp
sendmacroa;发送一个字符的宏,首先必须将要发送的字符送入变量YN
movdx,ctr151
a:
inal,dx
testal,01;发送准备好?
TXRDY=1?
jza;未准备好,则等待
movdx,data51;已准备好,则发送一个字符给下位机
moval,YN
outdx,al
endm
clearmacroc;置口c某一位,c为置位控制字
movdx,303h
moval,c
outdx,al
endm
receivemacrob;接收一个字符的宏,接收到al
b:
movdx,ctr151;检测接收准备好没
inal,dx
testal,02;接收数据准备好?
RXRDY=1?
jzb;未准备好则继续检测
movdx,data51;已准备好,即有数据传送过来,则接收1个字符
inal,dx
endm
delay1proc;延时子程1
pushbx
movbx,t
dl1:
decbx
jnzdl1
popbx
ret
delay1endp
delay2proc;延时子程2
pushcx
movcx,00fffh
xx:
cmpcx,0
jex
movt,0ffffh
calldelay1
deccx
jmpxx
x:
popcx
ret
delay2endp
quitproc;3秒钟之内按任意键退出程序
pushcx
leadx,bufexit
movah,9
int21h
movcx,07fffh
qxx:
cmpcx,0
jeqx
movah,1;检测是否有键按下,有则退出
int16h
jnzqnext
movt,0ffffh
calldelay1
deccx
jmpqxx
qnext:
movah,4ch
int21h
qx:
popcx
ret
quitendp
flutterproc;灯闪烁函数,8个灯依次亮,循环3次
leadi,light
movf,3
wyyy:
cmpf,0
jewy
movcx,8
l:
cmpcx,0
jewyy
moval,[di];灯亮
movdx,ctr155a
outdx,al
calldelay2;延时2
moval,0ffh;灯灭
movdx,ctr155a
outdx,al
incdi
deccx
jmpl
wyy:
leadi,light
decf
jmpwyyy
wy:
ret
flutterendp
noiseproc;声音报警子函数,3次长鸣
pushcx
movf,3
jj:
cmpf,0
jeejj
;产生一定频率的方波,使喇叭发声
movcx,00dffh
xxkk1:
cmpcx,0
jexkk
movdx,ctr155;pc6置1
moval,0dh
outdx,al
movt,0ffffh
calldelay1;延时
movdx,ctr155;pc6置0
moval,0ch
outdx,al
movt,0ffffh
calldelay1;延时
deccx
jmpxxkk1
xkk:
calldelay2;不产生方波,停止发声
decf
jmpjj
ejj:
popcx
ret
noiseendp
begin:
movax,data
movds,ax
callint51;调用8251A子程序,初始化8251A
movdx,ctr155;初始化8255A
moval,10000011b
outdx,al
ww:
leadx,hh;回车换行
movah,9
int21h
callquit;延时退出程序
leadx,hh;回车换行
movah,9
int21h
leadx,buf1;提示按sw4表示插卡
movah,9
int21h
;检测sw4是否按下
clear07h;清sw4状态
wait4:
movdx,302
inal,dx;sw4按下?
pc3=0?
testal,08h;否,则继续检测
jnzwait4
;是则发送卡插入信号
movYN,'O'
sendo
moval,0;接收主控机反馈信息
receivei
cmpal,'Y';确认则继续,否则重新开始
jneww
leadx,buf2;提示设置用户名并发送之
movah,9
int21h
;检测sw1状态
clear01h;清sw1状态
wait1:
movdx,302h;检测sw1是否按下
inal,dx
testal,01h;sw1按下?
pc0=0?
jnzwait1;否则继续检测
;按下则读开关状态(口b),得到用户名
movdx,ctr155b;读b口
inal,dx
movun,al;保存用户名
movYN,al;发送用户名
sendus
jmpreceiv
over:
movax,4c00h;程序退出
int21h
;接收主控机反馈信息
receiv:
receivey
cmpal,'Y';接收的字符和'Y'比较
jnewrong;不合法就提示错误信息
leadx,buf3;合法则提示设置密码并发送之
movah,09h
int21h
clear02h;清sw2状态
wait2:
movdx,302h;检测sw2是否按下
inal,dx
testal,02h;sw2按下?
pc1=0?
jnzwait2;否则继续检测
;按下则读开关状态(口b),得到密码
movdx,ctr155b;读口b
inal,dx
movpd,al;保存密码
movYN,al;发送密码
sendpd
;接收主控机反馈回来的信息
receiveyy
cmpal,'Y';接收的字符和'Y'比较
jnewrong;不相等就提示错误信息,相等则提示登录成功
leadx,buf5;提示登录成功
movah,9
int21h
;此处亮灯提示
callflutter
jmpww;准备第二次刷卡
wrong:
leadx,buf4;显示错误提示信息
movah,9
int21h
;此处声音报警
callnoise
jmpww;准备第二次刷卡
codeends
endbegin
界面:
界面部分由我完成,由于不会其他语言与汇编的接口部分,我只能用简单的汇编来完成一个简单的界面,用*围成一个框然后把我们的宿舍管理系统做一个闪的#围起来这样。
stacksegmentstack
db200dup(0)
stackends
datasegment
datdb0
bufdb'DOMETERYSAFTYSYSTEM$'
dataends
codesegment
assumecs:
code,ss:
stack,ds:
data
start:
movax,data
movds,ax
;设置成320*200彩色图形方式
movah,0
moval,1
int10h
;将背景设置为蓝色
movah,11
movbh,0
movbl,0ch
int10h
;获取当前页号->bh
movah,15
int10h
movsi,bx
;将光标设置在1行1列
movah,2
movdx,0101h
int10h
;在当前光标位置显示39个*
movah,9
moval,'*'
movbl,61h
movcx,39
int10h
;第n列显示一列*
a:
incdh
moval,'*'
movbl,12h
movcx,1
;int10h
callplay
;第n行第20列显示8
moval,'*'
movbl,12h
movdl,39
movcx,1
callplay
incdat
movdl,1
cmpdat,20
jbea
;最后一行显示*
incdh
moval,'*'
movbl,12h
int10h
movcx,39
callplay
;显示小框第一行
movah,2
movdx,0207h
int10h
movah,9
moval,'#'
movbl,9eh
movcx,23
int10h
;movdat,0
;显示小框的第1列
movah,2
movdx,0307h
int10h
movah,9
moval,'#'
movbl,9eh
int10h
movcx,1
;movah,2
;movdx,0407h
;int10h
;movah,9
;moval,'#'
;movbl,92h
;int10h
;movcx,24
;显示小框的第24列
movah,2
movdx,031dh
int10h
movah,9
moval,'#'
movbl,9eh
movcx,1
int10h
;显示最后一行
movah,2
movdx,0407h
int10h
movah,9
moval,'#'
movbl,9eh
movcx,23
int10h
;显示字符
movah,2
movdx,0308h
int10h
leadx,buf
movah,9
int21
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 课程设计 实验 报告