您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页微机原理上机实验(六+十)实验报告 74HC138译码器实验 16x16点阵显示实验

微机原理上机实验(六+十)实验报告 74HC138译码器实验 16x16点阵显示实验

来源:纷纭教育


微机原理上机实验报告

实验六:74HC138译码器实验 实验十:LED 16x16点阵显示实验

微机原理上机实验(六)实验报告

实验六: 74HC138译码器实验

一、

实验目的

1、掌握74HC138译码器的工作原理,熟悉74HC138译码器的具体运用连接方法,了解74HC138是如何译码的。

2、认真预习本节实验内容,尝试自行编写程序,填写实验报告 二、

实验内容

1、编写程序:使用8255的PC0、PC1、PC2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。 2、运行程序,验证译码的正确性。 三、

实验原理图

四、

实验步骤

1、 连线说明: F7区:A、B、C

——

D3区:PC0、PC1、PC2 C1区:VCC、GND、GND F4区:JP18(LED指示灯) A3区:CS1、A0、A1

F7区:G1、G2A、G2B —— F7区:JP63 D3区:CS、A0、A1

—— ——

2、 调试程序,查看运行结果是否正确 五、

Con_8255 PC_8255 _STACK _STACK CODE

EQU EQU

0273H 0272H STACK 100 DUP(?)

;8255控制口 ;8255 PC口 ;设置堆栈段

实验代码

SEGMENT DW ENDS SEGMENT

START PROC ASSUME NEAR

CS:CODE, SS:_STACK MOV MOV

OUT

MOV

MOV

START1: OUT CALL INC JMP Delay PROC Delay1: XOR LOOP RET Delay ENDP START ENDP CODE ENDS END

六、

实验思考题

DX,Con_8255 AL,80H DX,AL

DX,PC_8255 AL,0 DX,AL Delay AL START1 NEAR CX,CX $ START

;8255初始化,PC口作输出用,向8255的控制口输入置位/复位控制字10000000B,PC0~PC7全部复位

将00000000B输入8255的PC口 延时 AL加一 循环 ;延时 ;CX清零

当前位置循环一次后推出

1. 在应用系统中,74HC138通常用来产生片选信号,请读者考虑一下,应如何处理?

将输入信号转换为三位无符号二进制数,将转换后的数据由低到高分别输入74HC138的A、B、C口,即可实现对最多8的模块的片选功能。 2. 绘制本实验的详细实验电路图。

3. 使用8255的PC口读入开关信号,实现编码控制8个LED灯的开关

本拓展实验的电路图在上个实验的基础上稍作修改

74CH138的G1、G2A、G2B分别接入PC3、PC4、PC5,其余接口接线不变,当开关4为开启时,控制信号有效

Con_8255 EQU PC_8255

EQU

0273H 0272H 0270H

STACK

PA_8255 EQU _STACK

SEGMENT

DW 100 DUP(?)

_STACK

ENDS

CODE SEGMENT

START PROC NEAR

ASSUME MOV MOV CS:CODE, SS:_STACK

DX, Con_8255 AL, 10010000B OUT

DX,AL

START1:

MOV DX, PA_8255 IN AL, DX

MOV DX, PC_8255 OUT

DX, AL

LED

JMP

START1

START ENDP CODE ENDS END START

;向8255的控制口输入控制字,PA口方式0输入,

余口作为输出

;从PA口读入开关当前状态

;将PA口读入的开关状态由PC口输出,以控制

灯的亮灭

循环执行,不断地由PA口读入开关状态

微机原理上机实验(十)实验报告

实验十:LED 16x16点阵显示实验

一、

实验目的

1、熟悉8255的功能,了解点阵显示的原理及控制方法;

2、学会使用LED点阵,通过编程显示不同字符;

3、认真预习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。 二、

实验内容

1、编写程序,用B4区的二片74HC273控制16X16点阵的行;8255的PA、PB口控制16X16点阵的列;显示字符。

2、按图连接线路;运行程序,观察实验结果,学会编程控制LED点阵显示字符。 三、

实验原理图

四、

实验步骤

1、 连线说明:

D3区:CS(8255)、A0、A1 —— A3区:CS1、A0、A1 D3区:JP23(PA)、JP20(PB) B4区:JP57(D0..D7) B4区:JP56(D8..D15) —— —— —— A2区:JP21、JP22(列输出线) A3区:JP42(D0..D7) A3区:JP40(D8..D15) A3区:CS5、BLE、BHE A3区:IOR、IOW A2区:JP14、JP15(行输出线) B4(I/O)区:CS273、BLE、BHE —— B4(I/O)区:RD、WR B4(I/O)区:JP51、JP55 (注意连线方向)

—— —— 2、 运行程序,观察实验结果。运行演示程序将会看到字符“欢迎使用星研实验仪”在点

阵上自下而上循环移动显示。

五、

实验代码

ADDR_8255_PA EQU 270H ;8255 PA口 ADDR_8255_PB EQU 271H ;8255 PB口 ADDR_8255_C EQU 273H ;8255控制口 ADDR_273 EQU 230H ;IO区74HC273(16位I/O) LINE EQU ADDR_273 ;行线1, 行线2 ROW1 EQU ADDR_8255_PA ;列线1 ROW2 EQU ADDR_8255_PB ;列线2 _STACK SEGMENT STACK DW 100 DUP(?) _STACK ENDS _DATA SEGMENT WORD PUBLIC 'DATA'

HUAN DB 00H,0C0H,00H,0C0H,0FEH,0C0H,07H,0FFH,0C7H,86H,6FH,6CH,3CH,60H,18H,60H

DB 1CH,60H,1CH,70H,36H,0F0H,36H,0D8H,61H,9CH,0C7H,0FH,3CH,06H,00H,00H

YING DB 60H,00H,31H,0C0H,3FH,7EH,36H,66H,06H,66H,06H,66H,0F6H,66H,36H,66H

DB 37H,0E6H,37H,7EH,36H,6CH,30H,60H,30H,60H,78H,00H,0CFH,0FFH,00H,00H

SHI DB 00H,00H,06H,30H,07H,30H,0FH,0FFH,0CH,30H,1FH,0FFH,3BH,33H,7BH,33H

DB 1BH,0FFH,1BH,33H,19H,0B0H,18H,0E0H,18H,60H,18H,0FCH,19H,8FH,1FH,03H

YONG DB 00,0,1FH,0FEH,18H,0C6H,18H,0C6H,18H,0C6H,1FH,0FEH,018H,0C6H,18H,0C6H

DB 18H,0C6H,1FH,0FEH,18H,0C6H,18H,0C6H,30H,0C6H,30H,0C6H,60H,0DEH,0C0H,0CCH

XING DB 00H,00H,1FH,0FCH,18H,0CH,1FH,0FCH,18H,0CH,1FH,0FCH,01H,80H,19H,80H

DB 1FH,0FEH,31H,80H,31H,80H,6FH,0FCH,01H,80H,01H,80H,7FH,0FFH,00H,00H

YAN DB 0,0,0FFH,0FFH,18H,0CCH,18H,0CCH,30H,0CCH,30H,0CCH,7FH,0FFH,7CH,0CCH DB 0FCH,0CCH,3CH,0CCH,3CH,0CCH,3DH,8CH,3DH,8CH,33H,0CH,06H,0CH,0CH,0CH

SHI0 DB 01H,80H,00H,0C0H,3FH,0FFH,3CH,06H,67H,0CCH,06H,0C0H,0CH,0C0H,07H,0C0H

DB 06H,0C0H,7FH,0FFH,00H,0C0H,01H,0E0H,03H,30H,06H,18H,1CH,1CH,70H,18H

YAN0 DB 00H,00H,0FCH,60H,0CH,60H,6CH,0F0H,6CH,0D8H,6DH,8FH,6FH,0F8H,7EH,00H

DB 06H,0C6H,07H,66H,3FH,0ECH,0E7H,0ECH,06H,18H,1FH,0FFH,0CH,00H,00H,00H

YI DB 0CH,0C0H,0CH,60H,18H,7CH,1BH,6CH,33H,0CH,73H,18H,0F1H,98H,31H,98H DB 30H,0F0H,30H,0F0H,30H,60H,30H,0F0H,31H,98H,33H,0FH,3EH,06H,30H,00H NONE DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H _DATA ENDS CODE SEGMENT START PROC NEAR ASSUME CS:CODE, DS:_DATA, SS:_STACK MOV AX,_DATA MOV DS,AX MOV ES,AX NOP CALL INIT_IO CALL TEST_LED ;调用测试子程序,测试LED是否全亮 CALL CLEAR ;滚动显示多个字符 CHS_SHOW: MOV CX,9 ;九个汉字 LEA SI,HUAN ;取首个汉字的有效地址 CHS_1: PUSH CX ;CHS_1可以滚动显示多个字符 MOV CX,16 CHS_2: CALL DISP_CH ;实现显示,DISP_CH可以把每个汉字

的32个字节读完并显示出来

INC SI 实现逐行滚动,SI每次循环自增两

次,体现为字模向上移动一行

INC SI LOOP CHS_2 POP CX LOOP CHS_1 ;读下一个循环对应的汉字 JMP CHS_SHOW ;显示一个16*16点阵字子程序,字型码放在DPTR指出的地址 DISP_CH PROC NEAR PUSH CX MOV CX,8 DISP_CH_1: CALL DISP1 LOOP DISP_CH_1 POP CX RET DISP_CH ENDP ;显示一个16*16点阵字子程序,字型码放在显示缓冲区XBUFF DISP1 PROC NEAR

PUSH SI PUSH CX MOV CX,16 MOV BL,0FEH MOV BH,0FFH REPEAT: MOV DX,LINE MOV AX,BX OUT DX,AX LODSB CALL ADJUST MOV DX,ROW1 OUT DX,AL LODSB CALL ADJUST MOV DX,ROW2 OUT DX,AL CALL DL10MS CALL CLEAR STC RCL BL,1 RCL BH,1 LOOP REPEAT POP CX POP SI RET DISP1 ENDP INIT_IO PROC NEAR MOV DX,ADDR_8255_C MOV AL,80H OUT DX,AL RET INIT_IO ENDP CLEAR PROC NEAR MOV AX,0FFFFH MOV DX,LINE OUT DX,AX MOV AL,0 MOV DX,ROW1 OUT DX,AL MOV DX,ROW2 OUT DX,AL RET CLEAR ENDP ;测试LED子程序,点亮LED并延时1S

;计数器,16列依次被扫描 ;上边列输出值 ;下边列输出值

;列输出

;调整AL,将AL中二进制数旋转180度

;左边行输出

;调整AL,将AL中二进制数旋转180度

;右边行输出

;循环移位BX,行线扫描输出0

;8255控制字地址

;设置8255的PA、PB、PC口为输出口;写控制字

TEST_LED PROC NEAR MOV DX,LINE XOR AX,AX OUT DX,AX MOV AL,0FFH MOV DX,ROW1 OUT DX,AL MOV DX,ROW2 OUT DX,AL CALL DL500ms CALL DL500ms RET TEST_LED ENDP

;调整AL中取到的字型码的一个字节,将最高位调整位最低位,最低位调整为最高位 ADJUST PROC NEAR PUSH CX MOV CX,8 ADJUST1: RCL AL,1 XCHG AL,AH RCR AL,1 XCHG AL,AH LOOP ADJUST1 MOV AL,AH POP CX RET ADJUST ENDP DL10ms PROC NEAR PUSH CX MOV CX,133 LOOP $ POP CX RET DL10ms ENDP DL500ms PROC NEAR PUSH CX MOV CX,0FFFFH LOOP $ POP CX RET DL500ms ENDP START ENDP CODE ENDS END START

六、

实验思考题

1. 修改程序,使显示的字符从左至右动态循环显示。

ADDR_8255_PA EQU 270H ;8255 PA口 ADDR_8255_PB EQU 271H ;8255 PB口 ADDR_8255_C EQU 273H ;8255控制口

ADDR_273 EQU 230H ;IO区74HC273(16位I/O) LINE EQU ADDR_273;行线1, 行线2 ROW1 EQU ADDR_8255_PA ;列线1 ROW2 EQU ADDR_8255_PB ;列线2

_STACK SEGMENT STACK DW 1024 DUP(?) _STACK ENDS

_DATA SEGMENT WORD PUBLIC 'DATA' HUAN DB

00H,0C0H,00H,0C0H,0FEH,0C0H,07H,0FFH,0C7H,86H,6FH,6CH,3CH,60H,18H,60H DB 1CH,60H,1CH,70H,36H,0F0H,36H,0D8H,61H,9CH,0C7H,0FH,3CH,06H,00H,00H

YING DB 60H,00H,31H,0C0H,3FH,7EH,36H,66H,06H,66H,06H,66H,0F6H,66H,36H,66H DB 37H,0E6H,37H,7EH,36H,6CH,30H,60H,30H,60H,78H,00H,0CFH,0FFH,00H,00H SHI DB 00H,00H,06H,30H,07H,30H,0FH,0FFH,0CH,30H,1FH,0FFH,3BH,33H,7BH,33H DB 1BH,0FFH,1BH,33H,19H,0B0H,18H,0E0H,18H,60H,18H,0FCH,19H,8FH,1FH,03H YONG DB 00,0,1FH,0FEH,18H,0C6H,18H,0C6H,18H,0C6H,1FH,0FEH,018H,0C6H,18H,0C6H DB

18H,0C6H,1FH,0FEH,18H,0C6H,18H,0C6H,30H,0C6H,30H,0C6H,60H,0DEH,0C0H,0CCH XING DB 00H,00H,1FH,0FCH,18H,0CH,1FH,0FCH,18H,0CH,1FH,0FCH,01H,80H,19H,80H

DB 1FH,0FEH,31H,80H,31H,80H,6FH,0FCH,01H,80H,01H,80H,7FH,0FFH,00H,00H YAN DB 0,0,0FFH,0FFH,18H,0CCH,18H,0CCH,30H,0CCH,30H,0CCH,7FH,0FFH,7CH,0CCH

DB 0FCH,0CCH,3CH,0CCH,3CH,0CCH,3DH,8CH,3DH,8CH,33H,0CH,06H,0CH,0CH,0CH SHI0 DB 01H,80H,00H,0C0H,3FH,0FFH,3CH,06H,67H,0CCH,06H,0C0H,0CH,0C0H,07H,0C0H

DB 06H,0C0H,7FH,0FFH,00H,0C0H,01H,0E0H,03H,30H,06H,18H,1CH,1CH,70H,18H YAN0 DB 00H,00H,0FCH,60H,0CH,60H,6CH,0F0H,6CH,0D8H,6DH,8FH,6FH,0F8H,7EH,00H

DB 06H,0C6H,07H,66H,3FH,0ECH,0E7H,0ECH,06H,18H,1FH,0FFH,0CH,00H,00H,00H YI DB 0CH,0C0H,0CH,60H,18H,7CH,1BH,6CH,33H,0CH,73H,18H,0F1H,98H,31H,98H

DB 30H,0F0H,30H,0F0H,30H,60H,30H,0F0H,31H,98H,33H,0FH,3EH,06H,30H,00H NONE DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H CHANGE_RESULT DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H _DATA ENDS

CODE SEGMENT START PROC NEAR

ASSUME CS:CODE, DS:_DATA, SS:_STACK MOV AX,_DATA MOV DS,AX MOV ES,AX NOP

CALL INIT_IO

CALL TEST_LED ;调用测试子程序,测试LED是否全亮 CALL CLEAR

LEA SI,HUAN ;取首个汉字的有效地址 ;CHS_1可以滚动显示多个字符 CHS_SHOW:

MOV CX,9 ;九个汉字 CALL WORD_MOVE ;字模拷贝 CHS_1: PUSH CX MOV CX,16

CHS_2: CALL DISP_CH ;实现显示,DISP_CH可以把每个汉字的32个字节读完并显示出来

;INC SI ;原程序用于滚动的指令 ;INC SI

LEA SI,CHANGE_RESULT ;除了第一次,每次的汉字读取都去CHANGE_RESULT找,只显

示CHANGE_RESULT开头的32个字节

CALL WORD_CHANGE ;将WORD_CHANGE中的字模左移一位 LOOP CHS_2 POP CX

LOOP CHS_1 ;读下一个汉字 CALL WORD_MOVE

LEA SI,CHANGE_RESULT JMP CHS_SHOW

WORD_MOVE PROC NEAR ;给CHANGE_RESULT赋初值HUAN,把十个汉字都拷贝过来 PUSH CX PUSH ES PUSH DS

PUSH SI PUSH DI

LEA SI,HUAN ;源 LEA DI,CHANGE_RESULT ;目的 MOV AX,DS MOV ES,AX MOV CX,320 WORD_MOVE1:

MOVSB ;执行完毕后SI,DI自动加一 LOOP WORD_MOVE1 POP DI POP SI POP DS POP ES POP CX RET

WORD_MOVE ENDP

;把字模拷出来,将WORD_CHANGE中的字模全部整体左移一位 WORD_CHANGE PROC NEAR ;16x2x10个字节 PUSH CX PUSH DS PUSH SI PUSH BX PUSHF XOR BX,BX

LEA SI,CHANGE_RESULT MOV CX,320 MOVE_TO_LAST: INC SI

LOOP MOVE_TO_LAST

MOV CX,16 ;16行 WORD_CHANGE1:

CLC ;CF置0 PUSH CX

MOV CX,10 ;10个字 WORD_CHANGE2: RCL [SI],1 DEC SI RCL [SI],1

SUB SI,31 ;SI=SI-31 LOOP WORD_CHANGE2 ADD SI,31

POP CX

ADD SI,255 ;16+16+7x32-1=255 LOOP WORD_CHANGE1 SUB SI,255

;LEA SI,CHANGE_RESULT;测试是否回到开头 POPF

POP BX POP SI POP DS POP CX RET

WORD_CHANGE ENDP

;显示一个16*16点阵字子程序,字型码放在DPTR指出的地址 DISP_CH PROC NEAR;把每个汉字的32个字节读完 PUSH CX MOV CX,8 DISP_CH_1:

CALL DISP1 LOOP DISP_CH_1 POP CX RET

DISP_CH ENDP

;显示一个16*16点阵字子程序,字型码放在显示缓冲区XBUFF DISP1 PROC NEAR PUSH SI PUSH CX

MOV CX,16 ;计数器,16列依次被扫描 MOV BL,0FEH ;上边列输出值 MOV BH,0FFH ;下边列输出值 REPEAT:

MOV DX,LINE MOV AX,BX

OUT DX,AX ;列输出 LODSB

CALL ADJUST ;调整AL,将AL中二进制数旋转180度 MOV DX,ROW1

OUT DX,AL ;左边行输出 LODSB

CALL ADJUST ;调整AL,将AL中二进制数旋转180度 MOV DX,ROW2

OUT DX,AL ;右边行输出 CALL DL10MS CALL CLEAR

STC RCL BL,1

RCL BH,1 ;循环移位BX,行线扫描输出0 LOOP REPEAT POP CX POP SI RET

DISP1 ENDP INIT_IO PROC NEAR

MOV DX,ADDR_8255_C ;8255控制字地址

MOV AL,80H ;设置8255的PA、PB、PC口为输出口 OUT DX,AL ;写控制字 RET

INIT_IO ENDP CLEAR PROC NEAR MOV AX,0FFFFH MOV DX,LINE OUT DX,AX MOV AL,0 MOV DX,ROW1 OUT DX,AL MOV DX,ROW2 OUT DX,AL RET

CLEAR ENDP

;测试LED子程序,点亮LED并延时1S TEST_LED PROC NEAR MOV DX,LINE XOR AX,AX OUT DX,AX MOV AL,0FFH MOV DX,ROW1 OUT DX,AL MOV DX,ROW2 OUT DX,AL

CALL DL500ms CALL DL500ms RET

TEST_LED ENDP

;调整AL中取到的字型码的一个字节,将最高位调整位最低位,最低位调整为最高位 ADJUST PROC NEAR PUSH CX MOV CX,8 ADJUST1:

RCL AL,1 XCHG AL,AH RCR AL,1 XCHG AL,AH LOOP ADJUST1 MOV AL,AH POP CX RET

ADJUST ENDP DL10ms PROC NEAR PUSH CX MOV CX,133 LOOP $ POP CX RET

DL10ms ENDP DL500ms PROC NEAR PUSH CX MOV CX,0FFFFH LOOP $ POP CX RET

DL500ms ENDP

START ENDP CODE ENDS END START

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务