📄 test1001.asm
字号:
; PROGRAM FOR TEST HT1621 APPS
;
; MCU : 80C31
; DISPLAY : HT1621
;
; MPU SYSTEM CRYSTAL FREQUENCY = 12MHz ( T_machine=1uS )
;---------------------------------------------------------------
; Define Symbol
;---------------------------------------------------------------
CS_ BIT P1.0 ; Display Chip Select signal
RD_ BIT P1.1 ; Display Read Pulse signal
WR_ BIT P1.2 ; Display Write Pulse signal
MSG BIT P1.3 ; Display Data Bit signal
KEY_1 BIT P1.4
KEY_2 BIT P1.5
KEY_3 BIT P1.6
IRQ_ BIT P1.7
;--------------------------------------------------------------------
DISPRAM EQU 30H ; 30H~3FH,16 Byte DISPLAY RAM
DGRAM1 EQU 30H ; 对应LCD右边第一数位
DGRAM2 EQU 31H
DGRAM3 EQU 32H
DGRAM4 EQU 33H
DGRAM5 EQU 34H
DGRAM6 EQU 35H
DGRAM7 EQU 36H
DGRAM8 EQU 37H
DGRAM9 EQU 38H
DGRAM10 EQU 39H
DGRAM11 EQU 3AH
DGRAM12 EQU 3BH
DGRAM13 EQU 3CH
DGRAM14 EQU 3DH
DGRAM15 EQU 3EH
DGRAM16 EQU 3FH ;对应LCD左边第一数位
;--------------------------------------------------------------------
CODERAM EQU 40H ; 40H~51H,18 Byte CODE RAM
;--------------------------------------------------------------------
ST1 EQU 22H
ST2 EQU 23H
TEPOINT EQU 24H
DISPADR EQU 25H ; DISP LOCATE ADDRESS REG 25H,26H
LOOPREG EQU 27H ; LOOP OPERTION COUNTER REG1
COUNTER EQU 28H ; LOOP OPERTION COUNTER REG2
DLYTIME EQU 29H ; LOOP OPERTION COUNTER REG3
SAVEREG EQU 2AH ; Mild REGISTER
SYM EQU 2CH
SECO EQU 2DH
MINU EQU 2EH
HOUR EQU 2FH
;--------------------------------------------------------------------
DISPFLG EQU 20H ; 2CH IS DISPLAY CONTROL UNIT
DISP EQU 00H ; Disp CtrBIT is DISPFLG D0
ERR0 EQU 01H
ERR1 EQU 02H
FLAG_SW EQU 21H
ST_FLAG EQU 08H
MT_FLAG EQU 09H
HT_FLAG EQU 0AH
;===============================================================
; Main Program
;===============================================================
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER0_INT
ORG 0030H
MAIN:
MOV SP,#70H
MOV R7,#3
MOV SYM,#0
MOV SECO,#0
MOV MINU,#0
MOV HOUR,#0
MOV TL0,#11011100B
MOV TH0,#00001011B
MOV TMOD,#0000001B
SETB ET0
SETB EA
SETB TR0 ; TIMER0 Interrupt disanble
;---------------------------------------------------------------
REP: MOV R7,#3
;---------------------------------------------------------------
START:
MOV P1,#0FFH
MOV FLAG_SW,#0
MOV DISPFLG,#0
ACALL CLR_DDRAM
MOV DLYTIME,#1
ACALL DELAY
;---------------------------------------------------------------
; Initialize Display Device
;---------------------------------------------------------------
ACALL LOAD_CODE
ACALL LOAD_ADDR
MOV R0,#CODERAM
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
MOV R0,#4AH
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
MOV DLYTIME,#30
ACALL DELAY
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
INC R0 ; 50H( IRQ EN)
MOV ST1,#12
ACALL SEND_BIT
SETB CS_
;---------------------------------------------------------------
DJNZ R7,NORMAL
SETB DISP
MOV DLYTIME,#250
ACALL DELAY
MOV DLYTIME,#250
ACALL DELAY
CLR DISP
LJMP REP
;---------------------------------------------------------------
; FULL Disp And Sound, WDT output --> IRQ
;---------------------------------------------------------------
NORMAL:
MOV DPTR,#TABLE_DD
MOV R0,#DISPRAM
MOV LOOPREG,#16
MOV TEPOINT,#18 ;全屏显示16位8加小数点
MOV A,TEPOINT
MOVC A,@A+DPTR
LOOP_ADD:
MOV @R0,A
INC R0
DJNZ LOOPREG,LOOP_ADD
ACALL DISPLAY
MOV DLYTIME,#50
ACALL DELAY
;-------------------------------------------
MOV DPTR,#TABLE_DD ;全屏依次显示0,1,2,3,4,5,6,7,8,9,小数点
MOV LOOPREG,#11
MOV A,#0
MOV TEPOINT,A
EX_LOOP:
MOV COUNTER,#16
MOV R0,#DISPRAM
MOV A,TEPOINT
MOVC A,@A+DPTR
IN_LOOP:
MOV @R0,A
INC R0
DJNZ COUNTER,IN_LOOP
ACALL DISPLAY
MOV DLYTIME,#15
ACALL DELAY
INC TEPOINT
DJNZ LOOPREG,EX_LOOP
;----------------------------------
JNB IRQ_,READ_CHK ;检查IRQ信号,IRQ不为0,则会显示00 Error
SETB ERR0
READ_CHK:
ACALL CLR_DDRAM
MOV DGRAM2,#00000110B
MOV DGRAM1,#01100111B ; Display "rd"
; MOV DGRAM2,#10000101B
; MOV DGRAM1,#10000101B
ACALL DISPLAY
MOV DLYTIME,#50
ACALL DELAY
; acall rd_m_wr
acall read_drm ;调用读HT1621 RAM子程序,读取00H单元的值
CJNE A,#00000110B,SET_RD_F ;比较00H与“”字模的低半字节是否相等,不相等则会显示01 Error
SJMP DISP_MSG
SET_RD_F:
SETB ERR1
DISP_MSG:
JB ERR0,ERROR_MSG ;判断错误标志位,显示对应的出错信息。
JB ERR1,ERROR_MSG
ACALL DISP_GOOD ;没有错误,显示Good
MOV DLYTIME,#100
ACALL DELAY
LJMP START
ERROR_MSG:
JNB ERR0,ONLY_RD
ACALL ERR00
MOV DLYTIME,#80
ACALL DELAY
JNB ERR1,DIRHOME
ONLY_RD:
ACALL ERR01
MOV DLYTIME,#80
ACALL DELAY
DIRHOME:
LJMP START
;---------------------------------------------------------------
; 3 Message: Good, 00 Error, 01 Error
;---------------------------------------------------------------
DISP_GOOD:
ACALL CLR_DDRAM
MOV DPTR,#TABLE_DD
MOV TEPOINT,#22 ; G
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM16,A
MOV TEPOINT,#20 ; o
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM15,A
MOV TEPOINT,#20 ; o
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM14,A
MOV TEPOINT,#14 ; d
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM13,A
ACALL DISPLAY
RET
;----------------------------
ERR00:
ACALL CLR_DDRAM
MOV TEPOINT,#0 ; 0
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM16,A
MOV TEPOINT,#0 ; 0
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM15,A
MOV TEPOINT,#15 ; E
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM13,A
MOV A,#21 ; r
MOVC A,@A+DPTR
MOV DGRAM12,A
MOV A,#21 ; r
MOVC A,@A+DPTR
MOV DGRAM11,A
MOV TEPOINT,#20 ; o
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM10,A
MOV TEPOINT,#21 ; r
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM9,A
ACALL DISPLAY
RET
;----------------------------
ERR01:
ACALL CLR_DDRAM
MOV TEPOINT,#0 ; 0 ,LCD左起第一位
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM16,A
MOV TEPOINT,#1 ; 1 ,LCD左起第二位
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM15,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -