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

📄 221显示时间.asm

📁 一个SN8P2714的LCD驱动程序可以显示时间
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------
;BCD码的转换
;-------------------------------------
BCD_CHANG:
	B0MOV	XS_DATA1,A
	CLR	XS_DATA2
BCD_DA:
	B0MOV	A,XS_DATA1
	SUB	A,#10
	B0BTS1	FC
	RET
	B0MOV	XS_DATA1,A
	INCMS	XS_DATA2
	NOP
	JMP	BCD_DA
;------------------------------------
;LED显示子程序
;------------------------------------
LED_STA:
	B0BSET	KLED
LED_END:RET
;-------------------------------------------------------------------------------
; 			Program reset section
;-------------------------------------------------------------------------------
PROGRAM_START:
	MOV	A,#07FH				;Initial stack pointer and
  B0MOV	STKP,A				;disable global interrupt

	CLR	PFLAG
	CLR	INTEN
	CLR	INTRQ
;----------------------------------------------
	MOV    	A,#00H				;Initial system mode
	B0MOV	OSCM,A				;CPU晶振运行方式

	MOV	A,#5AH
	B0MOV	WDTR,A				;Clear watchdog timer
;-------------------------------------------------------------------------------
; ClrRAM
; Use index @YZ to clear RAM (00h~3Fh)
;-------------------------------------------------------------------------------
ClrRAM:
	CLR	Y
	MOV	A,#7FH
	B0MOV	Z,A				;Set @YZ address from 2fh
ClrRAM10:
	CLR	@YZ				;Clear @YZ content
	DECMS	Z   				;z = z - 1 , skip next if z=0
	JMP	ClrRAM10
	CLR	@YZ				;Clear address $00

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

	B0BSET	BUZ
	B0BSET	AD_COUNT.0

	B0BSET	FTC0X8
	B0BCLR	FTC0IEN
	B0BCLR	FTC0ENB
	B0BCLR	FTC0IRQ
	MOV	A,#0X74;34;74
	B0MOV	TC0M,A
	MOV	A,#240;240
	B0MOV	TC0C,A
	MOV	A,#250;
	B0MOV	TC0R,A
	B0BCLR 	FTC0OUT 	; Disable TC0OUT function.
	B0BSET 	FPWM0OUT
	B0BSET	FTC0ENB
	B0BSET	TC0M.2		;ALOAD0 ; To enable TC0 auto-reload function.

	B0BSET 	FTC1X8 		;
	B0BCLR 	FTC1IEN 	; Disable TC1 interrupt service
	B0BCLR 	FTC1ENB 	; Disable TC1 timer
	MOV 	A, #40H;30H 	;44自动装载
	B0MOV 	TC1M, A 	; Set TC1 clock = Fcpu / 256;8
	MOV 	A, #131;145;;224;32; Set TC1C initial value = 32
	B0MOV 	TC1C, A 	; Set TC1 interval = 250us
	B0MOV	TC1R,A
	B0BSET	FTC1IEN 	; Enable TC1 interrupt service
	B0BCLR 	FTC1IRQ 	; Clear TC1 interrupt request flag
	B0BSET 	FTC1ENB 	; Enable TC1 timer
	B0BCLR 	FTC1OUT 	; Disable TC0OUT function.
	B0BCLR 	FPWM1OUT
	B0BSET	TC1M.2
	B0BSET 	FGIE 	; Enable GIE
	MOV	A,#12
	B0MOV	SYS_HOUR,A
	MOV	A,#100
	B0MOV	DEL_TIME,A
INT:
;-------------------------------------------------------------------------------
; 	Main routine
;-------------------------------------------------------------------------------
MAIN:
	MOV	A,#5AH
	B0MOV	WDTR,A				;Clear watchdog timer
;---------------------------------------------
;端口设置
;---------------------------------------------
COMM_START:
;-------------------------------------------------------
	MOV	A,#11111111B
	B0MOV	P0UR,A
	MOV	A,#00000000B
	B0MOV	P2UR,A				;无上拉
	CLR	P4UR
	CLR	P5UR

	MOV	A,#00001111B
	B0MOV	P4M,A
	MOV	A,#00001111B
	B0MOV	P5M,A
	MOV	A,#00000010B
	B0MOV	P2M,A
	BSET  P2.1
	CALL	LED_STA
;--------------------------------------
BUZ_SOUND:
	B0BSET	BUZ
	B0BSET	KEY_YES
