密码的设置和验证.docx
- 文档编号:29311151
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:24
- 大小:698.77KB
密码的设置和验证.docx
《密码的设置和验证.docx》由会员分享,可在线阅读,更多相关《密码的设置和验证.docx(24页珍藏版)》请在冰豆网上搜索。
密码的设置和验证
华北科技学院
《接口技术》
课程设计报告
班级:
姓名:
设计题目:
密码的设置和验证
设计时间:
2012-6-4至2012-6-15
指导教师:
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
评阅教师:
_____
一、课程设计目的
、掌握8253的基本工作原理和编程方法。
2、掌握8255的基本工作原理和编程方法。
3、掌握数码管显示数字的原理。
4、了解数/模转换器的基本原理,掌握DAC0832芯片的使用方法。
5、了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。
进行程序设计方法和芯片使用基本训练,巩固在课堂上学到的有关芯片初始化编程和使用的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉接口技术的原理及应用,达到能独立使用现有芯片编制程序并正确运行的水平。
二、课程设计内容
密码的设置和验证:
按原理图连接好电路。
将8253OUT0接8255C口PC7,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,8255的C口PC5~PC4与位码驱动输入端S1、S0相接,dp接地(关闭),8255的C口PC3~PC0与逻辑电平开关K3~K0相接,K3~K0又与LED灯L3~L0相接。
编程实现如下功能:
1、在10秒钟内设定好4位密码(每位为0或1)。
七段数码管用于计时:
9-0,8*8双色LED显示红色“SET”,4位密码由逻辑电平开关低四位K3-K0拨入。
2、输入密码,有三次验证密码的机会。
10s内输入密码,七段数码管用于计时:
9-0,8*8双色LED显示红色“IN”,4位密码由逻辑电平开关低四位K3-K0拨入。
3、若输入的错误密码错误,则发出警报声而后继续让输入密码。
4、若三次都输入错误则报警提示。
5、若输入密码正确则验证成功,8*8双色LED显示红色“OK”,提示SUCCESS。
三、课程设计原理及原理图
原理:
8253可编程定时/计数器
方式控制字:
D7~D6:
00计数器0,01计数器1,10计数器2,11非法。
D5~D4:
00计数器锁存命令,01只读写低字节,10只读写高字节,11先读写低字节后读写高。
D3~D1:
000方式0,001方式1,010方式2,011方式3,100方式4,101方式5。
D0:
0二进制,1十进制。
并行I/O接口芯片8255
端口A:
PA0~PA7
A组,支持工作方式0、1、2
端口B:
PB0~PB7
B组,支持工作方式0、1
端口C:
PC0~PC7
仅支持工作方式0、A组控制高4位PC4~PC7、B组控制低4位PC0~PC3
DAC0832数模转换器
数字量→按权相加→模拟量
七段数码管
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
双色点阵LED显示器
实验仪上设有一个共阳极8×8点阵的红绿两色LED显示器,其点阵结构如图所示。
该点阵对外引出24条线,其中8条行线,8条红色列线,8条绿色列线。
若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。
如欲显示汉字,采用逐列循环发光。
“SET”点阵代码:
①行代码输出40H;红色列代码输01H;第一列1个红色LED发光。
②行代码输出7CH;红色列代码输02H;第二列5个红色LED发光。
③行代码输出40H;红色列代码输04H;第三列1个红色LED发光。
④行代码输出54H;红色列代码输08H;第四列3个红色LED发光。
⑤行代码输出7CH;红色列代码输10H;第五列5个红色LED发光。
⑥行代码输出08H;红色列代码输20H;第六列1个红色LED发光。
⑦行代码输出54H;红色列代码输40H;第七列3个红色LED发光。
⑧行代码输出20H;红色列代码输80H;第八列1个红色LED发光。
“IN”点阵代码:
行7EH;②行04H;③行08H;④行10H;⑤行20H;⑥行7EH;⑦行00H;⑧行7EH。
“OK”点阵代码:
行42H;②行24H;③行14H;④行7EH;⑤行7EH;⑥行42H;⑦行42H;⑧行7EH。
原理图(电路图):
四、流程图
主流程图
熄灭七段数码管灯(LED_OFF):
打开七段数码管灯S0(LED_ONS0):
发出错误警报声(ALERT):
五、程序源代码
;宏定义
;*************************
SCREEN_MODELMACRO
MOVAH,6
MOVAL,0
MOVBH,34H
MOVBL,0AH
MOVCX,0
MOVDH,24
MOVDL,79
INT10H
ENDM
;-----------------------
;输出字符串
OUTSTRMACROSTR
LEADX,STR
MOVAH,09H
INT21H
ENDM
;**************************
DATASSEGMENT
MESS1DB"pleaseinputpasswordfromthelogic_switch!
",0dh,0ah
DB"(10secondstodothis,thelow4bits!
)$"
MESS2DB0dh,0ah,"inputpasswordformthelogic_swithtoOpentheclock!
",0dh,0ah
DB"(youhave3chances)$"
MESS3DB0dh,0ah,"Pressanykeytocontinue……",0dh,0ah,'$'
MESS4DB0dh,0ah,"youloseachance!
",0dh,0ah,'$'
MESS5DB0dh,0ah,"Opensuccess!
",0dh,0ah,'$'
PASSWORDDB?
I82531EQU0280H
I8253CEQU0283H
I8255AEQU288H
I8255CEQU28AH
I8255KEQU28BH
I0832AEQU2A8h
LED_TableDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
ICS1EQU0290H
ICS2EQU0298H
ICS3EQU02A0H
COLUMNDB00h,01h,02h,03h,04h,05h,06h,07h
WORD_SETDB40H,7CH,40H,54H,7CH,08H,54H,20H
WORD_INDB7EH,04H,08H,10H,20H,7EH,00H,7EH
WORD_FDB00H,00H,90H,90H,90H,0FFH,00H,00H
WORD_TDB00H,40H,40H,7EH,40H,40H,00H,00H
data1DB80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh
DB0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
DB80h,66h,4eh,38h,25h,15h,09h,04h
DB00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据
DATASENDS
STACKSSEGMENT
DB200DUP(?
)
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVES,AX
SCREEN_MODEL;置屏显
OUTSTRMESS1
;****************设定密码***********************************
CALLLED_OFF;七段数码管灯灭
MOVCX,10
AGAIN:
MOVAL,00110010B;计数器0,先写高8位后写低8,二进制
MOVAX,3000H
MOVDX,I82531
OUTDX,AL
MOVAL,AH
OUTDX,AL;写计数初值
MOVDX,I8255K
MOVAL,10001001B;方式0,A口出,C口入
OUTDX,AL;写8255控制字
MOVDX,I8255C
TEST1:
INAL,DX;读C口数据
TESTAL,10000000B;是否计数完1秒
JZTEST1
PUSHCX
;***********显示计时***********************
MOVAX,CX
DECAX
MOVBX,AX
MOVDX,I8255K
MOVAL,10001001B;方式0,A口出,C口入
OUTDX,AL;写8255控制字
LEASI,LED_Table
MOVBH,0
ADDSI,BX
CALLLED_ONS0;打开七段数码管灯S0
MOVAL,[SI]
MOVDX,I8255A
OUTDX,AL;显示计数值
;***********显示SET***********************
MOVCX,080h
d2:
MOVAH,01h
PUSHCX
MOVCX,8
MOVSI,OFFSETCOLUMN
next:
MOVAL,[SI]
MOVBX,OFFSETWORD_SET
XLAT;得到第一行码
MOVDX,ICS1
OUTDX,AL
MOVAL,AH
MOVDX,ICS2
OUTDX,AL;显示第一行红
SHLAH,01
INCSI
;CALLSHORT_DELAY
LOOPnext
POPCX
;CALLSHORT_DELAY
LOOPd2
;***********显示SET结束***********************
;***********一轮结束***********************
;CALLDELAY
POPCX
LOOPAGAIN
CALLLED_OFF
MOVDX,I8255K
MOVAL,10001001B;方式0,A口出,C口入
OUTDX,AL;写8255控制字
MOVDX,I8255C
INAL,DX;从8255C口读入数据,即读入设定的密码
ANDAL,00001111B;取其低4位
MOVPASSWORD,AL;将设定的密码保存起来
;****************设定密码结束***********************************
;SCREEN_MODEL;置屏显
OUTSTRMESS2
OUTSTRMESS3
MOVAH,1
INT21H
;****************输入密码开锁,有3次开锁机会*********************
MOVCX,3
OPEN_AGAIN:
PUSHCX
MOVCX,10
AGAIN2:
PUSHCX
;***********显示计时***********************
MOVAX,CX
DECAX
MOVBX,AX
MOVDX,I8255K
MOVAL,10001001B;方式0,A口出,C口入
OUTDX,AL;写8255控制字
LEASI,LED_Table
MOVBH,0
ADDSI,BX
CALLLED_ONS0;打开七段数码管灯S0
MOVAL,[SI]
MOVDX,I8255A
OUTDX,AL;显示计数值
;***********显示IN***********************
MOVCX,080h
D1:
MOVAH,01h
PUSHCX
MOVCX,8
MOVSI,OFFSETCOLUMN
next1:
MOVAL,[SI]
MOVBX,OFFSETWORD_IN
XLAT;得到第一行码
MOVDX,ICS1
OUTDX,AL
MOVAL,AH
MOVDX,ICS2
OUTDX,AL;显示第一行黄
SHLAH,01
INCSI
CALLSHORT_DELAY
LOOPnext1
POPCX
CALLSHORT_DELAY
LOOPD1
;***********显示IN结束***********************
POPCX
LOOPAGAIN2
CALLLED_OFF
;***********一轮结束***********************
POPCX
MOVDX,I8255K
MOVAL,10001001B;方式0,A口出,C口入
OUTDX,AL;写8255控制字
MOVDX,I8255C
INAL,DX;从8255C口读入数据,即读入输入的密码
ANDAL,00001111B;取其低4位
CMPPASSWORD,AL
JZOPEN_SUCCESS
OUTSTRMESS4
CALLALERT;发出错误警报声
LOOPOPEN_AGAIN
JMPEXIT
OPEN_SUCCESS:
OUTSTRMESS5
;***********显示T***********************
MOVCX,080h
D3:
MOVAH,01h
PUSHCX
MOVCX,8
MOVSI,OFFSETCOLUMN
next3:
MOVAL,[SI]
MOVBX,OFFSETWORD_T
XLAT;得到第一行码
MOVDX,ICS1
OUTDX,AL
MOVAL,AH
MOVDX,ICS2
OUTDX,AL;显示第一行红
SHLAH,01
INCSI
CALLSHORT_DELAY
LOOPnext3
POPCX
CALLSHORT_DELAY
LOOPD3
CALLMUSIC1
;***********显示T结束***********************
EXIT:
MOVAH,4CH
INT21H
;***********七段数码管灯灭与亮*****************
LED_OFFPROCNEAR;熄灭七段数码管灯
PUSHDX
PUSHAX
MOVAL,10000001B;方式0,A口出,C口高4位出,低4位入
MOVDX,I8255K
OUTDX,AL
MOVAL,00001000B;PC4置0
OUTDX,AL
MOVAL,00001010B;PC5置0
OUTDX,AL
POPAX
POPDX
RET
LED_OFFENDP
;---------------------------------------------------
LED_ONS0PROCNEAR;打开七段数码管灯S0
PUSHDX
PUSHAX
MOVAL,10000001B;方式0,A口出,C口高4位出,低4位入
MOVDX,I8255K
OUTDX,AL
MOVAL,00001001B;PC4置1
OUTDX,AL
MOVAL,00001010B;PC5置0
OUTDX,AL
POPAX
POPDX
RET
LED_ONS0ENDP
;***************************************
;***********延迟子程序******************
SHORT_DELAYPROCNEAR;短延迟子程序
PUSHCX
MOVCX,0ffffh
ccc:
LOOPccc
POPCX
RET
SHORT_DELAYENDP
;----------------------------------------------
DELAYPROCNEAR;长延时子程序
PUSHCX
PUSHDX
MOVCX,0A000H
_1:
MOVDX,8088H
_2:
DECDX
JNZ_2
LOOP_1
POPDX
POPCX
RET
DELAYENDP
;**************************************************
ALERTPROCNEAR
PUSHCX
MOVCX,200;取200次32个正弦波数据
ddd:
MOVSI,0
lll:
MOVAL,data1[SI];取正弦波数据
MOVDX,I0832A
OUTDX,AL;放音
CALLSHORT_DELAY
INCSI
CMPSI,32;是否取完32个数据
JLlll;若没有,则继续
LOOPddd;总循环次数60是否完,没有,则继续
POPCX
RET
ALERTENDP
;***************************************
CODESENDS
ENDSTART
六、结果
提示信息,10s内通过逻辑电平开关设定密码10s内通过逻辑电平开关输入密码实验箱上:
设定的密码为1111
双色点阵LED显示器相识SET
②显示提示信息,
实验箱上:
输入的密码为1001,输入的密码与设定的密码1111不相同,发出开锁不成功警报声,再次输入,不同,再次发出警报声,第三次输入1111,提示信息SUCCESS!
实验箱显示:
数码管显示倒计时,双色点阵器显示IN,验证密码
④验证成功,实验箱显示“OK”,屏幕提示信息”SUCCESS!
”
七、课程设计总结及体会
在设计的过程中我遇到过许多问题。
如使用8253计时,采用方式0,输入时钟频率1MHZ,初值为65536,理论上是每隔1S输出1个高电平,但在实际中利用查询方式查询高电平时,与理论值不同。
再如,使用七段数码管显示计时,比如显示‘13’,‘1’显示得极短、‘3’显示得较长,很不协调,最终只用了一位显示计时。
通过两个星期的课程设计,我对有关芯片的初始化编程和使用的基本知识、基本方法有了更深的认识,学会了应用8255、DAC0832、七段数码管等编写程序实现一些简单的功能,同时也意识到自己的不足,所谓越学越感觉到知识的欠缺,自己所想的无法用知识去体现出来或者结果跟思路相悖却找不到症结所在。
动手能力是计算机系学生应具有而且要强加练习的一种能力,这次课设是我充分的发挥了这一点,而且不仅现在,在以后的工作中也要多动手,多实践。
创新思维也是计算机系培养的重点,再简单的东西动动脑就能做得漂亮,得到同学们的称赞。
这次课设也正是在这个的基础之上来完成的。
这次课程设计使我收获甚多。
在此,感谢培养我的老师们。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码 设置 验证