资源描述
电子密码门锁设计重庆大学计硬机课程设计
43
2020年4月19日
文档仅供参考,不当之处,请联系改正。
计算机硬件技术基础课程设计
课题名称:电子密码门锁设计
专 业:自动化专业
班 级:
组 长:
组 员:
组 员:
指导老师:胡青
重庆大学自动化学院
9月
1 基本功能要求
1.1 主要内容:
设计一个密码门锁系统,以扬声器作为发声装置,以4*4键盘作为功能按键,根据预设的密码对门锁实现安全控制。只有密码完全符合才能开门,密码不符时控制扬声器发声报警。在计算机硬件实验系统基础上,自行完成扬声器模块的设计。
1. 密码为6位,输入密码能够开门或修改密码。
2. 用LED显示门的当前状态,以及当前功能状态。
3. 按下开门键,LED显示“输入密码”提示信息,用户输入密码后,若正确则门打开,按下关门键或打开5秒后关门。若密码错误则三色LED用红色显示“密码错”提示信息后,要求用户重新输入密码,3次错误后三色LED红绿交错显示错误提示信息,而且扬声器同时发声报警,按下返回键返回。
4. 若按下设置键,LED显示“输入密码”提示信息,用户输入密码,若正确则LED显示”修改密码“提示信息,要求用户输入新开门密码,按确认键保存新密码后返回,按返回键则放弃修改直接返回。若错误处理规则与开门相同。
2 组员分工
赵秋帆:开门和设置程序的编写,编写主程序将其它子程序整合以及整体调试。
李华东:硬件连线和8259部分中断程序、三色LED子程序的编写。
刘志君:8254部分硬件连线及程序的编写、相关例题的查询以及实验报告的撰写。
3 硬件设计
3.1 器件选择
实验箱上的5片可编程并行I/O口接口芯片8255A,1片可编程定时/计数器8254,1片中断控制器8259(A),6位8段共阴极LED,两个LED小灯以及三色共阳极LED和蜂鸣器。
3.2 器件功能分配设计
1. 4片固定可编程并行I/O口接口芯片8255A控制三个LED显示错误信息
2. 扩展可编程并行I/O口接口芯片8255A控制8段共阴极LED显示信息,同时控制扫描键盘。
3. 可编程定时/计数器8254完成关门定时,扬声器报警频率信号。
4. 中断控制器8259(A)控制中断。
5. 扬声器完成报警。
3.3 硬件连线
根据前面的分析以及器件功能分配,进行硬件连线
地址: 可编程并行I/O口接口芯片8255A接300H
可编程定时/计数器8254接320H
中断控制器8259A接340H
接线:
1. 可编程定时/计数器8254计数器0 CLK接频率信号47KHZ ,GATE接+5V, OUT接计数器
1的CLK
2. 可编程定时/计数器8254计数器1 CLK接计数器0的OUT口,GATE接+5V, OUT接8259IRQ0
3. 可编程定时/计数器8254计数器2 CLK接频率信号3MHZ, GATE接+5V,OUT接扬声器信号输入端
4. 扩展可编程并行I/O口接口芯片8255AA口接LED段选,B口接LED位选,b0接开关状态LED灯,b1接功能状态LED小灯,C口高四位接键盘列信号,低四位接键盘行信号
5. 中断控制器8259(A)INT1接INTR,SP/1接+5V,IRQ0接8254计数器1OUT
6. 蜂鸣器信号接8254计数器2OUT
硬件连线原理图如图
图3.3.1 8254定时/计数器原理图
图3.2.2 键盘接口原理图
图3.3.3 三色LED原理图
图3.3.4 8259原理图
4 软件设计
经过分析,电子密码门锁设计程序分两大部分。其一,开门功能程序,流程图如图2.2.1;其二,修改密码程序,流程图如图2.2.2。使用可编程并行I/O口接口芯片8255A控制6位8段共阴极LED显示提示信息和输入的密码、控制键盘扫描以及控制两个LED小灯分别显示功能状态和开关门状态;使用可编程定时/计数器8254完成计时5S和蜂鸣器信号生成;使用中断控制器8259A控制计时5S后完成自动关门与三色LED红绿交替功能,使用三色LED提示错误。
以下分别为开门程序流程图和设置程序流程图:
否
密码正确否
开始
LED显示当前功能状态及门的开关
开门键A按下
LED提示输入密码
否
是h
否
LED显示开门。计数器开始计时5s
E是否按下
是h
错误计数器清零
返回
三色LED显示Error
错误计数器+1
错误三次
是h
否
蜂鸣器报警。错误计数器清零
三色led红绿交错
F是否按下
是h
否
图4.1.1 开门程序流程图
图4.1.2设置程序流程图
5 使用说明
3.1 功能及显示说明
1. 系统初始密码为000000(密码只能是6位);
2. 密码能够由0~9组成;
3. 开门5S后,自动返回关门状态;
4. 左侧LED小灯:功能指示灯,亮表示开门功能状态,灭表示设置功能状态;
5. 右侧LED小灯:开关门状态指示灯,亮表示打开,灭表示关闭;
6. 提醒输入密码显示为:INPUT;
7. 提醒修改密码显示为:CHANGE;
8. 提示密码错误显示为:Error;
9. 密码错误三色LED显示 为:Error(红色);
10. 错误三次三色LED显示 为:Error (红绿交替 );
11. 错误三次蜂鸣器报警。
3.2 操作说明
1. A键---待机界面时进入开门功能;
2. B键---待机界面时进入设置功能;
3. E键---返回键,开门后,按下返回键返回关门状态
4. F键---确定键,显示提醒时,需按确定键继续;
输入密码后,按确认键确认
提示密码错误,需按确认键重新输入;
报警后,需按确认键返回关门状态。
6 结果显示
在实验板上结果显示
根据题目的要求, 经过调试运行程序,得到了各种情况如下:
(1) 关门状态显示INPUT,如下图6.1.1
图6.1.1 关门状态显示情况
(2)输入密码状态显示,结果如图4.1.2
图6.1.2 输入密码状态显示情况
(2) 开门状态显示,结果如图6.1.3
图4.1.3 开门状态显示
(3) 改密码界面显示CHANGE,结果如图6.1.4
图6.1.4 改密码界面显示
(5) 密码输错三次,三色LED交替闪烁,结果如图6.1.5
图6.1.5 输错三次密码
7 总结
7.1 赵秋帆( 4692)心得体会:
赵秋帆( 4692)心得体会:这次课程设计中,我主要负责开门功能和设置功能的实现,并编写主函数,将其它成员编写的子函数整合在一起,在这次课程设计中,遇到了不少难点,比如,在实现“开门后5秒后关门,或者按关门键关门”该功能中,实现起来就颇为费劲,首先因为按键盘关门,有一个扫描的问题,在扫描程序中,如果不按键,就会一直扫描,没法跳出扫描程序段,就更没法执行5秒关门这一指令,于是,在这里使用了定时中断的方法,利用8254定时5秒,触发中断,使一自定义标志位置1,在按键扫描的程序中加入判断该标志位是否为1,为1则直接跳出扫描程序段,从而解决键盘扫描子程序不按键不可跳出的问题,使得“开门后5秒后关门,或者按关门键关门”该功能得以实现。再比如实现“显示开门或设置的功能状态和门的开关状态”这一功能时,原本是打算,将该两个状态的显示合二为一,一同显示在LED上,后来发现此举不太妥当,一方面因为,不能实时显示门的开关状态以及开门或者设置功能的状态,像显示“输入密码”或是“修改密码”之类需要占用LED显示的时候,就无法显示。另外一方面因为,这样所表示出来门的状态,实际上是比较虚假的,只是取了3个静止状态来表示门的状态:1.开门功能,关门状态2.开门功能,开门状态3.设置功能,关门状态。而门的开关状态,应该是独立出来,这样才更加符合实际。因此我们在这问题的解决上,使用了2个小灯,其中1盏的亮灭代表 开门和设置状态,另外一盏的亮灭代表门的开关状态。可是这样后,便有了新的问题,没有足够的输出口供使用,我们唯一能找到的输出口,只有控制LED6位位选的B口所剩下了2个输出口A1和A0,而要使用A1,A0,且使A1,AO独立起来,就必须在程序里面下功夫,使LED在正常显示的同时,且不影响A1,A0位。为了解决这一问题,我设置了一个名为LEG的存储单元,用来保存A1,A0的状态,在每个需要LED显示的地方,先将LEG的值赋予AL,再用或运算来控制前面六位的位选,从而达到LED正常显示,且不影响A1,A0的目的。
经过这次课程设计,我更加熟练地掌握了硬件基础的知识,复习了8254,8259,8255以及4*4键盘、单色LED、三色LED等硬件的使用,在这次课设中,我们遇到了不少困难,但都在小组的共同努力下,逐一解决,使我们虽然辛苦,却乐在其中。
7.2 李华东( 4678)的心得体会:
刚拿到这次课程设计的题目乍看了一下感觉并不难,刚有点松懈下来,结果到了实验室却发现这次实验大方向虽然简单,可是其中充满了复杂的小细节,在程序编写过程中也多次让我们小组的成员们绞尽脑汁。其中最突出的就是用led来显示提示信息,这原来是一个很简单的任务,在去年课程的学习中我们也对此驾轻就熟,可是到了实战却发现有好多我们想用的字母都拼不出来,为了避免引起界面混乱,我们不得不重新更改了我们的计划,添加了两个led小灯作为指示灯来显示工作状态与门的开关。这虽然加大了我们的工作量,可是却在理论上简化操作界面。可是难题又接踵而至——输出接口不够用了,在上述情况下我们的8255的a口用于段选,b口用于位选,c口用于接键盘,那么仅有的两个输出口就只能从位选上省,可是在led显示程序上位选的扫描显示程序又会影响到led小灯的暗灭。在我们百思不得其解的时候,组里的大神灵机一动,想出了先将寄存器数值(如10000000)与一个00000011再或一个01000000,保护了最后两位不受位选扫描的影响,这种解决问题的方法给了我很大的启发。这之后我们小组一路过关斩将,排除了一个个问题,终于将课设圆满完成。这其中也不乏各种难题,比如8259a中断部分程序的编写就给我造成了很大的困扰,在连续看了一天书之后我终于把它搞懂并完成了程序的编写。
总的来说,这次课程设计使我们熟悉了以前学过的知识,也是我们逐渐的掌握了一些思考方法以及提升了部分技能,同时,团队协作能力也得到了提升,收获不小,也让自己对未来增加了一些自信心。这次的课程设计我对为指令的设计和流程都有了更深的理解,进一步熟悉了计算机硬件技术原理的基本知识,同时也加深了解了模块化程序设计的基本过程,掌握了一些基本的软硬件设计知识并对其进行了基本的运用,在模块化程序设计中运用了很多知识,以及几块芯片8255、8254、8259来实现计数器、定时器、查询的功能等,即实现了对以往所学内容的复习,也让自己更加对她们的实际运用能力得到了增强,使自己比以前的动手能力与对课题的思考能力得到了增强。
经过实践,提高了我的实际操作能力,从以前所学理论上升到实践,真正做到了学有所用,同时也认识到了自己的不足之处,对转移指令、芯片工作方式等都不是很熟悉,可是自己受益匪浅。
7.3 刘志君( 4679)的心得体会:
以前上微机课的时候,因为自己的不重视,我都不知道,硬件到底是什么,用来做什么,怎样实现。当理论和实际发生隔阂,不知道怎样将学的枯燥无味了理论知识融入实际中,这种学习当然会十分苦恼,以至于学习激情大打折扣,因此对硬件连接和汇编语言掌握得一塌糊涂,这也使得这次课程设计一直跟不上组员的节奏。因此我只能尝试着完成组长赵秋帆交给我的一些简单的工作,同时边做边向她们请教。在程序的编写和调试方面我一直是出于半懵状态,在组长对各种状况想方设法进行解决的时候,虽然我并没有能力去给出什么决定性的建议,可是我也还是强迫自己尽可能的加入,尽可能的提出自己的看法。而在这半学习半时间的过程中,我也是学到了很多以前被抛却脑后的硬件连接和汇编知识。
虽然现在让我独自去完成这个课程设计我照样会感到困难,可是课程设计工作中的一部分事情我却相信自己能够做到很好了,比如说8255模块的硬件连接以及8254部分相关程序的编写。现在的我也理解了八段LED位选和段选的具体含义,位选用来控制几个LED灯的显示,而段选则控制这些LED灯显示的内容,也就是各笔画数码管的亮灭。虽然是很基础的知识,可是对于理解硬件连接和数据写入有很大的帮助。
总之,这次实践,补习了我理论课漏掉的知识,提高了我的实际操作能力,从以前所学理论上升到实践,真正做到了学有所用,同时也认识到了自己的不足之处,而且意识到所学理论知识的重要性,这虽然只是一次课程设计,却也是对以后工作的映射,理论学习是工作时间的基础,因此万万不可忽视。而且课程设计能够体现出团队合作程度,紧密合作加上明确分工,能够大大地提高设计速度,在动手设计之前,最好将设计所需要的数据,程序准备好,为了判断设计结果是否正确,有必要在准备阶段计算理论值。仔细分析指令的每一位,以及理清思路,在设计时做到胸有成竹。
8 附录
8.1 程序清单
.486
CODE SEGMENT USE16
ASSUME CS:CODE
ORG 1000H
BEGIN: JMP START
SHOWINPUT DB 06H,37H,73H,3EH,31H,00H ;显示输入密码
SHOWCHANGE DB 39H,76H,77H,37H,7DH,79H ;显示修改密码
SHOWERROR DB 79H,50H,50H,5CH,50H,00H ;显示错误
SHOWSTOP DB 40H,40H,40H,40H,40H,40H ;显示横杠
INPUTWAT DB 40H,40H,40H,40H,40H,40H ;输入密码暂存
PASSWORD DB 3FH,3FH,3FH,3FH,3FH,3FH ;密码储存
PASSWORD1 DB 3FH,3FH,3FH,3FH,3FH,3FH ;密码备份
PASSNUM DB 6 ;输入密码计数标志
CHECKF DB 0 ;密码检测标志
ERRORNUM DB 3 ;错误计数
OTCOUT DB 0 ;开门后关门程序跳出标志
KEYZHI DB 0
LEG DB 1
;**********************************************************主程序开始
START: LEA SI,INPUTWAT
CALL CLR ;清除输入密码存储单元
MOV DX,20CH ;四片8255初始化
MOV EAX,80808080H
OUT DX,EAX
MOV DX,30CH ;扩展8255控制字,AB输出,C高出低入
MOV AL,81H
OUT DX,AL
MOV DX,32CH ;8254计数器0初始化工作在方式2下
MOV AL,34H
OUT DX,AL
MOV DX,32CH ;8254计数器1初始化工作在方式0下与计数器0级联计时5S
MOV AL,50H
OUT DX,AL
MOV DX,32CH ;8245计数器2初始化工作在方式3下
MOV AL,10110110B
OUT DX,AL
MOV DX,340H ;初始化8259 写ICW1
MOV AL,B
OUT DX,AL
MOV DX,348H ;写ICW2中断类型号为40H~47H
MOV AL,40H
OUT DX,AL
MOV DX,348H ;写ICW4
MOV AL,01H
OUT DX,AL
MOV DX,348H ;写OCW1,开放所有IR
MOV AL,00H
OUT DX,AL
CLI
;填开门后关门跳出中断向量
MOV DS,AX
MOV BX,4*40H
MOV AX,OFFSET INTOTCOUT
MOV [BX],AX
MOV AX,SEG INTOTCOUT
MOV [BX+2],AX
;**********************************************************开门功能程序
OPENDOOR: AND LEG,11111101B ;功能指示灯亮
MOV DX,304H
MOV AL,LEG
OUT DX,AL
OSHOWINP: LEA BX,SHOWINPUT ;显示输入密码提示,按下F确认
CALL SHOWANDKEY
CMP CL,0B7H
JZ SETTING
CMP CL,77H
JNZ OSHOWINP
PAA: LEA SI,INPUTWAT
CALL CLR
PA0: MOV PASSNUM,06H ;输入密码,按下D键能够消除上一次输入,按下E键能够重新输入,输入完成后按下F键确认
LEA SI,INPUTWAT
PAL: LEA BX,INPUTWAT
CALL SHOWANDKEY
JMP PA
PASSN: LEA BX,INPUTWAT
CALL SHOWANDKEY
PA: CALL KEYTOSHOW
INC SI
DEC PASSNUM
JNZ PASSN
PA3: CALL SHOWANDKEY
CMP CL,77H
JZ PA2
JMP PA3
PA2: MOV PASSNUM,06H
CALL CHECK ;调用密码匹配
CMP CHECKF,01H
JNZ PASSER
PASSRI: AND LEG,11111110B
MOV DX,304H ;功能指示灯亮
MOV AL,LEG
OUT DX,AL ;密码正确,开门指示灯亮,按下E键或者5秒后关门
STI
CALL OPENTOCLOSE
CALL SHOWANDKEY
CMP CL,7BH
JNZ PASSRI
CLI
OR LEG,00000001B
MOV ERRORNUM,3
JMP START
PASSER: CALL LER3
MOV DX,328H ;计数器2报警解除计数初值
MOV AX,0
OUT DX,AL
MOV AL,AH
OUT DX,AL
JMP START
;************************************************************设置功能程序
SETTING:MOV DX,304H ;功能指示灯灭
OR LEG,00000010B
MOV AL,LEG
OUT DX,AL
SSHOWINP:LEA BX,SHOWINPUT ;提示输入密码
CALL SHOWANDKEY
CMP CL,0BBH
JZ OPENDOOR
CMP CL,77H
JNZ SSHOWINP
PBB: LEA SI,INPUTWAT
CALL CLR ;输入密码
PB0: MOV PASSNUM,06H ;按下D键能够消除上一次输入,按下E键能够重新输入,输入完成后按下F键确认
LEA SI,INPUTWAT
PBL: LEA BX,INPUTWAT
CALL SHOWANDKEY
JMP PB
PASSN1: LEA BX,INPUTWAT
CALL SHOWANDKEY
PB: CALL KEYTOSHOW
INC SI
DEC PASSNUM
JNZ PASSN1
PB3: CALL SHOWANDKEY
CMP CL,77H
JZ PB2
JMP PB3
PB2: MOV PASSNUM,06H
CALL CHECK ;调用密码匹配
CMP CHECKF,01H
JNZ PASSERL
PASSRI1: ;密码正确,提示修改密码,按下F继续
LEA BX,SHOWCHANGE
CALL SHOWANDKEY
CMP CL,77H
JNZ PASSRI1
PCC: LEA SI,PASSWORD1
CALL CLR ;输入新密码
PC0: MOV PASSNUM,06H ;按下D键能够消除上一次输入,按下E键能够重新输入,输入完成后按下F键确认
LEA SI,PASSWORD1
PCL: LEA BX,PASSWORD1
CALL SHOWANDKEY
JMP PC
CHANGE: LEA BX,PASSWORD1
CALL SHOWANDKEY
PC: CALL KEYTOSHOW
INC SI
DEC PASSNUM
JNZ CHANGE
PC3: CALL SHOWANDKEY
CMP CL,77H
JZ YESNO
JMP PC3
YESNO: LEA BX,PASSWORD1
CALL SHOWANDKEY ;按下E键取消修改并返回
CMP CL,7BH
JZ NO
YES: CMP CL,77H ;修改成功,按F确定并返回
JNZ YESNO
LEA BX,PASSWORD1
LEA SI,PASSWORD
MOV AH,0
CLEAR1: MOV AL,AH
XLAT
MOV BYTE PTR[SI],AL
INC SI
INC AH
CMP AH,06H
JNZ CLEAR1
NO: JMP START
PASSERL:CALL LER3
MOV DX,328H ;计数器2报警解除计数初值
MOV AX,0
OUT DX,AL
MOV AL,AH
OUT DX,AL
LEA SI,INPUTWAT
CALL CLR
JMP START
CLR PROC NEAR
MOV AL,6
INPUTWATL:MOV BYTE PTR [SI],40H
INC SI
DEC AL
JNZ INPUTWATL
RET
CLR ENDP
SHOWANDKEY PROC NEAR
SHOWSTATEL: MOV AH,00H
MOV KEYZHI,80H ;位选
SHOWSTATEL1:MOV AL,AH
XLAT
MOV DX,300H
OUT DX,AL ;送段
MOV DX,304H
MOV AL,LEG
OR AL,KEYZHI
OUT DX,AL ;送位选
ROR KEYZHI,1
INC AH ;位选向右移位
KSCANL: MOV CL,0EFH ;按键扫描
NXTCOLL:MOV AL,CL
MOV DX,308H
OUT DX,AL
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ FNDKEYL
ROL CL,1
JC NXTCOLL
CMP OTCOUT,1
JNZ LL
MOV CL,7BH
MOV OTCOUT,0
RET
LL: CMP AH,06H
JZ SHOWSTATEL
JMP SHOWSTATEL1
FNDKEYL:AND CL,0F0H ;键特征值形成
OR CL,AL
CALL SHOWHENG
CALL DELY
KEYUPL: MOV AL,0 ;按键防抖动
MOV DX,308H
OUT DX,AL
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ KEYUPL
RET
SHOWANDKEY ENDP
;***************************************************键特征值到短代码的转换
KEYTOSHOW PROC NEAR
CMP CL,0EEH ;0
JNZ KL1
MOV BYTE PTR[SI],3FH
RET
KL1: CMP CL,0EDH ;1
JNZ KL2
MOV BYTE PTR[SI],06H
RET
KL2: CMP CL,0EBH ;2
JNZ KL3
MOV BYTE PTR[SI],5BH
RET
KL3: CMP CL,0E7H ;3
JNZ KL4
MOV BYTE PTR[SI],4FH
RET
KL4: CMP CL,0DEH ;4
JNZ KL5
MOV BYTE PTR[SI],66H
RET
KL5: CMP CL,0DDH ;5
JNZ KL6
MOV BYTE PTR[SI],6DH
RET
KL6: CMP CL,0DBH ;6
JNZ KL7
MOV BYTE PTR[SI],7DH
RET
KL7: CMP CL,0D7H ;7
JNZ KL8
MOV BYTE PTR[SI],07H
RET
KL8: CMP CL,0BEH ;8
JNZ KL9
MOV BYTE PTR[SI],7FH
RET
KL9: CMP CL,0BDH ;9
JNZ KLA
MOV BYTE PTR[SI],6FH
RET
KLA: CMP CL,0BBH ;A
JNZ KLB
MOV BYTE PTR[SI],77H
RET
KLB: CMP CL,0B7H ;B
JNZ KLC
MOV BYTE PTR[SI],7CH
RET
KLC: CMP CL,7EH ;C
JNZ KL0
MOV BYTE PTR[SI],39H
KL0: RET
KEYTOSHOW ENDP
;********************************************************密码检测程序
CHECK PROC NEAR
LEA SI,INPUTWAT
LEA DI,PASSWORD
CHECKL0:MOV AL,BYTE PTR[SI]
MOV AH,BYTE PTR[DI]
CMP AL,AH
JNZ CHECKER
INC SI
INC DI
DEC PASSNUM
JZ CHECKRI
JMP CHECKL0
CHECKER:MOV CHECKF,0
MOV PASSNUM,06H
RET
CHECKRI:MOV CHECKF,1
MOV PASSNUM,06H
RET
CHECK ENDP
;***********************************************延时子程序
DELY PROC NEAR
PUSH CX
MOV CX,0FFFFH
DELY_L0:LOOP DELY_L0
POP CX
RET
DELY ENDP
;***********************************************三色LED子程序
LER3 PROC NEAR
DEC ERRORNUM
JZ WAR
MOV DX,200H ;5片8255给段选(每片前一个)
MOV EAX, 0FFAFAF86H
OUT DX,EAX
MOV DX,204H ;5片8255给段选(每片后一个)
MOV EAX, 0FFFFA3AFH
OUT DX,EAX
MOV DX,208H ;三色LED底色为红色
MOV EAX,05050505H
OUT DX,EAX
ABC: LEA BX,SHOWERROR
CALL SHOWANDKEY ;判断是否按下返回
CMP CL,77H
JNZ ABC
RET
WAR: MOV DX,328H ;错误三次,计数器2报警计数初值
MOV AX,30000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,200H ;5片8255给段选(每片前一个)
MOV EAX,0FFAFAF86H
OUT DX,EAX
MOV DX,204H ;5片8255给段选(每片后一个)
MOV EAX,0FFFFA3AFH
OUT DX,EAX
RETURN: LEA BX,SHOWERROR
MOV DX,208H ;三色LED红绿交替
MOV EAX,0A0A0A0AH
OUT DX,EAX
CALL DELY
MOV DX,208H
MOV EAX,05050505H
OUT DX,EAX
CALL DELY
STI
CALL ABCD
CALL SHOWANDKEY ;判断是否按下返回
CMP CL,77H
CLI
JNZ RETURN
MOV ERRORNUM,03H
RET
LER3 ENDP
;*****************************************************开门后关门跳出标识符中断程序
INTOTCOUT PROC NEAR
MOV OTCOUT,1
MOV AL,20H
MOV DX,340H
OUT DX,AL
IRET
INTOTCOUT ENDP
;*******************************************************开门后关门在程序
OPENTOCLOSE PROC NEAR
MOV DX,320H
MOV AX,47000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,324H
MOV AL,5
OUT DX,AL
RET
OPENTOCLOSE ENDP
ABCD PROC NEAR
MOV DX,320H
MOV AX,10000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,324H
MOV AL,1
OUT DX,AL
RET
ABCD ENDP
;*****************************************************
SHOWHENG PROC NEAR
MOV AL,40H ;LED显示为横杠
MOV DX,300H
OUT DX,AL
MOV DX,304H
MOV AL,LEG
OR AL,11111100B
OUT DX,AL
RET
SHOWHENG ENDP
CODE ENDS
END START
8.2 参考文献
[1] 仰天怡,邓亚平,黄勤 《计算机硬件技术基础》重庆大学出版社,
[2] 黄勤,高富强,杨天怡 《计算机硬件技术基础实验教程》重庆大学出版社,
展开阅读全文