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芯片如何下配置,仅以你提供的代码来改写的话就是在我上面标注的那些地方插入那些代码应该就可以了
但是不排除需要修改控制码值的情况,但是那种情况我就没办法推测如何修改了。
下面的程序是我在大学时写的程序显示程序,已通过测试,供参考。#########################################
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)