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

📄 221显示时间.asm

📁 一个SN8P2714的LCD驱动程序可以显示时间
💻 ASM
📖 第 1 页 / 共 2 页
字号:

CHIP		SN8P2714	; Select the CHIP
//{{SONIX_CODE_OPTION
	.Code_Option	LVD		LVD_M		; 2.0V Reset Enable LVD24 bit of PFLAG for 2.4V Low Voltage Indicator
	.Code_Option	RST_P0.3	Reset
	.Code_Option	Watch_Dog	Always_ON	; Watchdog still enable even in Green and Sleep mode
	.Code_Option	High_Clk	4M_X'tal	;' Crystal/Resonator: 2Mhz~10Mhz
	.Code_Option	Fcpu		#2     ; Fcpu = High_Clk/4
	.Code_Option	Security	Enable
	.Code_Option	Noise_Filter	Enable
//}}SONIX_CODE_OPTION

;-------------------------------------------------------------------------------
;			Include Files
;-------------------------------------------------------------------------------
.nolist							; do not list the macro file

	INCLUDESTD		MACRO1.H
	INCLUDESTD		MACRO2.H
	INCLUDESTD		MACRO3.H

.list							; Enable the listing function
;-------------------------------------------------------------------------------
;			Constants Definition
;-------------------------------------------------------------------------------
;	ONE		EQU	1
;-------------------------------------------------------------------------------
;			Variables Definition
;-------------------------------------------------------------------------------
.DATA
org	0h			;Data section start from RAM address 0
ACCBUF		DS	1
PFLAGBUF	DS	1
SAVE_A		DS	1
SAVE_ST		DS	1
FLAG		DS	1
FLAGA	  DS	1
FLAGB	  DS	1
FLAGC	   DS	1
ADFLAG		DS	1
;---------------DS------1---
TIME_100US	DS	1
TIME_10MS	DS	1
TIME_30MS	DS	1
TIME_10S	DS	1
TIME_40MS	DS	1
SYS_SEC		DS	1
SYS_MIN		DS	1
SYS_HOUR	DS	1
TIME_50MS	DS	1
TIME_60MS	DS	1
BUZ_TIME	DS	1
XS_CONT		DS	1
WORK_TIME DS	1
FJ_CONT		DS	1
TIME_5SEC	DS	1
WORK_HOUR	DS	1
TIME_60S	DS	1
DELAY_TIME	DS	1
REST_RAM	DS	1
XD_CONT		DS	1
HG_CONT		DS	1
DEL_120		DS	1
TIME_1S		DS	1
SHAN_5S		DS	1
DISP_EN_RAM	DS	1
;---------------DS------1--
KEY_RAM		DS	1
BUZ_CONT	DS	1
KEY_DELAY	DS	1
KEY_LX_RAM	DS	1
COUNT 		DS	1
DISP_CONT	DS	1
DISP_COM	DS	1
TIM_CONT	DS	1
TIME_1MS	DS	1
;---------------DS------1-
AD_TIMES	DS	1
AD_RAM		DS	1
AD_TEST		DS	1
AD_CONT		DS	1
TP_HOT		DS	1
TP_COLD		DS	1
TP_RAM		DS	1
;---------------DS------1-
XS_DATA1	DS	1
XS_DATA2	DS	1
LCD_DATA1	DS	1
LCD_DATA2	DS	1
LCD_DATA3	DS	1
LCD_DATA4	DS	1
LCD_DATA5	DS	1
LCD_DATA6	DS	1
LCD_DATA7	DS	1
LCD_DATA8	DS	1
LCD_DATA9	DS	1
LCD_DATA10	DS	1
DEL_SAVE	DS	1
;---------------DS------1-
AD_COUNT  DS	1
;--------------------------------
DEL_TIME	DS	1
;--------------------------------------------------------
;;			I/O  Variables Definition
;;--------------------------------------------------------
;P0
	KEY1		EQU	P0.0
;-------------------------------------------
;P2
	BUZOUT		EQU	P2.0
  KLED	    EQU	P2.2