KEY_END:
;-------------------------------------
;初始化HT1621命令
;-------------------------------------
START_COM:
	MOV	A,#00000000B
	B0MOV	LCD_DATA1,A
	B0MOV	LCD_DATA2,A
	B0MOV	LCD_DATA3,A
	B0MOV	LCD_DATA4,A
	B0MOV	LCD_DATA5,A
	B0MOV	LCD_DATA6,A
	B0MOV	LCD_DATA7,A
	B0MOV	LCD_DATA8,A
	B0MOV	LCD_DATA9,A
	B0MOV	LCD_DATA10,A
	
	MOV	A,#5AH
	B0MOV	WDTR,A				;Clear watchdog timer

	B0MOV	A,TIME_5SEC
	B0BTS1	FZ;	TIME_5SEC
	JMP	DISP_SET_DEL_TIME
	B0BTS0	DS_FG
	JMP	DISP_YANSHI_TIME
	B0MOV	A,SYS_MIN
	JMP	DISP_DATA_OK
DISP_SET_DEL_TIME:	
	MOV	A,#0D;WORK_TIME
	JMP	DISP_DATA_OK
DISP_YANSHI_TIME:
	B0MOV	A,TIME_1S
DISP_DATA_OK:		
	CALL	BCD_CHANG	;显示时间分钟
	B0MOV	A,XS_DATA1
	CALL	CHECK_TABLE
	B0MOV	LCD_DATA4,A
	B0MOV	A,XS_DATA2
	CALL	CHECK_TABLE
	B0MOV	LCD_DATA3,A

	B0BTS0	SHUN
	B0BSET	LCD_DATA3.4
	B0BTS0	BUZ_EN
	B0BSET	LCD_DATA3.4
;------------------------------------
DISP_TIME_MIN:
	B0MOV	A,TIME_5SEC
	B0BTS1	FZ;TIME_5SEC
	JMP	DEL_MIN_SHUN
	B0BTS1	MIN_FG
	JMP	EXIT_MIN_SHUN
	B0BTS0	BUZ_EN
	JMP	EXIT_MIN_SHUN
DEL_MIN_SHUN:
	B0BTS0	SHUN
	JMP	EXIT_MIN_SHUN
	CLR	LCD_DATA4
	CLR	LCD_DATA3
EXIT_MIN_SHUN:				
;------------------------------------
	B0MOV	A,TIME_5SEC
	B0BTS1	FZ;TIME_5SEC
	JMP	DISP_SET_DEL_TIMEA
	B0BTS0	DS_FG
	JMP	DISP_YANSHI_TIMEA
	B0MOV	A,SYS_HOUR
	JMP	DISP_DATA_OKA
DISP_SET_DEL_TIMEA:	
	B0MOV	A,WORK_TIME
	JMP	DISP_DATA_OKA
DISP_YANSHI_TIMEA:
	B0MOV	A,DELAY_TIME
DISP_DATA_OKA:	
	CALL	BCD_CHANG	;显示时间小时
	B0MOV	A,XS_DATA1
	CALL	XS_DATA_TABLE
	B0MOV	LCD_DATA2,A
	B0MOV	A,XS_DATA2
	CALL	XS_DATA_TABLE
	B0MOV	LCD_DATA1,A
	
	B0MOV	A,TIME_5SEC
	B0BTS1	FZ;SZ	TIME_5SEC
	JMP	DEL_HOUR_SHUN
	B0BTS1	HOUR_FG
	JMP	EXIT_HOUR_SHUN
	B0BTS0	BUZ_EN
	JMP	EXIT_HOUR_SHUN
DEL_HOUR_SHUN:
	B0BTS0	SHUN
	JMP	EXIT_HOUR_SHUN
	CLR	LCD_DATA1
	CLR	LCD_DATA2
