要编个16*16点阵汉字显示的汇编程序,动态的,显示“欢迎您”
每个字隔3秒,采用定时器,中断,并行口设计,采用386ex试验仪和12864显示电路。8255的。参考程序.Modelsmall.386DATASEGMENTHZ_TAB...
每个字隔3秒,采用定时器,中断,并行口设计,采用386ex试验仪和12864显示电路。8255的。
参考程序
.Model small
.386
DATA SEGMENT
HZ_TAB DW 0A3B3H,0A3B2H,0CEBBH,0CEA2H,0BBFAH,0BDCCH,0D1A7H,0CAB5H
DW 0D1E9H,0CFB5H,0CDB3H,0D5FDH,0D4DAH,0D1DDH,0CABEH,0D6D0H
HZ_ADR DB ? ;存放显示行起始端口地址
IO_ADDRESS EQU 200H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,IO_ADDRESS
ADD DX,3
MOV AL,80H
OUT DX,AL ;8255初始化
MOV AL,0FFH
MOV DX,300H
OUT DX,AL
CALL CLEAR ;LCD 清除
LEA BX,HZ_TAB
MOV CH,2 ;显示第2行信息
CALL LCD_DISP
LEA BX, HZ_TAB
MOV CH,3 ;显示第3行信息
CALL LCD_DISP
l1: JMP L1
CLEAR PROC
MOV AL,0CH
MOV DX,IO_ADDRESS
OUT DX,AL ;设置CLEAR命令
CALL CMD_SETUP ;启动LCD执行命令
RET
CLEAR ENDP
FUNCUP PROC
MOV AL,34H ;LCD显示状态命令
OUT DX,AL
CALL CMD_SETUP
RET
FUNCUP ENDP
LCD_DISP PROC
LEA BX,HZ_TAB
CMP CH,2
JZ DISP_SEC
MOV BYTE PTR HZ_ADR, 88H ;第三行起始端口地址
ADD BX,16 ;指向第二行信息
JMP NEXT
DISP_SEC: MOV BYTE PTR HZ_ADR,90H
next: MOV CL,8
continue: PUSH CX
MOV AL,HZ_ADR
MOV DX,IO_ADDRESS
OUT DX,AL
CALL CMD_SETUP ;设定DDRAM地址命令
MOV AX,[BX]
PUSH AX
MOV AL,AH ;先送汉字编码高位
MOV DX,IO_ADDRESS
OUT DX,AL
CALL DATA_SETUP ;输出汉字编码高字节
CALL DELAY ;延迟
POP AX
MOV DX,IO_ADDRESS
OUT DX,AL
CALL DATA_SETUP ;输出汉字编码低字节
CALL DELAY
INC BX
INC BX ;修改显示内码缓冲区指针
INC BYTE PTR HZ_ADR ;修改LCD显示端口地址
POP CX
DEC CL
JNZ CONTINUE
RET
LCD_DISP ENDP
CMD_SETUP PROC
MOV DX,IO_ADDRESS ;指向8255端口控制端口
ADD DX,2
NOP
MOV AL,00000000B ;PC1置0,pc0置0 (LCD I端=0,W端=0)
OUT DX, AL
CALL DELAY
NOP
MOV AL,00000100B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL,00000000B ;PC2置0,(LCD E端置0)
OUT DX, AL
CALL DELAY
RET
CMD_SETUP ENDP
DATA_SETUP PROC
MOV DX,IO_ADDRESS ;指向8255控制端口
ADD DX,2
MOV AL,00000001B ;PC1置0,PC0=1 (LCD I端=1)
OUT DX, AL
NOP 展开
参考程序
.Model small
.386
DATA SEGMENT
HZ_TAB DW 0A3B3H,0A3B2H,0CEBBH,0CEA2H,0BBFAH,0BDCCH,0D1A7H,0CAB5H
DW 0D1E9H,0CFB5H,0CDB3H,0D5FDH,0D4DAH,0D1DDH,0CABEH,0D6D0H
HZ_ADR DB ? ;存放显示行起始端口地址
IO_ADDRESS EQU 200H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,IO_ADDRESS
ADD DX,3
MOV AL,80H
OUT DX,AL ;8255初始化
MOV AL,0FFH
MOV DX,300H
OUT DX,AL
CALL CLEAR ;LCD 清除
LEA BX,HZ_TAB
MOV CH,2 ;显示第2行信息
CALL LCD_DISP
LEA BX, HZ_TAB
MOV CH,3 ;显示第3行信息
CALL LCD_DISP
l1: JMP L1
CLEAR PROC
MOV AL,0CH
MOV DX,IO_ADDRESS
OUT DX,AL ;设置CLEAR命令
CALL CMD_SETUP ;启动LCD执行命令
RET
CLEAR ENDP
FUNCUP PROC
MOV AL,34H ;LCD显示状态命令
OUT DX,AL
CALL CMD_SETUP
RET
FUNCUP ENDP
LCD_DISP PROC
LEA BX,HZ_TAB
CMP CH,2
JZ DISP_SEC
MOV BYTE PTR HZ_ADR, 88H ;第三行起始端口地址
ADD BX,16 ;指向第二行信息
JMP NEXT
DISP_SEC: MOV BYTE PTR HZ_ADR,90H
next: MOV CL,8
continue: PUSH CX
MOV AL,HZ_ADR
MOV DX,IO_ADDRESS
OUT DX,AL
CALL CMD_SETUP ;设定DDRAM地址命令
MOV AX,[BX]
PUSH AX
MOV AL,AH ;先送汉字编码高位
MOV DX,IO_ADDRESS
OUT DX,AL
CALL DATA_SETUP ;输出汉字编码高字节
CALL DELAY ;延迟
POP AX
MOV DX,IO_ADDRESS
OUT DX,AL
CALL DATA_SETUP ;输出汉字编码低字节
CALL DELAY
INC BX
INC BX ;修改显示内码缓冲区指针
INC BYTE PTR HZ_ADR ;修改LCD显示端口地址
POP CX
DEC CL
JNZ CONTINUE
RET
LCD_DISP ENDP
CMD_SETUP PROC
MOV DX,IO_ADDRESS ;指向8255端口控制端口
ADD DX,2
NOP
MOV AL,00000000B ;PC1置0,pc0置0 (LCD I端=0,W端=0)
OUT DX, AL
CALL DELAY
NOP
MOV AL,00000100B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL,00000000B ;PC2置0,(LCD E端置0)
OUT DX, AL
CALL DELAY
RET
CMD_SETUP ENDP
DATA_SETUP PROC
MOV DX,IO_ADDRESS ;指向8255控制端口
ADD DX,2
MOV AL,00000001B ;PC1置0,PC0=1 (LCD I端=1)
OUT DX, AL
NOP 展开
3个回答
展开全部
CALL DELAY
MOV AL,00000101B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000001B ;PC2置0,(LCD E端=0)
OUT DX, AL
NOP
CALL DELAY
RET
DATA_SETUP ENDP
DELAY PROC
PUSH CX
PUSH DX
MOV CX,0FFFH
X1: LOOP X1
POP DX
POP CX
RET
DELAY ENDP
CODE ENDS
END START
补充
MOV AL,00000101B ;PC2置1 (LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000001B ;PC2置0,(LCD E端=0)
OUT DX, AL
NOP
CALL DELAY
RET
DATA_SETUP ENDP
DELAY PROC
PUSH CX
PUSH DX
MOV CX,0FFFH
X1: LOOP X1
POP DX
POP CX
RET
DELAY ENDP
CODE ENDS
END START
补充
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
data——
ergjklndb
MOV OUT DELET
HOME
TAB
ergjklndb
MOV OUT DELET
HOME
TAB
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询