;-------------------------------------------
;P5 
MOD_OUT		EQU	P5.0;
DAT		EQU	P5.1
WR		EQU	P5.2
CS		EQU	P5.3
MID_OUT	EQU	P5.4
;FLAG
BUZ	EQU	FLAG.1
KEY_YES	EQU	FLAG.2
ER_FG	EQU	FLAG.3
BUZ_EN	EQU	FLAG.4
FIR_FG	EQU	FLAG.5
SET_59S	EQU	FLAG.6
SHUN	EQU	FLAG.7
;----------------------------
;FLAGA
LT_FG	EQU	FLAGA.3
DS_FG	EQU	FLAGA.5
MIN_FG	EQU	FLAGA.6
HOUR_FG	EQU	FLAGA.7
;---------------------------
;FLAGB
ONE_FG	EQU	FLAGB.0
F1_FG	EQU	FLAGB.1
F2_FG	EQU	FLAGB.2
DISP_EN	EQU	FLAGB.4                        
DISP	EQU	FLAGB.5
;---------------------------------------------
AD_CS	EQU	3;5;3
AD_FS	EQU	15;15
;-------------------------------------------------------------------------------
;			Code section
;-------------------------------------------------------------------------------
.CODE

	ORG	0				;Code section start
	JMP	$+1
	JMP	$+1
	JMP	$+1
	JMP	$+1
	JMP	$+1
	JMP	$+1
	JMP	$+1
	JMP	PROGRAM_START			;Reset vector
						                ;Address 4 to 7 are reserved
	ORG	8
	JMP	INT_START	;Interrupt vector
	ORG	10H
;=======================================
	ORG	25H
;=======================================
INT_START:
	B0XCH A, ACCBUF 	; B0XCH doesn’t change C, Z flag
	B0MOV A, PFLAG
	B0MOV PFLAGBUF, A 	; Save PFLAG register in a buffer
INTTC1HK: 			; Check TC1 interrupt request
B0BCLR FTC0IRQ
	B0BTS1 FTC1IEN 		; Check TC1IENFTC0IEN
	JMP INT_EXIT 		; Jump check to next interrupt
	B0BTS0 FTC1IRQ 		; Check TC1IRQ
	JMP INTTC1 		; Jump to TC1 interrupt service routine
INT_EXIT:
	B0MOV A, PFLAGBUF
	B0MOV PFLAG, A 		; Restore PFLAG register from buffer
	B0XCH A, ACCBUF 	; Restore ACC value.
	RETI 			; Exit interrupt vector
;-------------------------------------------------------------------------------
;	TC0 interrupt service routine
;-------------------------------------------------------------------------------
INTTC1:
	B0BTS1	FTC1IEN		; Check TC0IEN
	JMP	INT_EXIT1	; Jump to exit of IRQ
	B0BTS1	FTC1IRQ		; Check TC0IRQ
	JMP	INT_EXIT1	; Jump to exit of IRQ
	B0BCLR	FTC1IRQ

	B0BCLR	FTC1IRQ
;----------------------------------
	MOV	A,#5AH
	B0MOV	WDTR,A				;Clear watchdog timer

;==============================
	INCMS	TIME_100US
	NOP
	B0MOV	A,TIME_100US
	SUB	A,#40D
	B0BTS1	FC
	JMP	INT_EXIT1
	CLR	TIME_100US
	B0MOV	A,DEL_TIME
	B0BTS1	FZ
	DECMS	DEL_TIME
	NOP
;-----------------------------------
	B0BTS1	BUZ_EN
	JMP	NEXT1
	INCMS	KEY_LX_RAM
	NOP
NEXT1:
;-----------------------------------
	INCMS	TIME_1MS
	NOP
	B0MOV	A,TIME_1MS
	SUB	A,#5D
	B0BTS1	FC;SNZ	C
	JMP	EXIT_REST_KEY
	CLR	TIME_1MS
EXIT_REST_KEY:
	B0MOV	A,BUZ_TIME;SZ	BUZ_TIME
	B0BTS1	FZ
	DECMS	BUZ_TIME
	NOP
	B0MOV	A,DEL_120;SZ	DEL_120
	B0BTS1	FZ
	DECMS	DEL_120
	NOP
;-----------------------------------
	INCMS	TIME_50MS
	B0MOV	A,TIME_50MS
	SUB	A,#20D
	B0BTS1	FC;SNZ	C
	JMP	GOTO_RETI3
	CLR	TIME_50MS
	INCMS	XS_CONT
	NOP
GOTO_RETI3:
	INCMS	TIME_60MS
	NOP
	MOV	A,#100D
	SUB	A,TIME_60MS
	B0BTS0	FC;SZ	C
	JMP	TIME_INT3
	B0MOV	TIME_60MS,A
	
	B0BTS0	FIR_FG;SZ	FIR_FG
	JMP	TIME_INT3

	B0BTS1	DS_FG;SNZ	DS_FG
	JMP	TIME_INT3
	B0MOV	A,DELAY_TIME;SZ	DELAY_TIME
	B0BTS1	FZ
	JMP	$+2
	JMP	TIME_INT2
	B0BTS0	SET_59S;SZ	SET_59S
	JMP	TIME_INT2
	B0BSET	SET_59S
	CLR	TIME_60S
	MOV	A,#60D
	B0MOV	TIME_1S,A
	B0MOV	A,DELAY_TIME;SZ	DELAY_TIME
	B0BTS1	FZ
	DECMS	DELAY_TIME
	NOP
