密码的设置和验证

华 北 科 技 学 院

《接 口 技 术》

课 程 设 计 报 告

班级

设计题目: 密码的设置和验证 设计时间: 2012-6-4 至 2012-6-15 指导教师: 评 语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩: 评阅教师:_____

一、课程设计目的

1、掌握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、 SUCCESS。

若输入的错误密码错误,则发出警报声而后继续让输入密码。 若三次都输入错误则报警提示。

若输入密码正确则验证成功,8*8双色LED显示红色“OK”,提示

三、课程设计原理及原理图

原理:⑴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; 红色列代码输 20 H;第六列1个红色LED发光。 ⑦行代码输出 54H; 红色列代码输 40 H;第七列3个红色LED发光。 ⑧行代码输出 20H; 红色列代码输 80 H;第八列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):

发出错误警报声(

五、程序源代码

;宏定义

;************************* SCREEN_MODEL MACRO MOV AH,6 MOV AL,0 MOV BH,34H MOV BL,0AH MOV CX,0 MOV DH,24 MOV DL,79 INT 10H ENDM

;----------------------- ;输出字符串

OUTSTR MACRO STR LEA DX,STR MOV AH,09H INT 21H ENDM

;**************************

DATAS SEGMENT MESS1 DB "please input password from the logic_switch! " ,0dh,0ah DB "(10 seconds to do this,the low 4 bits!) $" MESS2 DB 0dh,0ah,"input password form the logic_swith to Open clock!" ,0dh,0ah

DB " ( you have 3 chances ) $" MESS3 DB 0dh,0ah,"Press any key to continue…… ",0dh,0ah,'$' MESS4 DB 0dh,0ah,"you lose a chance! ",0dh,0ah,'$' MESS5 DB 0dh,0ah,"Open success! ",0dh,0ah,'$' PASSWORD DB ? I82531 EQU 0280H

I8253C EQU 0283H I8255A EQU 288H I8255C EQU 28AH I8255K EQU 28BH

I0832A EQU 2A8h

LED_Table DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

ICS1 EQU 0290H ICS2 EQU 0298H

the

ICS3 EQU 02A0H

COLUMN DB 00h,01h,02h,03h,04h,05h,06h,07h WORD_SET DB 40H,7CH,40H,54H,7CH,08H,54H,20H

WORD_IN DB 7EH,04H,08H,10H,20H,7EH,00H,7EH WORD_F DB 00H,00H,90H,90H,90H,0FFH,00H,00H WORD_T DB 00H,40H,40H,7EH,40H,40H,00H,00H

data1 DB 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh DB 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h DB 80h,66h,4eh,38h,25h,15h,09h,04h DB 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据 DATAS ENDS

STACKS SEGMENT DB 200 DUP (?) STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX MOV ES,AX

SCREEN_MODEL ;置屏显 OUTSTR MESS1

;****************设定密码*********************************** CALL LED_OFF ;七段数码管灯灭 MOV CX,10 AGAIN:

MOV AL,00110010B ;计数器0,先写高8位后写低8,二进制 MOV AX,3000H MOV DX,I82531 OUT DX,AL MOV AL,AH OUT DX,AL ;写计数初值

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

MOV DX,I8255C

TEST1: IN AL,DX ;读C口数据

TEST AL,10000000B;是否计数完1秒 JZ TEST1 PUSH CX

;***********显示计时*********************** MOV AX,CX DEC AX

MOV BX,AX

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

LEA SI,LED_Table MOV BH,0 ADD SI,BX CALL LED_ONS0 ;打开七段数码管灯S0 MOV AL,[SI] MOV DX,I8255A OUT DX,AL ;显示计数值

;***********显示SET*********************** MOV CX,080h d2: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next: MOV AL,[SI] MOV BX,OFFSET WORD_SET XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行红 SHL AH,01 INC SI

;CALL SHORT_DELAY LOOP next POP CX ;CALL SHORT_DELAY LOOP d2

;***********显示SET结束***********************

;***********一轮结束*********************** ;CALL DELAY

POP CX

LOOP AGAIN

CALL LED_OFF

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字 MOV DX,I8255C IN AL,DX ;从8255C口读入数据,即读入设定的密码 AND AL,00001111B ;取其低4位

MOV PASSWORD,AL ;将设定的密码保存起来

;****************设定密码结束***********************************

;SCREEN_MODEL ;置屏显 OUTSTR MESS2

OUTSTR MESS3 MOV AH,1

INT 21H

;****************输入密码开锁,有3次开锁机会********************* MOV CX,3 OPEN_AGAIN: PUSH CX MOV CX,10 AGAIN2:

PUSH CX

;***********显示计时*********************** MOV AX,CX DEC AX

MOV BX,AX

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

LEA SI,LED_Table MOV BH,0 ADD SI,BX CALL LED_ONS0 ;打开七段数码管灯S0 MOV AL,[SI] MOV DX,I8255A OUT DX,AL ;显示计数值

;***********显示IN*********************** MOV CX,080h D1: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next1: MOV AL,[SI] MOV BX,OFFSET WORD_IN XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行黄 SHL AH,01 INC SI

CALL SHORT_DELAY LOOP next1 POP CX CALL SHORT_DELAY LOOP D1

;***********显示IN结束*********************** POP CX LOOP AGAIN2 CALL LED_OFF

;***********一轮结束*********************** POP CX MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字 MOV DX,I8255C IN AL,DX ;从8255C口读入数据,即读入输入的密码 AND AL,00001111B ;取其低4位 CMP PASSWORD,AL JZ OPEN_SUCCESS OUTSTR MESS4

CALL ALERT;发出错误警报声 LOOP OPEN_AGAIN JMP EXIT OPEN_SUCCESS:

OUTSTR MESS5

;***********显示T*********************** MOV CX,080h

D3: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next3: MOV AL,[SI] MOV BX,OFFSET WORD_T XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行红 SHL AH,01 INC SI

CALL SHORT_DELAY LOOP next3 POP CX CALL SHORT_DELAY LOOP D3

CALL MUSIC1 ;***********显示T结束***********************

EXIT:MOV AH,4CH INT 21H

;***********七段数码管灯灭与亮***************** LED_OFF PROC NEAR ;熄灭七段数码管灯 PUSH DX

PUSH AX

MOV AL,10000001B ;方式0,A口出,C口高4位出,低4位入 MOV DX,I8255K OUT DX,AL

MOV AL,00001000B ;PC4置0 OUT DX,AL

MOV AL,00001010B ;PC5置0 OUT DX,AL POP AX

POP DX RET

LED_OFF ENDP

;---------------------------------------------------

LED_ONS0 PROC NEAR ;打开七段数码管灯S0 PUSH DX

PUSH AX

MOV AL,10000001B ;方式0,A口出,C口高4位出,低4位入

MOV DX,I8255K OUT DX,AL

MOV AL,00001001B ;PC4置1 OUT DX,AL

MOV AL,00001010B ;PC5置0 OUT DX,AL POP AX

POP DX RET

LED_ONS0 ENDP

;***************************************

;***********延迟子程序****************** SHORT_DELAY PROC NEAR ;短延迟子程序 PUSH CX MOV CX,0ffffh ccc: LOOP ccc POP CX RET

SHORT_DELAY ENDP

;---------------------------------------------- DELAY PROC NEAR ; 长延时子程序 PUSH CX PUSH DX

MOV CX,0A000H _1: MOV DX,8088H _2: DEC DX JNZ _2 LOOP _1 POP DX POP CX RET

DELAY ENDP

;************************************************** ALERT PROC NEAR PUSH CX MOV CX,200 ;取200次32个正弦波数据 ddd: MOV SI,0

lll: MOV AL,data1[SI] ;取正弦波数据 MOV DX,I0832A OUT DX,AL ;放音 CALL SHORT_DELAY INC SI CMP SI,32 ;是否取完32个数据 JL lll ;若没有,则继续

LOOP ddd ;总循环次数60是否完,没有,则继续 POP CX RET

ALERT ENDP

;*************************************** CODES ENDS

END START

六、结果

①提示信息,10s内通过逻辑电平开关设定密码10s内通过逻辑电平开关输入密码实验箱上:设定的密码为

1111

双色点阵LED显示器相识SET

②显示提示信息,

实验箱上:输入的密码为1001,输入的密码与设定的密码1111不相同,发出开锁不成功警报声,再次输入,不同,再次发出警报声,第三次输入1111,提示信息SUCCESS!

实验箱显示:数码管显示倒计时,双色点阵器显示IN,验证密码

④验证成功,实验箱显示“OK”,屏幕提示信息”SUCCESS!”

七、课程设计总结及体会

在设计的过程中我遇到过许多问题。如使用8253 计时,采用方式0,输入时钟频率1MHZ,初值为65536,理论上是每隔1S输出1个高电平,但在实际中利用查询方式查询高电平时,与理论值不同。再如,使用七段数码管显示计时,比如显示‘13’,‘1’显示得极短、‘3’显示得较长,很不协调,最终只用了一位显示计时。

通过两个星期的课程设计,我对有关芯片的初始化编程和使用的基本知识、基本方法有了更深的认识,学会了应用8255、DAC0832、七段数码管等编写程序实现一些简单的功能,同时也意识到自己的不足,所谓越学越感觉到知识的欠缺,自己所想的无法用知识去体现出来或者结果跟思路相悖却找不到症结所在。

动手能力是计算机系学生应具有而且要强加练习的一种能力,这次课设是我充分的发挥了这一点,而且不仅现在,在以后的工作中也要多动手,多实践 。

创新思维也是计算机系培养的重点,再简单的东西动动脑就能做得漂亮,得到同学们的称赞。这次课设也正是在这个的基础之上来完成的。这次课程设计使我收获甚多。在此,感谢培养我的老师们。

华 北 科 技 学 院

《接 口 技 术》

课 程 设 计 报 告

班级

设计题目: 密码的设置和验证 设计时间: 2012-6-4 至 2012-6-15 指导教师: 评 语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩: 评阅教师:_____

一、课程设计目的

1、掌握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、 SUCCESS。

若输入的错误密码错误,则发出警报声而后继续让输入密码。 若三次都输入错误则报警提示。

若输入密码正确则验证成功,8*8双色LED显示红色“OK”,提示

三、课程设计原理及原理图

原理:⑴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; 红色列代码输 20 H;第六列1个红色LED发光。 ⑦行代码输出 54H; 红色列代码输 40 H;第七列3个红色LED发光。 ⑧行代码输出 20H; 红色列代码输 80 H;第八列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):

发出错误警报声(

五、程序源代码

;宏定义

;************************* SCREEN_MODEL MACRO MOV AH,6 MOV AL,0 MOV BH,34H MOV BL,0AH MOV CX,0 MOV DH,24 MOV DL,79 INT 10H ENDM

;----------------------- ;输出字符串

OUTSTR MACRO STR LEA DX,STR MOV AH,09H INT 21H ENDM

;**************************

DATAS SEGMENT MESS1 DB "please input password from the logic_switch! " ,0dh,0ah DB "(10 seconds to do this,the low 4 bits!) $" MESS2 DB 0dh,0ah,"input password form the logic_swith to Open clock!" ,0dh,0ah

DB " ( you have 3 chances ) $" MESS3 DB 0dh,0ah,"Press any key to continue…… ",0dh,0ah,'$' MESS4 DB 0dh,0ah,"you lose a chance! ",0dh,0ah,'$' MESS5 DB 0dh,0ah,"Open success! ",0dh,0ah,'$' PASSWORD DB ? I82531 EQU 0280H

I8253C EQU 0283H I8255A EQU 288H I8255C EQU 28AH I8255K EQU 28BH

I0832A EQU 2A8h

LED_Table DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

ICS1 EQU 0290H ICS2 EQU 0298H

the

ICS3 EQU 02A0H

COLUMN DB 00h,01h,02h,03h,04h,05h,06h,07h WORD_SET DB 40H,7CH,40H,54H,7CH,08H,54H,20H

WORD_IN DB 7EH,04H,08H,10H,20H,7EH,00H,7EH WORD_F DB 00H,00H,90H,90H,90H,0FFH,00H,00H WORD_T DB 00H,40H,40H,7EH,40H,40H,00H,00H

data1 DB 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh DB 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h DB 80h,66h,4eh,38h,25h,15h,09h,04h DB 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据 DATAS ENDS

STACKS SEGMENT DB 200 DUP (?) STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX MOV ES,AX

SCREEN_MODEL ;置屏显 OUTSTR MESS1

;****************设定密码*********************************** CALL LED_OFF ;七段数码管灯灭 MOV CX,10 AGAIN:

MOV AL,00110010B ;计数器0,先写高8位后写低8,二进制 MOV AX,3000H MOV DX,I82531 OUT DX,AL MOV AL,AH OUT DX,AL ;写计数初值

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

MOV DX,I8255C

TEST1: IN AL,DX ;读C口数据

TEST AL,10000000B;是否计数完1秒 JZ TEST1 PUSH CX

;***********显示计时*********************** MOV AX,CX DEC AX

MOV BX,AX

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

LEA SI,LED_Table MOV BH,0 ADD SI,BX CALL LED_ONS0 ;打开七段数码管灯S0 MOV AL,[SI] MOV DX,I8255A OUT DX,AL ;显示计数值

;***********显示SET*********************** MOV CX,080h d2: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next: MOV AL,[SI] MOV BX,OFFSET WORD_SET XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行红 SHL AH,01 INC SI

;CALL SHORT_DELAY LOOP next POP CX ;CALL SHORT_DELAY LOOP d2

;***********显示SET结束***********************

;***********一轮结束*********************** ;CALL DELAY

POP CX

LOOP AGAIN

CALL LED_OFF

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字 MOV DX,I8255C IN AL,DX ;从8255C口读入数据,即读入设定的密码 AND AL,00001111B ;取其低4位

MOV PASSWORD,AL ;将设定的密码保存起来

;****************设定密码结束***********************************

;SCREEN_MODEL ;置屏显 OUTSTR MESS2

OUTSTR MESS3 MOV AH,1

INT 21H

;****************输入密码开锁,有3次开锁机会********************* MOV CX,3 OPEN_AGAIN: PUSH CX MOV CX,10 AGAIN2:

PUSH CX

;***********显示计时*********************** MOV AX,CX DEC AX

MOV BX,AX

MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字

LEA SI,LED_Table MOV BH,0 ADD SI,BX CALL LED_ONS0 ;打开七段数码管灯S0 MOV AL,[SI] MOV DX,I8255A OUT DX,AL ;显示计数值

;***********显示IN*********************** MOV CX,080h D1: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next1: MOV AL,[SI] MOV BX,OFFSET WORD_IN XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行黄 SHL AH,01 INC SI

CALL SHORT_DELAY LOOP next1 POP CX CALL SHORT_DELAY LOOP D1

;***********显示IN结束*********************** POP CX LOOP AGAIN2 CALL LED_OFF

;***********一轮结束*********************** POP CX MOV DX,I8255K

MOV AL,10001001B ;方式0,A口出,C口入 OUT DX,AL ;写8255控制字 MOV DX,I8255C IN AL,DX ;从8255C口读入数据,即读入输入的密码 AND AL,00001111B ;取其低4位 CMP PASSWORD,AL JZ OPEN_SUCCESS OUTSTR MESS4

CALL ALERT;发出错误警报声 LOOP OPEN_AGAIN JMP EXIT OPEN_SUCCESS:

OUTSTR MESS5

;***********显示T*********************** MOV CX,080h

D3: MOV AH,01h PUSH CX MOV CX,8 MOV SI,OFFSET COLUMN next3: MOV AL,[SI] MOV BX,OFFSET WORD_T XLAT ;得到第一行码 MOV DX,ICS1 OUT DX,AL MOV AL,AH MOV DX,ICS2 OUT DX,AL ;显示第一行红 SHL AH,01 INC SI

CALL SHORT_DELAY LOOP next3 POP CX CALL SHORT_DELAY LOOP D3

CALL MUSIC1 ;***********显示T结束***********************

EXIT:MOV AH,4CH INT 21H

;***********七段数码管灯灭与亮***************** LED_OFF PROC NEAR ;熄灭七段数码管灯 PUSH DX

PUSH AX

MOV AL,10000001B ;方式0,A口出,C口高4位出,低4位入 MOV DX,I8255K OUT DX,AL

MOV AL,00001000B ;PC4置0 OUT DX,AL

MOV AL,00001010B ;PC5置0 OUT DX,AL POP AX

POP DX RET

LED_OFF ENDP

;---------------------------------------------------

LED_ONS0 PROC NEAR ;打开七段数码管灯S0 PUSH DX

PUSH AX

MOV AL,10000001B ;方式0,A口出,C口高4位出,低4位入

MOV DX,I8255K OUT DX,AL

MOV AL,00001001B ;PC4置1 OUT DX,AL

MOV AL,00001010B ;PC5置0 OUT DX,AL POP AX

POP DX RET

LED_ONS0 ENDP

;***************************************

;***********延迟子程序****************** SHORT_DELAY PROC NEAR ;短延迟子程序 PUSH CX MOV CX,0ffffh ccc: LOOP ccc POP CX RET

SHORT_DELAY ENDP

;---------------------------------------------- DELAY PROC NEAR ; 长延时子程序 PUSH CX PUSH DX

MOV CX,0A000H _1: MOV DX,8088H _2: DEC DX JNZ _2 LOOP _1 POP DX POP CX RET

DELAY ENDP

;************************************************** ALERT PROC NEAR PUSH CX MOV CX,200 ;取200次32个正弦波数据 ddd: MOV SI,0

lll: MOV AL,data1[SI] ;取正弦波数据 MOV DX,I0832A OUT DX,AL ;放音 CALL SHORT_DELAY INC SI CMP SI,32 ;是否取完32个数据 JL lll ;若没有,则继续

LOOP ddd ;总循环次数60是否完,没有,则继续 POP CX RET

ALERT ENDP

;*************************************** CODES ENDS

END START

六、结果

①提示信息,10s内通过逻辑电平开关设定密码10s内通过逻辑电平开关输入密码实验箱上:设定的密码为

1111

双色点阵LED显示器相识SET

②显示提示信息,

实验箱上:输入的密码为1001,输入的密码与设定的密码1111不相同,发出开锁不成功警报声,再次输入,不同,再次发出警报声,第三次输入1111,提示信息SUCCESS!

实验箱显示:数码管显示倒计时,双色点阵器显示IN,验证密码

④验证成功,实验箱显示“OK”,屏幕提示信息”SUCCESS!”

七、课程设计总结及体会

在设计的过程中我遇到过许多问题。如使用8253 计时,采用方式0,输入时钟频率1MHZ,初值为65536,理论上是每隔1S输出1个高电平,但在实际中利用查询方式查询高电平时,与理论值不同。再如,使用七段数码管显示计时,比如显示‘13’,‘1’显示得极短、‘3’显示得较长,很不协调,最终只用了一位显示计时。

通过两个星期的课程设计,我对有关芯片的初始化编程和使用的基本知识、基本方法有了更深的认识,学会了应用8255、DAC0832、七段数码管等编写程序实现一些简单的功能,同时也意识到自己的不足,所谓越学越感觉到知识的欠缺,自己所想的无法用知识去体现出来或者结果跟思路相悖却找不到症结所在。

动手能力是计算机系学生应具有而且要强加练习的一种能力,这次课设是我充分的发挥了这一点,而且不仅现在,在以后的工作中也要多动手,多实践 。

创新思维也是计算机系培养的重点,再简单的东西动动脑就能做得漂亮,得到同学们的称赞。这次课设也正是在这个的基础之上来完成的。这次课程设计使我收获甚多。在此,感谢培养我的老师们。


相关文章

  • 中控X6指纹门禁一体机操作说明
  • 门禁一体机操作说明 使用约定 [#]确认 绿灯:成功 密码=4位 按 态 位 键 灯 数 [*]退出 红灯:失败 工号≤5 提 成功:长鸣一声 失败:短鸣两声 音 错误:短鸣四声 ⊙备注:输入密码/工号后,务必按[#]确认; [*]退出至初 ...查看


  • 挂机短信说明书
  • 固网挂机短信业务 使用手册 2014年1月 目录 1 登录 .......................................................................................... ...查看


  • 中控考勤机使用说明2012-4-8
  • 考勤机器使用说明 一.登记用户 如果没有登记管理员,任何人都可以登记用户. 如果已登记管理者,您必须经过管理员验证才能登记新的用户. 在这里有三种登记方式,指纹登记.密码登记.指纹及密码,分别适用于三种不同指纹质量的人群.指纹登记适用指纹质 ...查看


  • 科密指纹考勤机使用手册Ver1_3
  • 第一章 使用须知 1.1 使用环境 尊敬的用户,首先感谢您购买本公司的指纹考勤机.在使用本产品之前,请您仔细阅读使用说明书,这将有助于提高您使用本产品的效率. 1> 请不要将指纹考勤机放在强光直照的地方.强光对指纹信息的采集有着明显的 ...查看


  • 怎样查找文献
  • ·[专业笔记]一个下午和Ingenta和EBSCO死磕的结果 -|keepsmiling 发表于 2005-3-5 20:47:00 真丢人啊,到现在连几个常用的专业数据库都搞不定!死磕一下午,还是搞不定,慢慢来吧,. 1.http://b ...查看


  • 填写注册信息
  • 二步:填写注册信息 世纪佳缘的用户们通过查看您的资料信息,会对您形成初步印象和基本认识,请您结合自己的实际情况,认真填写每一项内容,严肃征友是世纪佳缘永恒的宗旨和目标. 小提示:红色的X提示框 代表需要解决问题的地方,只要稍加改动,使红色变 ...查看


  • 公式内部员工订餐系统使用手册
  • 公司内部员工 订餐系统 V1.0 用户使用手册 目录 1. 公司内部订餐系统前台使用说明 .............................................. 4 1.1 首页界面 ................. ...查看


  • 美团网说明书
  • 目录 序言:美团网运作模式 .......................................................................................................... ...查看


  • 打印机拒绝访问
  • 为了让打印机的作用发挥得更充分一些,将其设置成共享打印机已经是十分平常的事情:尽管使用共享打印机给我们带来了方便,不过在访问共享打印机的过程中,我们时常会遇到一些莫名其妙的打印故障,这些故障严重影响了我们的共享打印效率.为了提高共享打印效率 ...查看


  • op1000考勤机说明书
  • OP1000 使用指南 保留更改权及解释权 1 请首先阅读 操作本机器请先通读本手册. 注意 请不要将设备放在强光直照的地方,强光对指纹采集有着明显 的影响,会导致指纹验证无法通过. 尽量不要在室外使用,避免强光直射.指纹机工作的温度范围 ...查看


热门内容