微机原理设计 关于8279 AD0809的一段汇编程序,高手来看看

微机原理设计 关于8279 AD0809的一段汇编程序,高手来看看,第1张

Z8279 EQU212H

D8279 EQU210H

LEDMODEQU00左边输入,八位显示外部译码八位显示

LEDFEQEQU38H 扫描频率

CODE SEGMENT

ASSUME CS:CODE,DS:code

START:push cs

popds

calldelay

MOVDX,Z8279

MOVAL,LEDMOD

OUTDX,AL

MOVAL,LEDFEQ

OUTDX,AL

MOVCX,06H

XZ: MOVDX,D8279

MOVAL,00H

OUTDX,AL

LOOP XZ

MOVDX,D8279

MOVAL,5eH

OUTDX,AL

MOVDX,D8279

MOVAL,77H

OUTDX,AL以上为写(AD )

NOP

bg: movdx,208h

moval,0

outdx,al

calldelay

in al,dx

这里用ah保存输入的低4位值

movah,al

andah,0fh

=======================

movcl,04h

roral,cl

andal,0fh

查表,将键码放入AL中

push ax

mov dx,z8279

mov al,83h

out dx,al

pop ax

LEA BX,LED

XLAT

这里已经处理了al中的高4位,还需要处理ah中的低4位

XCHGah,al

XLAT

=======================

MOV DX,D8279 将AL中内容写到数码管上

OUT DX,AL

这里再将高4位显示在led上

OUT DX,AH

=======================

calldelay

jmp bg

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H

DB 5EH,79H,71H

delay proc near

push cx

mov cx,0f00h

loop $

pop cx

ret

delay endp

CODE ENDS

END START

并不需要修改LED表,由于不是很清楚该LED芯片如何下配置,仅以你提供的代码来改写的话就是在我上面标注的那些地方插入那些代码应该就可以了

但是不排除需要修改控制码值的情况,但是那种情况我就没办法推测如何修改了。

下面的程序是我在大学时写的程序显示程序,已通过测试,供参考。

#########################################

STATE_8279 EQU 0301H 命令地址

DATA_8279 EQU 0300H 数据口地址

TIME_STATE_8279 EQU 32H 20分频

KEY_DISP_STATE EQU 00H 显示方式命令字,8字符左边输入,编码扫描键盘,双键锁定

CLR_STATE EQU 0D1H 清除命令字

READ_FIFO_RAM EQU 40H

KEY_FLAGE BIT 00H 键标志位

DISP_ADD DATA 70H 显示命令字

ORG 0000H

LJMP START

ORG 0030H

START:

MOV SP,#40H

LCALL INIT8279

CALL DISP

SACN_HERE:

LCALL SCAN_KEY

LCALL DISP1

LJMP SACN_HERE

#####################8279初始化###################

INIT8279:

MOV DPTR,#STATE_8279

MOV A,#CLR_STATE

MOVX @DPTR,A

WAIT: MOVX A,@DPTR

JB ACC.7,WAIT

MOV A,#TIME_STATE_8279

MOVX @DPTR,A

MOV A,#KEY_DISP_STATE

MOVX @DPTR,A

RET

###################键扫子程序##########################

SCAN_KEY:

MOV DPTR,#STATE_8279

MOVX A,@DPTR

ANL A,#07H 屏蔽D7---D3位

JNZ KEY 判断是否有键按下

JMP SCAN_KEY

#####################获得键值子程序####################

KEY: MOV DPTR ,#STATE_8279

MOV A,#READ_FIFO_RAM 读FIFO RAM命令

MOVX @DPTR,A

MOV DPTR,#DATA_8279 读键

MOVX A,@DPTR

ANL A,#3FH 屏蔽高四位,SHFIT AND

MOV B,A

RET

ADD_1:

ADD A,#8

MOV B,A

RET

***************************************

DISP: MOV 70H,#1

MOV 71H,#2

MOV 72H,#3

MOV 73H,#4

MOV 74H,#5

MOV 75H,#6

MOV 76H,#7

MOV 77H,#8

MOV R1,#70H

MOV R7,#08H

AJMP LL

DISP1: MOV 70H,B

MOV R1,#70H

MOV R7,#01H