TIME_INT2:
	B0MOV	A,TIME_1S;SZ	TIME_1S
	B0BTS1	FZ
	DECMS	TIME_1S
	NOP
TIME_INT3:
;-----------------------------------
	B0BCLR	SHUN
	MOV	A,#50D
	SUB	A,TIME_10MS
	B0BTS1	FC;SNZ	C
	B0BSET	SHUN
;-----------------------------------
	INCMS	TIME_10MS
	B0MOV	A,TIME_10MS
	SUB	A,#100D
	B0BTS1	FC;SNZ	C
	JMP	INT_EXIT1
	CLR	TIME_10MS

	B0BTS0	KEY_YES;SZ	KEY_YES
	JMP	EXIT_WAIT_GO

	B0MOV	A,TIME_10MS;SZ	TIME_10S
	B0BTS1	FZ
	DECMS	TIME_10S
	NOP

	MOV	A,TIME_10MS;SZ	TIME_10S
	JMP	EXIT_WAIT_GO
	B0BCLR	F1_FG
	MOV	A,#3D
	B0MOV	REST_RAM,A
EXIT_WAIT_GO:
;-----------------------------------------
	B0MOV	A,SHAN_5S;SZ	SHAN_5S
	B0BTS1	FZ
	JMP	$+4
	B0BCLR	MIN_FG
	B0BCLR	HOUR_FG
	CLR	TIM_CONT
	B0MOV	A,SHAN_5S;SZ	SHAN_5S
	B0BTS1	FZ
	DECMS	SHAN_5S
	NOP
	B0MOV	A,BUZ_CONT;SZ	BUZ_CONT
	B0BTS1	FZ
	B0BSET	BUZ
	B0MOV	A,BUZ_CONT;SZ	BUZ_CONT
	B0BTS1	FZ
	DECMS	BUZ_CONT
	NOP

	B0BTS1	FIR_FG;SNZ	FIR_FG
	JMP	EXIT_DEC_TIME_GO
	B0MOV	A,TIME_5SEC;SZ	TIME_5SEC
	B0BTS1	FZ
	DECMS	TIME_5SEC
	NOP
	B0MOV	A,TIME_5SEC;SZ	TIME_5SEC
	B0BTS1	FZ
	JMP	EXIT_DEC_TIME_GO
	CLR	TIME_60S
	B0MOV	A,WORK_TIME
	B0MOV	DELAY_TIME,A
	B0BCLR	FIR_FG
EXIT_DEC_TIME_GO:
	B0BTS0	FIR_FG;SZ	FIR_FG
	JMP	TIME_NEXT_GO
	INCMS	TIME_60S
	MOV	A,#60D        ;1SEC
	SUB	A,TIME_60S
	B0BTS0	FC;SZ	C
	JMP	TIME_NEXT_GO
	CLR	TIME_60S
	B0BCLR	SET_59S
TIME_NEXT_GO:
	INCMS	SYS_SEC
	NOP
	B0MOV	A,SYS_SEC
	SUB	A,#60D
	B0BTS1	FC;SNZ	C
	JMP	INT_EXIT1
	CLR	SYS_SEC
;-----------------------------------------
	INCMS	SYS_MIN
	NOP
	B0MOV	A,SYS_MIN
	SUB	A,#60D
	B0BTS1	FC;SNZ	C
	JMP	INT_EXIT1
	CLR	SYS_MIN
;-----------------------------------------
	INCMS	SYS_HOUR
	B0MOV	A,SYS_HOUR
	SUB	A,#24D
	B0BTS1	FC;SNZ	C
	JMP	INT_EXIT1
	CLR	SYS_HOUR
;-----------------------------------
; Exit interrupt service routine
;-----------------------------------
INT_EXIT1:
	B0MOV	A,PFLAGBUF	;Restore A and Pflag
	B0MOV	PFLAG,A		;Restore the PFlag
	B0XCH	A,ACCBUF	;Restore the Reg. A
				;B0xch instruction do not change C,Z flag
	RETI			;Exit the interrupt routine
;------------------------------------------------------------------------------
;脉冲输出
;------------------------------------
OUT_CLK:
	B0BCLR	WR;B0BSET	WR
	NOP
	B0BSET	WR;B0BCLR	WR
	RET
;------------------------------------
;段码输出
;------------------------------------
DATAOUT_1621:
	B0MOV	DISP_COM,A
	MOV	A,#8
	B0MOV	KEY_RAM,A
DATAOUT1:
	B0BTS1	DISP_COM.7
	B0BCLR	DAT
	B0BTS0	DISP_COM.7
	B0BSET	DAT
	NOP
	B0BCLR	WR;B0BSET	WR;CLK
	RLCM	DISP_COM
	B0BSET	WR;B0BCLR	WR;CLK
	DECMS	KEY_RAM
 	JMP	DATAOUT1
	RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -