⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test1001.asm

📁 lcm测试程序,对LCM设计者有帮助,希望大家能用上.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; 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 + -