📄 93c46seg.asm
字号:
;本程序使用93c46存储七段码的实时状态
;=====================================================
READ EQU 80H ;读命令码
WRITE EQU 40H ;写命令码
EWEN EQU 30H ;写使能命令码
EWDS EQU 00H ;写禁止命令码
;AT93C46接口
MEM_CS EQU P3.4
MEM_SK EQU P3.3
;MEM_ORG EQU P1.2 ;LOGIC1=>16bit
MEM_DI EQU P3.5
MEM_DO EQU P3.6
org 0000h
ajmp main
org 0030h
main:
CLR P2.0 ;开个位显示
mov 30h,#00h
mov dptr,#tab
MOV A, #READ
SETB MEM_CS
CLR MEM_SK
SETB MEM_DI
SETB MEM_SK
LCALL WR_AT93C46
LCALL RD_AT93C46
mov 30h,a
cjne a,#0Ah,com1
com1:
jc loop
mov a,#00h
mov 30h,a
loop:
movc a,@a+dptr
mov p0,a
inc 30h
mov r4,#100
tt3:
lcall delay10ms
djnz r4,tt3
CLR MEM_CS
MOV A, #EWEN ;允许写入
SETB MEM_CS
CLR MEM_SK
SETB MEM_DI
SETB MEM_SK
LCALL WR_AT93C46
CLR MEM_CS
LCALL DELAY20MS
MOV A, #WRITE ;写指令
SETB MEM_CS
CLR MEM_SK
SETB MEM_DI
SETB MEM_SK
LCALL WR_AT93C46
MOV A, 30h
LCALL WR_AT93C46
MOV A, 31h
LCALL WR_AT93C46
CLR MEM_CS
LCALL DELAY30MS
LCALL DELAY30MS
MOV A, #EWDS ;禁止写入
SETB MEM_CS
CLR MEM_SK
SETB MEM_DI
SETB MEM_SK
LCALL WR_AT93C46
CLR MEM_CS
mov a,30h
cjne a,#10,loop
mov 30h,#00h
mov a,30h
ajmp loop
delay10ms:
mov r6,#100
tt2:
mov r5,#50
djnz r5,$
djnz r6,tt2
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
WR_AT93C46:
SETB MEM_CS
CLR MEM_SK
MOV R7, #08H
WR_AT93C46_00:
CLR MEM_SK
RLC A
MOV MEM_DI, C
SETB MEM_SK
DJNZ R7, WR_AT93C46_00
CLR MEM_SK
SETB MEM_DI
RET
;*********************************************
RD_AT93C46:
CLR MEM_SK
MOV R7, #08H
SETB MEM_DO
RD_AT93C46_00:
SETB MEM_SK
NOP
MOV C, MEM_DO
RLC A
CLR MEM_SK
DJNZ R7, RD_AT93C46_00
RET
;#############################################################################
DELAY20MS:
MOV R6, #03CH
Dly20_CON2:
MOV R7, #0FFH
Dly20_CON1:
DJNZ R7, Dly20_CON1
DJNZ R6, Dly20_CON2
RET
DELAY30MS:
PUSH 6
PUSH 7
MOV R6, #059H
Dly30_CON2:
MOV R7, #0FFH
Dly30_CON1:
DJNZ R7, Dly30_CON1
DJNZ R6, Dly30_CON2
POP 7
POP 6
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -