实 验 报 告
班 级 学号 姓 名 同组人
实验日期 室温 大气压 成 绩
<1>编程使用四位LED同时显示5A7C
(要求将5A7C设在数据段并用XLAT译码显示)
程序如下:
COMA EQU 60H
COMB EQU 61H
COMC EQU 62H
COMMODE EQU 63H
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DMTABLE DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH
DB 77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AL,89H ;方式0,A口、B口输出,C口输入
OUT COMMODE,AL
MOV SI,3000H ;建立缓冲区,存放要显示的键值
MOV [SI],05H
MOV [SI+1],0AH
MOV [SI+2],07H
MOV [SI+3],0CH
MOV DI,3004H
BEGIN:
CALL DIS ;显示刷新
CALL CLEAR ;清屏
JNZ BEGIN
DIS PROC NEAR ;显示子程序
PUSH AX
MOV SI,3000H
MOV DL,7FH
MOV AL,DL
AGAIN:
OUT COMB,AL
MOV AL,[SI]
MOV BX,OFFSET DMTABLE
XLAT DMTABLE
OUT COMA,AL
CALL DALLY
INC SI
MOV AL,DL
TEST AL,0EFH
JZ OUT1
ROL AL,1
MOV DL,AL
JMP AGAIN
OUT1:
POP AX
RET
DIS ENDP
CLEAR PROC NEAR ;清除数码管显示子程序
MOV AL,00H
OUT COMA,AL
RET
CLEAR ENDP
DALLY PROC NEAR ;延时子程序
PUSH CX
MOV CX,0009H
A1: MOV AX,0030H
A2: DEC AX
JNZ A2
LOOP A1
POP CX
RET
DALLY ENDP
CODE ENDS
END START
实验结果:数码管上显示5A7C,按键无效
实验三:
<2>编程使键盘为:上行:5C7F 下行:E0A4 ,并能左移显示
<3>在<2>的基础上,按动A显示ABCD,按动5显示0123,按动C显示98EF
<3>的程序如下:
COMA EQU 60H
COMB EQU 61H
COMC EQU 62H
COMMODE EQU 63H
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DMTABLE DB 79H,3FH,77H,66H
DB 6DH,39H,07H,71H
DB 3FH,06H,5BH,4FH
DB 77H,7CH,39H,5EH
DB 6FH,7FH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AL,89H ;方式0,A口、B口输出,C口输入
OUT COMMODE,AL
MOV SI,3000H ;建立缓冲区,存放要显示的键值
MOV [SI],01H
MOV [SI+1],01H
MOV [SI+2],01H
MOV [SI+3],01H
MOV DI,3004H
BEGIN:CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键
JNZ INK1 ;有按键按下,则跳转
JMP BEGIN
INK1: CALL DIS ;消抖
CALL DALLY
CALL DALLY
CALL CLEAR
CALL CCSCAN
JNZ INK2
JMP BEGIN
INK2: MOV CH,7FH
MOV CL,00H
COLUM:MOV AL,CH ;键盘扫描
OUT COMB,AL
IN AL,COMC
L1: TEST AL,20H
JNZ L2
MOV AL,00H
JMP KCODE
L2: TEST AL,10H
JNZ NEXT
MOV AL,04H
KCODE:ADD AL,CL ;AL为按键键值
MOV SI,3000H ;判断按键是否为A,5,C
CMP AL,04H
JZ DIS0123
CMP AL,02H
JZ DISABCD
CMP AL,05H
JZ DIS98EF
CALL PUTBUF ;保存按键值
CALL UNPRESS ;松手检测
NEXT: INC CL ;检测下一列
MOV AL,CH
TEST AL,10H
JZ KERR
ROR AL,1
MOV CH,AL
JMP COLUM
KERR: JMP BEGIN
DIS0123:MOV [SI],08H
MOV [SI+1],09H
MOV [SI+2],0AH
MOV [SI+3],0BH
JMP BEGIN
DISABCD:MOV [SI],0CH
MOV [SI+1],0DH
MOV [SI+2],0EH
MOV [SI+3],0FH
JMP BEGIN
DIS98EF:MOV [SI],10H
MOV [SI+1],11H
MOV [SI+2],12H
MOV [SI+3],13H
JMP BEGIN
CCSCAN PROC NEAR ;扫描按键是否按下
MOV AL,00H
OUT COMB,AL
IN AL,COMC
NOT AL
AND AL,30H
RET
CCSCAN ENDP
CLEAR PROC NEAR ;清除数码管显示子程序
MOV AL,00H
OUT COMA,AL
RET
CLEAR ENDP
DIS PROC NEAR ;显示键值子程序
PUSH AX
PUSH CX
PUSH DX
MOV SI,3000H
MOV DL,7FH
MOV AL,DL
AGAIN:
OUT COMB,AL
MOV AL,[SI]
XOR AH,AH
MOV BX,OFFSET DMTABLE
ADD AX,BX
MOV DI,AX
MOV AL,[DI]
OUT COMA,AL
CALL DALLY
INC SI
MOV AL,DL
TEST AL,10H
JZ OUT1
ROR AL,1
MOV DL,AL
JMP AGAIN
OUT1:
POP DX
POP CX
POP AX
RET
DIS ENDP
PUTBUF PROC NEAR ;保存键值并左移子程序
PUSH BX
MOV SI,3000H
MOV BL,[SI+1]
MOV [SI],BL
MOV BL,[SI+2]
MOV [SI+1],BL
MOV BL,[SI+3]
MOV [SI+2],BL
MOV [SI+3],AL
POP BX
RET
PUTBUF ENDP
UNPRESS PROC NEAR ;松手检测
PUSH AX
KON: CALL DIS
CALL CLEAR
CALL CCSCAN
JNZ KON
POP AX
RET
UNPRESS ENDP
DALLY PROC NEAR ;延时子程序
PUSH CX
PUSH AX
MOV CX,0009H
A1: MOV AX,0030H
A2: DEC AX
JNZ A2
LOOP A1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
实验结果:按动A,数码管显示ABCD,按动5显示0123,按动C显示98EF,按动
其他键,数码管显示相应键值,并左移显示。
实验四:
3.要求实现:
a)定义键盘按键,5个为数字键2、3、4、5、9,3个功能键:设置SET、清零 CLR、开始START;
b)显示器上的四位显示为秒(两位)、10毫秒(两位);
c)通过键盘的按键SET,可以设置倒计数器初始时间(最大为55秒);
d)按START键启动倒计数直到计到零停止,或松开START键停止计数,按CLR 键清零。
程序如下:
COMA EQU 60H
COMB EQU 61H
COMC EQU 62H
COMMODE EQU 63H
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DMTABLE DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AL,89H ;方式0,A口、B口输出,C口输入
OUT COMMODE,AL
ZERO1:MOV SI,3000H ;建立缓冲区,存放要显示的键值
XOR AL,AL
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
MOV DI,3004H
BEGIN:CALL DIS ;显示刷新
CALL CLEAR ;清屏
CALL CCSCAN ;扫描按键
JNZ INK1 ;有按键按下,则跳转
JMP BEGIN
INK1: CALL DIS ;消抖
CALL DALLY
CALL DALLY
CALL CLEAR
CALL CCSCAN
JNZ INK2
JMP BEGIN
INK2: MOV CH,7FH
MOV CL,00H
COLUM:MOV AL,CH ;键盘扫描
OUT COMB,AL
IN AL,COMC
L1: TEST AL,20H
JNZ L2
MOV AL,02H
JMP KCODE
L2: TEST AL,10H
JNZ NEXT
MOV AL,06H
KCODE:ADD AL,CL ;AL为按键键值
CMP AL,08H ;判断是否为功能键
JZ SET
CMP AL,06H
JZ BEGIN
CMP AL,07H
JZ ZERO1
JMP BEGIN
CALL UNPRESS ;松手检测
NEXT: INC CL ;检测下一列
MOV AL,CH
TEST AL,10H
JZ KERR
ROR AL,1
MOV CH,AL
JMP COLUM
KERR: JMP BEGIN
SET: MOV SI,3000H ;功能键设置入口
XOR AL,AL
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
CALL UNPRESS
CALL INPUT ;等待输入
CALL UNPRESS
CMP AL,06H
JZ START1
CMP AL,07H
JZ SET
CMP AL,08H
JZ SET
MOV SI,3000H
MOV [SI+1],AL
CALL INPUT
CMP AL,06H
JZ START1
CMP AL,07H
JZ SET
CMP AL,08H
JZ SET
CMP AL,05H ;判断是否大于55
JS X2
MOV AL,[SI+1]
CMP AL,09H
JNZ X1
MOV AL,05H
MOV [SI+1],AL
X1: MOV AL,05H
X2: MOV SI,3000H
MOV [SI],AL
X3: CALL INPUT
CMP AL,06H
JZ START1
CMP AL,07H
JZ SET
CMP AL,08H
JZ SET
JMP X3
START1:CALL CCSCAN ;扫描START是否一直按着
JNZ COUNT
JMP BEGIN
ZERO: XOR AL,AL
MOV SI,3000H
MOV [SI],AL
MOV [SI+1],AL
MOV [SI+2],AL
MOV [SI+3],AL
JMP BEGIN
COUNT:CALL DIS ;10毫秒显示减一
MOV SI,3000H
MOV DH,[SI]
MOV DL,[SI+1]
MOV CH,[SI+2]
MOV CL,[SI+3]
DEC CL
CMP CL,0FFH
JNZ X4
MOV CL,09H
DEC CH
X4: CMP CH,0FFH
JNZ X5
MOV CH,09H
DEC DL
X5: CMP DL,0FFH
JNZ X6
MOV DL,09H
DEC DH
X6: CMP DH,0FFH
JZ ZERO
MOV [SI],DH
MOV [SI+1],DL
MOV [SI+2],CH
MOV [SI+3],CL
CALL DELLY
JMP START1
CCSCAN PROC NEAR ;扫描按键是否按下
MOV AL,00H
OUT COMB,AL
IN AL,COMC
NOT AL
AND AL,30H
RET
CCSCAN ENDP
CLEAR PROC NEAR ;清除数码管显示子程序
MOV AL,00H
OUT COMA,AL
RET
CLEAR ENDP
DIS PROC NEAR ;显示键值子程序
PUSH AX
PUSH CX
PUSH DX
MOV SI,3000H
MOV DL,7FH
MOV AL,DL
AGAIN:
OUT COMB,AL
MOV AL,[SI]
XOR AH,AH
MOV BX,OFFSET DMTABLE
ADD AX,BX
MOV DI,AX
MOV AL,[DI]
OUT COMA,AL
CALL DALLY
INC SI
MOV AL,DL
TEST AL,10H
JZ OUT1
ROR AL,1
MOV DL,AL
JMP AGAIN
OUT1:
POP DX
POP CX
POP AX
RET
DIS ENDP
UNPRESS PROC NEAR ;松手检测
PUSH AX
KON: CALL DIS
CALL CLEAR
CALL CCSCAN
JNZ KON
POP AX
RET
UNPRESS ENDP
INPUT PROC NEAR
COLUM1:CALL DIS
MOV CH,7FH
MOV CL,00H
COLUM2:MOV AL,CH
OUT COMB,AL
IN AL,COMC
L3: TEST AL,20H
JNZ L4
MOV AL,02H
JMP KCODE1
L4: TEST AL,10H
JNZ NEXT1
MOV AL,06H
JMP KCODE1
NEXT1:INC CL
MOV AL,CH
TEST AL,10H
JZ COLUM1
ROR AL,1
MOV CH,AL
JMP COLUM2
KCODE1:ADD AL,CL ;AL为按键键值
RET
INPUT ENDP
DALLY PROC NEAR ;延时子程序
PUSH CX
PUSH AX
MOV CX,0009H
A1: MOV AX,0030H
A2: DEC AX
JNZ A2
LOOP A1
POP AX
POP CX
RET
DALLY ENDP
DELLY PROC NEAR ;10毫秒减一延时计数
PUSH CX
PUSH AX
MOV CX,0010H
B1: MOV AX,0014H
B2: DEC AX
JNZ B2
LOOP B1
POP AX
POP CX
RET
DELLY ENDP
CODE ENDS
END START
实验结果:<1>数码管前两位为秒数,后两位为10毫秒数,最大倒计时数为55秒, 设置秒数时,若检测到秒数大于55,则自动将秒数改为55。
<2>按动SET键,可以设置倒计数器初始时间,期间按CLR键可对设 置秒数重新设置,再按START键启动倒计数直到计到零停止,或 松开START键停止计数,按CLR键清零。
设计心得:
此次课程设计收获真的很大。我从中学会了如何系统地设计一个小系统,让它实现你想要的结果。同时也培养了我发现问题,找出问题到最后解决问题的能力。此次课程设计可谓一波三折,主要时间花在调试上面。到了上机验证的时候,我才发现我的设计还存在着这样那样的漏洞。有些东西逻辑上没问题,但物理实现上却很困难,要把这些因素都考虑进去,你的设计才会更加合理。在做倒计数器的时候,因为少加了一个松手检测的程序,按下SET键的时候,已经同时把它送到要输入的时间单元里。刚开始我还以为是等待输入程序的问题,通过单步调试,确定没问题后才恍然大悟。所以,程序的每一步都要仔细考虑清楚,容不得半点马虎。总之,这次难得的上机调试经历给我积累了很多宝贵的经验,更加培养了我对编程的兴趣,是一次很好的学习机会。
参考文献:
微型计算机原理及应用 许立梓 何小敏 陈玮 高明琴 编 机械工业出版社
微型计算机原理及应用——习题解答、实验指导及课程设计
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
实验四计数器的设计实验室实验台号日期专业班级姓名学号一实验目的1通过实验了解二进制加法计数器的工作原理2掌握任意进制计数器的设计方…
试验七计数器李*电子信息科学与技术一、试验目的1.掌握中规模集成计数器74LS160,161的逻辑功能及使用方法。2.掌握74LS…
四川大学电气信息学院电气工程及其自动化网络专升本实验报告实验课程:电工电子综合实践实验名称:计数器班级:05秋电气工程及其自动化姓…
计数器实验报告一实验内容1静态测试芯片74LS90的逻辑功能2动态测试芯片73LS90的芯片功能画出clk与其中一个输出的波形图3…
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
秒计数器实验报告一实验目的1显示60秒计时功能2计时器为60秒递减计时器3根据原理图分析各单元电路的功能4熟悉电路中所用到的各集成…
试验七计数器李*电子信息科学与技术一、试验目的1.掌握中规模集成计数器74LS160,161的逻辑功能及使用方法。2.掌握74LS…
实验三集成计数器一实验目的1掌握集成计数器构成N进制的计数器的连接方法二预习要求1熟悉芯片各引脚排列2理解构成模长M进制计数器的原…
上海电力学院数字电路与数字逻辑实验指导书实验题目计数器的功能验证专业年级20xx252学生姓名学号同组姓名指导教师姓名刘洪利实验五…