LL: MOV DPTR,#STATE_8279

MOV A,#90H

MOVX @DPTR,A

DISP_LOOP:

MOV A,@R1

MOV DPTR,#LEDSEG

MOVC A,@A+DPTR

MOV DPTR,#DATA_8279

MOVX @DPTR,A

INC R1

DJNZ R7,DISP_LOOP

RET

WAVE: MOV R5,#0AH

WAVE1: LCALL DELAY

DJNZ R5,WAVE1

RET

DELAY: MOV R7,#40H

DELAY1: MOV R6,#4DH

DJNZ R6,$

DJNZ R7,DELAY1

RET

LEDSEG:

DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,07FH,6FH,77H,7CH,39H,4EH 共阴极数码管段码!

0 1 2 3 4 5 6 7 8 9 不亮

这是键盘显示芯片8279的驱动程序。

程序中,原来有一些注释,其中的8279,都误写成了8259。

尽量加写了一些注释,其中对8279的一些命令、数据,没有多写,建议楼主参考8279的资料。

CPORT EQU5FFFH 8259 {应该是8279} 控制端口地址

DPORT EQU5EFFH ?? 应该是8279 数据端口地址

DBUFEQU30H

ORG 0000H

LJMPSTART主程序入口地址

ORG 0013H

LJMPINT1中断处理子程序入口

START: 主程序

MOV SP, #6FH???设定栈底

MOV DPTR, #CPORT 8259 {应该是8279} 控制端口

MOV A, #0DCH 清除命令字

MOVX@DPTR, A 清除{8279}的显示内容

CLEAN :

MOVX A, @DPTR 读{8279的}状态字

JB ACC.7, CLEAN 判断显示RAM是否可 *** 作

MOV A, #00H{8279}的方式命令字

MOVX@DPTR,A 写入{8279}

MOV A, #2AH{8279}的分频系数

MOVX@DPTR,A写入{8279}

=========================以上是设定8279的工作方式

MOV R7, #6H

MOV R0, #DBUF

MOV A, #10H设置显示缓存区内容

===========================================================

以下部分

CDBUF:

MOV @R0, A

INC R0

DJNZR7, CDBUF

=========================以上是清除显示缓存区内容

LCALL DISP调用显示子程序

CLR IT1IT1清0,开外中断1

NOP 空 *** 作

SETBEA

NOP空 *** 作

SETBEX1置EX1(外部中断1中断允许位)为1

NOP空 *** 作

CLEAN1:

LJMPCLEAN1等待中断

INT1: 外部中断程序

PUSHACC 保护现场

PUSHDPH

PUSHDPL

MOV DPTR, #CPORT 8279的控制端口

MOV A, #40H 01000000B

MOVX@DPTR, A 将40H当做命令写入8279

MOV DPTR, #DPORT 8279的数据端口

MOVXA, @DPTR 读出按键数值

MOV R7, #6H

MOV R0, #DBUF

MOV @R0, A 按键数值写入显示缓冲区

LCALL DISP显示

LCALL L_SHIFT显示缓冲区内容移位

POP DPL 恢复现场

POP DPH

POP ACC

RETI中断程序结束

L_SHIFT:显示缓冲区内容移位

MOV R7, #6H 移位6次

MOV R0, #DBUF+4

MOV R1, #DBUF+5

NEXT0:

MOV A, @R0 取第四个

MOV @R1, A 送到第五个

DEC R0

DEC R1 修改地址号码

DJNZR7, NEXT0循环6次移位

RET

以上部分

================================================================

DISP:

MOV DPTR, #CPORT

MOV A, #092H

MOVX@DPTR, A

MOV R0, #DBUF R0中存放的是缓冲区的首地址

MOV R7, #06H

NEXTC:

MOV A, @R0

INC R0

MOV DPTR, #DCODE

MOVCA, @A+DPTR

MOV DPTR, #DPORT

MOVX@DPTR, A

DJNZR7, NEXTC

RET 返回

DCODE: DB 0C0H,0F9H,0A4H,0B0H 字型编码表

DB 099H,092H,082H,0F8H

DB 080H,090H,088H,083H

DB 0C6H,0A1H,086H,08EH,0FFH

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7862400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存