📄 led.asm
字号:
;;;=================================================================
;;FUNCTION: DTYNAMIC 24X16 DOT-MATRIX LED DISPLAY ROGRAM
;; Edit by maggie 06-08
;;MASTER MCU:HT48R10A,SLAVER MCU:HT1632
;;==================================================================
;; Mask option:
;; WDT : DIABLE
;; CLRWDT : ONE CLEAR INSTRUCTION
;; WDTCLOCLSOURCE : T1(SYSTEM CLOCK/4)
;; WAKE-UP PA0-7 : PA0,PA1,PA4 WAKE-UP,PA2,PA3,PA5-7 NON-WAKE-UP
;; PULL-HIGH PA-PC : PULL-HIGH
;; OUTPUT TYPE PB/PC : NON-PULL-HIGH
;; INPUT TYPE PD/PE :NON-PULL-HIGH2
;; LVR : DISABLE
;; OSC : CRAYSTAL
;; SYSVOLT : 5.00V
;; SYSFREQ : 4000.000KHz
;;==================================================================
#INCLUDE HT48R10A-1.INC
;;==================================================================
;;==================================================================
MY_DATA .SECTION 'DATA'
DEL1 DB ? ;
DEL2 DB ?
DEL3 DB ?
BAK_STA DB ?
BAK_ACC DB ?
R_SEG DB ? ;ADDRESS TEMP REGISTOR
R_ADDR DB ? ;ADDRESS REGISTOR
COUNT DB ? ;R_ADDR
CIR_COUNT DB ?
DISPMAN_CNT DB ?
LED_SPEED DB ?
TEMP_PARITY DB ?
TAB_ADR DB ?
TMR_BUF DB ?
TEMP_ADDR DB ? ;R_ADDR TEMP REGISTOR
DEBOUNCE_CNT DB ? ; A COUNTER OF KEY DEBOUNCE
FG_KEY DBIT
HAVE_KEY DBIT ;1: SOME KEY WAS PRESSED
FG_INI DBIT
TEMP DB 2 DUP(?)
COM_BUF DB 2 dup(?)
OUT_BUF DB 2 dup(?)
DELAY_CNT DB 2 DUP(?)
CS EQU PA.0
CSC EQU PAC.0
WR EQU PA.1
WRC EQU PAC.1
DT EQU PA.2
DTC EQU PAC.2
KEY EQU PA.4
KEY_C EQU PAC.4
LED_SPEED1 EQU 70;100
LED_COUNT EQU 139;240
PATTERN EQU 14
;;===================================================================
;;===================================================================
XMOV MACRO MEMO1,MEMO2
MOV A,MEMO2
MOV MEMO1,A
ENDM
;======================
EJMP MACRO MEM2,MEM1
MOV A,MEM1
XOR A,MEM2
SNZ Z
ENDM
;=======================
;=============
D_400US MACRO
LOCAL LABEL
MOV a,200H
MOV DELAY1,a
LABEL:
SDZ DELAY1
JMP LABEL
ENDM
;;===================================================================
MY_CODE .SECTION AT 0 'CODE'
ORG 00H
JMP START
ORG 004H
RETI
ORG 008H
JMP ISR_TMR
START:
CLR WDT
XMOV PAC,010H ;SET PA4 IS INPUT IO
XMOV PA,010H
; CALL INTT_1632
CLR TAB_ADR
CLR TMR_BUF
CLR TMR
CLR FG_INI
CLR FG_KEY
CLR HAVE_KEY
; XMOV TMRC,091H
; XMOV INTC,05H
; XMOV TMR,080H ;236 ;256-20
XMOV TEMP_ADDR,060H
XMOV LED_SPEED,LED_SPEED1
XMOV TAB_ADR,OFFSET TAB_LED
XMOV DEBOUNCE_CNT,10
; CALL INI_1632_RAM
CLR DELAY_CNT[1]
CLR DELAY_CNT[2]
XMOV TMRC,097H
XMOV INTC,05H
XMOV TMR,00H ;236 ;256-20
CALL INTT_1632
CALL INI_1632_RAM
INC DELAY_CNT[1]
SNZ DELAY_CNT[2].4
JMP $-1
CALL DELAY
CLR DELAY_CNT[1]
CLR DELAY_CNT[2]
SET FG_INI
CALL INI_1632_RAM
MOV A,08 ;BLINK OFF
CALL COMMAND_1632
INC DELAY_CNT[1]
SNZ DELAY_CNT[2].3
JMP $-1
; XMOV TEMP_ADDR,040H
; XMOV LED_SPEED,LED_SPEED1
; XMOV TAB_ADR,OFFSET TAB_LED
XMOV TMRC,091H
XMOV INTC,05H
XMOV TMR,080H ;236 ;256-20
MAIN_LOOP:
SZ FG_KEY
JMP HAVEKEY_LED
MOV A,TEMP_ADDR
SUB A,4
MOV TEMP_ADDR,A
JMP SCAN_LED
;;=========================================================================
;;=======================================================================
SCAN_LED PROC ;DISPLAY DATA IN BUFFER 1 TIMES
XMOV R_SEG,TEMP_ADDR
CLR COUNT
XMOV TBLP,TAB_ADR
SCAN:
CALL GET_TAB
INC TBLP
INC R_SEG
INC COUNT
MOV A,080H
XOR A,R_SEG
SZ ACC
JMP $+2
JMP $+5
MOV A,02CH
SUB A,COUNT
SZ ACC
JMP SCAN
CALL DELAY
MOV A,PATTERN
ADDM A,TAB_ADR ;NEXT PICTURE
MOV A,LED_COUNT
SUB A,TAB_ADR
SZ C
JMP SCAN_LED
XMOV TAB_ADR,OFFSET TAB_LED
MOV A,0D4H
XOR A,TEMP_ADDR
SZ ACC
JMP MAIN_LOOP
XMOV TEMP_ADDR,060H
JMP MAIN_LOOP
SCAN_LED ENDP
;====================================================================
HAVEKEY_LED:
XMOV R_SEG,TEMP_ADDR ;DISPLAY DATA IN BUFFER 1 TIMES
CLR COUNT
XMOV TBLP,TAB_ADR
KEY_LED:
CALL GET_TAB
INC TBLP
INC R_SEG
INC COUNT
MOV A,02CH
SUB A,COUNT
SZ ACC
JMP KEY_LED
CALL DELAY
MOV A,PATTERN
ADDM A,TAB_ADR
MOV A,LED_COUNT
SUB A,TAB_ADR
SZ C
JMP MAIN_LOOP
XMOV TAB_ADR,OFFSET TAB_LED
JMP MAIN_LOOP
;=====================================================================
GET_TAB PROC
XMOV R_ADDR,R_SEG
TABRDL ACC
MOV COM_BUF[1],A
XMOV COM_BUF[2],TBLH
MOV A,0FH
AND A,COM_BUF[1]
SZ R_ADDR.7
JMP $+2
CALL WRITE_1632 ;WRITE COM_BUF[1] LOW 4 BITS
INC R_ADDR
INC R_SEG
INC COUNT
SWAPA COM_BUF[1] ;WRITE COM_BUF[1] HIGH 4 BITS
SZ R_ADDR.7
JMP $+2
CALL WRITE_1632
MOV A,03FH
XOR A,COM_BUF[2] ;IF CON_BUF[2] IS 03FH,GET NEXT TABLE DATA
SZ ACC
JMP GETTAB_HIGH
INC TBLP
TABRDL ACC
MOV COM_BUF[2],A
GETTAB_HIGH:
INC R_ADDR
INC R_SEG
INC COUNT
MOV A,0FH
AND A,COM_BUF[2]
SZ R_ADDR.7
JMP $+2
CALL WRITE_1632
INC R_ADDR
INC R_SEG
INC COUNT
SWAPA COM_BUF[2]
SZ R_ADDR.7
JMP $+2
CALL WRITE_1632
RET
GET_TAB ENDP
;====================================================================
; Delay about DEL1*1mS
;=====================================================================
DELAY PROC
XMOV DEL1,LED_SPEED ;SET DEL1 COUNTER
DEL_1:
MOV A,03;01
MOV DEL2,A ;SET DEL2 COUNTER
DEL_2:
MOV A,110;10;
MOV DEL3,A ;SET DEL3 COUNTER
DEL_3:
SDZ DEL3 ;DEL3 DOWN COUNT
JMP DEL_3
SDZ DEL2 ;DEL2 DOWN COUNT
JMP DEL_2
SDZ DEL1 ;DEL1 DOWN COUNT
JMP DEL_1
RET
DELAY ENDP
;;=====================================================================
#INCLUDE ISR.ASM
#INCLUDE 1632driver.ASM
;#INCLUDE MUSIC.ASM
;;=====================================================================
;;=====================================================================
ORG LASTPAGE
TAB_LED:
DC 03082H,030C7H,0287FH,01C7AH,03F0H
DC 0190H,0230H,04E0H,02C40H,03800H,0000H,0000H,0000H,0000H ;"5`"
DC 02002H,02087H,0207FH,01C7AH,03F0H
DC 0190H,0210H,0420H,02440H,01800H,0000H,0000H,0000H,0000H ;4`"
DC 0002H,02087H,02C7FH,0327AH,01D0H
DC 0190H,01620H,014C0H,0C00H,0000H,0000H,0000H,0000H,0000H ;"4"
DC 0002H,0007H,03F3FH,0054H,03FFAH,0072H
DC 03D0H,0720H,08C0H,0800H,03000H,0000H,0000H,0000H ;"2"
DC 0002H,03F07H,004CH,03FBFH,0052H,03FFAH,0073H
DC 07D0H,0820H,03000H,0000H,0000H,0000H,0000H ;"2`"
DC 0000,0002H,03F3FH,005CH,3FFFH,0072H
DC 3FFAH,0073H,07F0H,08E0H,03800H,03000H,0000H,0000H ;"3"
DC 0002H,0007H,023FH,01FAH,02FF0H
DC 0B80H,03E00H,0000H,0000H,0000H,0000H,0000H,0000H,0000H ;"1"
DC 0002H,01047H,0145FH,01BFAH,07F0H,02FF0H
DC 03F60H,0048H,03F00H,0070H,03F00H,0040H,0000H,0000H ;"5``"
DC 01082H,01047H,01C7FH,01FFAH,07f0H,02ff0H
DC 03F60H,004AH,03FC0H,0074H,03F00H,0048H,03000H,0000H ;"5"
DC 01082H,01047H,087FH,047AH,03F0H,0190H
DC 0220H,04C0H,0800H,03000H,0000H,0000H,0000H,0000H ;"6"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -