📄 221显示时间.asm
字号:
;-------------------------------------
;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 + -