EXIT_HOUR_SHUN:	
;----------------------------------------------
START_COM1:
	MOV	A,#00100000B
	XOR	FLAGB,A
	B0BTS1	DISP
	JMP	DISP_END
	MOV	A,#5AH
	B0MOV	WDTR,A
	B0BCLR	CS
	NOP
	NOP
	B0BSET	DAT		;
	CALL	OUT_CLK		;
	B0BCLR	DAT		;
	CALL	OUT_CLK		;
	CALL	OUT_CLK		;写命令字100
	MOV	A,#00011000B	;内部256KRC振荡
	CALL	DATAOUT_1621	;
	CALL	OUT_CLK		;
	MOV	A,#00000001B	;启动内部系统振荡
	CALL	DATAOUT_1621	;
	CALL	OUT_CLK		;
	MOV	A,#00101001B	;BASIandCOM#00101001B
	CALL	DATAOUT_1621	;
	CALL	OUT_CLK		;
	MOV	A,#00001001B	;启动输出
	CALL	DATAOUT_1621	;
	CALL	OUT_CLK		;
	B0BSET	CS		;
	NOP
	NOP
	B0BCLR	CS
	NOP
	NOP
	MOV	A,#10100011B	;写命令101,
	CALL	DATAOUT_1621	;数据地址
	CALL	OUT_CLK		;6个0
	MOV	A,#00H
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA1
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA2
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA3
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA4
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA5
	CALL	DATAOUT_1621

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

	MOV	A,LCD_DATA6
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA7
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA8
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA9
	CALL	DATAOUT_1621

	MOV	A,LCD_DATA10
	CALL	DATAOUT_1621


	NOP
	B0BSET	CS
	NOP
	NOP
	B0BCLR	CS
	NOP
	NOP
	B0BSET	DAT
	CALL	OUT_CLK
	B0BCLR	DAT
	CALL	OUT_CLK
	CALL	OUT_CLK
	MOV	A,#00000011B
	CALL	DATAOUT_1621
	CALL	OUT_CLK
	NOP
	NOP
	B0BSET	CS
DISP_END:
CALL	LED_STA
;---------------------------------------
;确定输出状态
;---------------------------------------	
		JMP	MAIN
		JMP	MAIN

;=========================================
XS_DATA_TABLE:
	B0MOV	KEY_RAM,A
	B0MOV	Y,#XS_TABLE$M
	B0MOV	Z,#XS_TABLE$L
	B0MOV	A,KEY_RAM
	B0ADD	Z,A
	B0BTS1	FC
	JMP	GETDATAEE7
	INCMS	Y
	NOP
GETDATAEE7:
	MOVC
;	B0MOV	KEY_RAM,A
	RET
XS_TABLE:
	       				;DFGPBACE
	DB	10101111B	;0      ;DB	00110000B	;0
	DB	00000110B	;1      ;DB	11110101B	;1
	DB	01101101B	;2	;DB	01010010B	;2
	DB	01001111B	;3      ;DB	01010001B	;3
	DB	11000110B	;4      ;DB	10010101B	;4
	DB	11001011B	;5      ;DB	00011001B	;5
	DB	11101011B	;6      ;DB	00011000B	;6
	DB	00001110B	;7      ;DB	11110001B	;7
	DB	11101111B	;8      ;DB	00010000B	;8
	DB	11001111B	;9      ;DB	00010001B	;9
	DB	11101001B	;E      ;DB	00011010B	;E
	DB	01100000B	;R      ;DB	11011110B	;R
	DB	00000000B	;       ;DB	11111111B	;

;==============================================================================
LCD_DISP:
	DB	00111111B	;0
	DB	00000110B	;1
	DB	01011011B	;2
	DB	01001111B	;3
	DB	01100110B	;4
  DB	01101101B	;5
	DB	01111101B	;6
	DB	00000111B	;7
	DB	01111111B	;8
	DB	01101111B	;9
	DB	01111001B	;E
	DB	01010000B	;R
;-------------------------------------
;查表子程序
;-------------------------------------
CHECK_TABLE:
	B0MOV	KEY_RAM,A
	B0MOV	Y,#XS_TABLE$M
	B0MOV	Z,#XS_TABLE$L
	B0MOV	A,KEY_RAM
	B0ADD	Z,A
	B0BTS1	FC
	JMP	GETDATAEE
	INCMS	Y
	NOP
GETDATAEE:
	MOVC
;	B0MOV	KEY_RAM,A
	RET
;-----------------------------------------
;显示查表子程序
;-----------------------------------------
DISP_TABLE:
	B0MOV	KEY_RAM,A
	B0MOV	Y,#LCD_DISP$M
	B0MOV	Z,#LCD_DISP$L
	B0MOV	A,KEY_RAM
	B0ADD	Z,A
	B0BTS1	FC
	JMP	GETDATAEE4
	INCMS	Y
	NOP
GETDATAEE4:
	MOVC
	B0MOV	KEY_RAM,A
	RET
;-----------------------------------------
RET
ENDP

⌨️ 快捷键说明

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