📄 fz_jfxdg290.asm
字号:
CHIP SN8P2714
//{{SONIX_CODE_OPTION
.Code_Option LVD LVD_L ; 2.0V Reset
.Code_Option RST_P0.3 P0.3
.Code_Option Watch_Dog Always_ON ; Watchdog still enable even in Green and Sleep mode
.Code_Option High_Clk RC ; Connect R to VDD and Xin Connect C to GND and Xin Enable P5.6 I/O pin
.Code_Option Fcpu #2 ; Fcpu = High_Clk/4
.Code_Option Security Enable
.Code_Option Noise_Filter Enable
//}}SONIX_CODE_OPTION
ORG 0000H
JMP START
ORG 0008H
JMP T00
ORG 0010H
;======================RAM定义
A_TEMP EQU 00H ;中断保存A值
PFLAG_TEMP EQU 01H ;中断保存PFLAG值
TIME EQU 02H
TIME_10MS EQU TIME.0
TIME_100MS EQU TIME.1
TIME_10MSF EQU TIME.2
TIME_100MSF EQU TIME.3
TIME_2MSF EQU TIME.4
TIME_2MS EQU TIME.5
T10MSRAM EQU 03H
T100MSRAM EQU 04H
T2MSRAM EQU 05H
AD1 EQU 06H
A1 EQU 07H
BGOTO2 EQU A1.0
BAUTOKEY60 EQU A1.1
BCLEARKEY EQU A1.2
BDRYKEY EQU A1.3
BHEATKEY EQU A1.4
BSTOPKEY EQU A1.5
BSETTIME EQU A1.6
BJIAKEY EQU A1.7
KEY1 EQU 08H
KEY2 EQU 09H
KEY3 EQU 0AH
KEY4 EQU 0BH
KEY5 EQU 0CH
KEY6 EQU 0DH
TIMEKEY EQU 0EH
BP01 EQU TIMEKEY.0
BP02 EQU TIMEKEY.1
TIMEKEY2 EQU 0FH
A2 EQU 10H
BJINKEY EQU A2.0
B1DI EQU A2.1
BOFF EQU A2.2
BCUTKEY EQU A2.3
BDONE EQU A2.4
BHEATF EQU A2.5
BDIDIDI EQU A2.6
B2DI EQU A2.7
R1 EQU 11H
R9 EQU 12H
B1 EQU 13H
A3 EQU 14H
BFIR1 EQU A3.0
BRUNBUZ EQU A3.1
BTIMEKEYOK EQU A3.2
BTIMEKEYCOME EQU A3.3
BTIMEOK EQU A3.4
B2S EQU A3.5
BFTIME EQU A3.6
BO2OVER1 EQU A3.7
B2 EQU 15H
B3 EQU 16H
B4 EQU 17H
B5 EQU 18H
KEY8 EQU 19H
A4 EQU 1AH
BO2 EQU A4.0
BFAN EQU A4.1
BHEAT EQU A4.2
BO2OVER EQU A4.3
BPOWERKEY1 EQU A4.4
BOPD1 EQU A4.5
BOPD2 EQU A4.6
BGOTO1 EQU A4.7
CTIME1 EQU 1BH
CTIME2 EQU 1CH
S1 EQU 1DH
W1 EQU 1EH
W2 EQU 1FH
ATIME EQU 20H
CTIME EQU 21H
G1 EQU 22H
J1 EQU 23H
P1 EQU 24H
U1 EQU 25H
V1 EQU 26H
J2 EQU 27H
L2 EQU 28H
V2 EQU 29H
J3 EQU 2AH
L6 EQU 2BH
L3 EQU 2CH
L4 EQU 2DH
B9 EQU 2EH
C1 EQU 2FH
C2 EQU 30H
C3 EQU 31H
; B8 EQU 32H
A5 EQU 33H
BO2F EQU A5.0
BFANF EQU A5.1
BREADOK EQU A5.2
AD2 EQU 34H
AD3 EQU 35H
AX EQU 7DH
BOFF2 EQU AX.0
B8 EQU 7EH
AZ EQU 7FH
BOFF1 EQU AZ.0
BPOWERKEY EQU AZ.1
BCHECK EQU AZ.2
BAUTO60RUN EQU AZ.3
BCLEARRUN EQU AZ.4
BDRYRUN EQU AZ.5
BHEATRUN EQU AZ.6
BPOWLEDOFF EQU AZ.7
;=======================RAM定义完成
;========================常量定义
TIME_REACH EQU #080H ;0.25毫秒中断初值
;========================常量定义完成
;===========计时中断程序
T00:
MOV A_TEMP,A ;中断保存A值
SWAP PFLAG ;这个指令不会对标志位PFLAG影响的
MOV PFLAG_TEMP,A ;中断保存PFLAG值
CLR INTRQ ;清中断标志
MOV A,TIME_REACH ;计时器初值,0.25ms的初值
MOV TC0C,A
@RST_WDT ;清看门狗
BTS1 BRUNBUZ
JMP CLOCK
MOV A,#01111111B
B0MOV DAM,A
B0BSET FDAENB
; BSET P4.7
INCMS B1
MOV A,B8
CMPRS A,B1
JMP CLOCK
; BCLR P4.7
B0BCLR FDAENB
CLR B1
CLOCK:
INCMS T2MSRAM
MOV A,#19d
SUB A,T2MSRAM
BTS0 FC
JMP OUT_CLOCK
CLR T2MSRAM
BSET TIME_2MS ;设定2MS标志
INCMS T10MSRAM ;ms+1
MOV A,#2d ;计尽得10ms
SUB A,T10MSRAM
BTS0 FC
JMP OUT_CLOCK
CLR T10MSRAM
BSET TIME_10MS ;设定10MS标志
INCMS T100MSRAM
MOV A,#12D
SUB A,T100MSRAM
BTS0 FC
JMP OUT_CLOCK
BSET TIME_100MS ;设定100MS标志
CLR T100MSRAM
OUT_CLOCK:
;============做完程序还原所有状态
SWAP PFLAG_TEMP
MOV PFLAG,A
MOV A,A_TEMP
T004:
RETI
;================================计时中断完成了
;===========================读键程序
READKEY:
BTS1 TIME_10MSF
JMP OUT_READKEY
BTS0 BCUTKEY
JMP OUT_READKEY
MOV A, #40H
B0MOV ADR, A ;选择12位AD,8分频转换时钟
MOV A,#95H
B0MOV ADM,A ;允许AD转换,选择AIN5通道
B0BSET FADS ;开始转换
WADC0:
B0BTS1 FEOC
JMP WADC0 ;等待转换完成
BCLR FEOC ;完成后就清除完成标志
MOV A,ADB
MOV AD1,A
; BTS0 BFTIME ;检测是否过了2秒
; JMP NEXT_KEY3
BTS0 BPOWERKEY1
JMP OUT_READKEY1
; MOV A,#19D
; CMPRS A,AD1
; JMP OUT_READKEY1
MOV A,#16D
MOV AD2,A
MOV A,#22D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP OUT_READKEY1
INCMS KEY1
MOV A,#5D
CMPRS A,KEY1
JMP OUT_READKEY
CLR KEY1
BSET B1DI
BSET BPOWERKEY1
BSET BPOWERKEY
BCLR BSTOPKEY
BCLR BHEATKEY
BCLR BDRYKEY
BCLR BCLEARKEY
BCLR BAUTOKEY60
CLR ATIME
BCLR BO2
BCLR BFAN
BCLR BHEAT
BCLR BPOWLEDOFF
BCLR BDIDIDI
BCLR B2S
CLR W1
CLR W2
BCLR BFTIME
BCLR BTIMEKEYOK
BCLR BAUTO60RUN
BCLR BCLEARRUN
BCLR BDRYRUN
BCLR BHEATRUN
BCLR BTIMEKEYOK
BCLR BTIMEKEYCOME
BCLR P4.3
BCLR P4.2
BCLR P4.0 ;P1.0
BCLR BHEATF
BCLR BO2F
BCLR BFANF
CLR CTIME
CLR CTIME1
CLR ATIME
CLR S1
JMP OUT_READKEY
OUT_READKEY1:
CLR KEY1 ;抗干扰
BTS0 BAUTO60RUN
JMP NEXT_KEYX
BTS0 BAUTOKEY60
JMP NEXT_KEYX
; MOV A,#10D
; CMPRS A,AD1
; JMP NEXT_KEYX
MOV A,#7D
MOV AD2,A
MOV A,#13D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP NEXT_KEYX
INCMS KEY2
MOV A,#5D
CMPRS A,KEY2
JMP NEXT_KEY
CLR KEY2
BSET B1DI
BSET BAUTOKEY60
BCLR BPOWERKEY1
BCLR BCLEARKEY
BCLR BHEATKEY
BCLR BDRYKEY
BCLR BSETTIME
BCLR BDIDIDI
BSET BPOWERKEY
BSET BAUTO60RUN
BCLR BCLEARRUN
BCLR BDRYRUN
BCLR BHEATRUN
BCLR BPOWLEDOFF
BCLR BHEATF
BCLR BO2F
BCLR BFANF
CLR W1
CLR W2
BCLR BFTIME
BCLR P4.3
BCLR P4.2
BCLR P4.0 ;P1.0
BCLR BTIMEKEYOK
BCLR BTIMEKEYCOME
BSET B2S
CLR S1
MOV A,#60D
MOV ATIME,A
CLR CTIME
CLR CTIME1
CLR CTIME2
BSET BO2
BSET BHEAT
BCLR BFAN
BCLR BDIDIDI
JMP OUT_READKEY
NEXT_KEYX:
CLR KEY2
NEXT_KEY:
BTS0 BCLEARRUN
JMP NEXT_KEY1X
BTS0 BCLEARKEY
JMP NEXT_KEY1X
; MOV A,#51D
; CMPRS A,AD1
; JMP NEXT_KEY1X
MOV A,#48D
MOV AD2,A
MOV A,#54D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP NEXT_KEY1X
INCMS KEY3
MOV A,#5D
CMPRS A,KEY3
JMP NEXT_KEY1
CLR KEY3
BSET B1DI
BSET BSETTIME
BSET BCLEARKEY
BCLR BHEATKEY
BCLR BDRYKEY
BCLR BAUTOKEY60
BCLR BPOWERKEY1
BSET B2S
CLR S1
BCLR BDIDIDI
BCLR BAUTO60RUN
BSET BCLEARRUN
BCLR BDRYRUN
BCLR BHEATRUN
BCLR BPOWLEDOFF
BSET BPOWERKEY
BCLR BTIMEKEYCOME
BCLR BTIMEKEYOK
CLR W1
CLR W2
BCLR BFTIME
BCLR P4.3
BCLR P4.2
BCLR P4.0 ;P1.0
MOV A,#45D
MOV CTIME,A
CLR ATIME
CLR CTIME1
CLR CTIME2
BCLR BHEATF
BCLR BO2F
BCLR BFANF
BSET BO2
BCLR BHEAT
BCLR BFAN
JMP OUT_READKEY
NEXT_KEY1X:
CLR KEY3
NEXT_KEY1:
BTS0 BDRYRUN
JMP NEXT_KEY2X
BTS0 BDRYKEY
JMP NEXT_KEY2X
; MOV A,#44D
; CMPRS A,AD1
; JMP NEXT_KEY2X
MOV A,#41D
MOV AD2,A
MOV A,#47D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP NEXT_KEY2X
INCMS KEY4
MOV A,#5D
CMPRS A,KEY4
JMP NEXT_KEY2
CLR KEY4
BSET B1DI
BSET BSETTIME
BCLR BCLEARKEY
BCLR BHEATKEY
BSET BDRYKEY
BCLR BAUTOKEY60
BCLR BPOWERKEY1
BCLR BDIDIDI
BCLR BAUTO60RUN
BCLR BCLEARRUN
BSET BDRYRUN
BCLR BHEATRUN
BCLR BPOWLEDOFF
BSET B2S
CLR S1
BCLR BHEATF
BCLR BO2F
BCLR BFANF
BCLR BTIMEKEYOK
BSET BPOWERKEY
CLR W1
CLR W2
BCLR BFTIME
BCLR BTIMEKEYCOME
BCLR P4.3
BCLR P4.2
BCLR P4.0 ;P1.0
MOV A,#30D
MOV CTIME1,A
CLR CTIME
CLR ATIME
CLR CTIME2
BCLR BO2
BCLR BHEAT
BSET BFAN
JMP OUT_READKEY
NEXT_KEY2X:
CLR KEY4
NEXT_KEY2:
BTS0 BHEATRUN
JMP NEXT_KEY3X
BTS0 BHEATKEY
JMP NEXT_KEY3X
; MOV A,#36D
; CMPRS A,AD1
; JMP NEXT_KEY3X
MOV A,#33D
MOV AD2,A
MOV A,#39D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP NEXT_KEY3X
INCMS KEY5
MOV A,#5D
CMPRS A,KEY5
JMP NEXT_KEY3
CLR KEY5
BSET B1DI
BSET BSETTIME
BCLR BDRYKEY
BSET BHEATKEY
BCLR BCLEARKEY
BCLR BAUTOKEY60
BCLR BPOWERKEY1
BSET B2S
CLR S1
MOV A,#30D
MOV CTIME2,A
BCLR BDIDIDI
CLR CTIME
CLR CTIME1
CLR ATIME
BCLR BO2
BSET BHEAT
BCLR BFAN
BCLR BHEATF
BCLR BO2F
BCLR BFANF
BSET BPOWERKEY
BCLR BPOWLEDOFF
BCLR BAUTO60RUN
BCLR BCLEARRUN
BCLR BDRYRUN
BSET BHEATRUN
BCLR BTIMEKEYOK
BCLR P4.3
BCLR P4.2
BCLR P4.0
CLR W1
CLR W2
BCLR BFTIME
BCLR BTIMEKEYCOME
JMP OUT_READKEY
NEXT_KEY3X:
CLR KEY5
NEXT_KEY3:
BTS0 BPOWLEDOFF
JMP OUT_READKEY
BTS0 BSTOPKEY
JMP NEXT_KEY4
; MOV A,#28D
; CMPRS A,AD1
; JMP NEXT_KEY4
MOV A,#25D
MOV AD2,A
MOV A,#31D
MOV AD3,A
CALL READAD
BTS1 BREADOK
JMP NEXT_KEY4
INCMS KEY6
MOV A,#5D
CMPRS A,KEY6
JMP OUT_READKEY
CLR KEY6
BSET B1DI
BCLR BHEATKEY
BCLR BDRYKEY
BCLR BCLEARKEY
BSET BSTOPKEY
BCLR BPOWERKEY
BCLR BSETTIME
BCLR BPOWERKEY1
BSET BPOWLEDOFF
CLR W1
CLR W2
BCLR BFTIME
BCLR BHEATF
BCLR BO2F
BCLR BFANF
BCLR BAUTO60RUN
BCLR BCLEARRUN
BCLR BDRYRUN
BCLR BHEATRUN
BCLR BTIMEKEYOK
BCLR P4.3
BCLR P4.2
BCLR P4.0 ;P1.0
BCLR BDIDIDI
BCLR BTIMEKEYCOME
BSET BOFF
BSET BOFF1
BSET B2S
CLR S1
JMP OUT_READKEY
NEXT_KEY4:
CLR KEY6
OUT_READKEY:
RET
;===========================读键程序完成
;===========================读数码时间键
READTIMEKEY:
BTS0 BFTIME
JMP OUT_READKEY
BTS1 TIME_10MSF
JMP OUT_READKEY
BTS1 BSETTIME
JMP OUT_READKEYX
BTS0 BTIMEKEYOK
JMP READTIMEKEY88
BTS0 P0.0;//!P0.0
JMP TIMEKEY_OK
INCMS KEY8
MOV A,#15D
CMPRS A,KEY8
JMP OUT_READKEYX
CLR KEY8
BSET BTIMEKEYCOME
JMP OUT_READKEYX
TIMEKEY_OK:
BTS0 BTIMEKEYCOME
JMP TIMEKEY_OK1
BCLR BTIMEKEYCOME
CLR KEY8
JMP OUT_READKEYX
TIMEKEY_OK1:
BSET BTIMEKEYOK
CLR S1
BSET B1DI
JMP OUT_READKEYX
READTIMEKEY88:
BTS0 P0.1
JMP SETP01
BCLR BP01
JMP READP02
SETP01:
BSET BP01
READP02:
BTS0 P0.0;//!P0.0
JMP SETP02
BCLR BP02
JMP READP
SETP02:
BSET BP02
READP:
BTS1 BP02
JMP READPP
BTS1 BP01
JMP READPP
JMP READPP1
READPP:
BTS0 BTIMEOK
JMP OUT_READKEYX
BSET BTIMEOK
MOV A,TIMEKEY
MOV TIMEKEY2,A
JMP OUT_READKEYX
READPP1:
BCLR BTIMEOK
MOV A,TIMEKEY2
AND A,#03H ;保存TIMEKEY2的最后两位
CMPRS A,#02D
JMP NEXT_READPP
CLR TIMEKEY2
BSET BJIAKEY
CLR S1
;**************CTIME1,CTIME和HTIME处理程序
BTS1 BCLEARKEY
JMP A_TIME
MOV A,#65D
CMPRS A,CTIME
JMP A_TIME1
JMP OUT_READKEY;如果HTIME没超过65就可以继续加,要不就停止.
A_TIME1:
MOV A,#10D
ADD CTIME,A ;每按一次加号,HTIME加10MIN
JMP OUT_READKEY
A_TIME:
BTS1 BDRYKEY
JMP A_TIME_1
MOV A,#40D
CMPRS A,CTIME1
JMP A_TIME2
JMP OUT_READKEY;如果HTIME没超过40就可以继续加,要不就停止.
A_TIME2:
MOV A,#10D
ADD CTIME1,A ;每按一次加号,CTIME加10MIN
JMP OUT_READKEY
A_TIME_1:
BTS1 BHEATKEY
JMP OUT_READKEY
MOV A,#60D
CMPRS A,CTIME2
JMP A_TIME2_1
JMP OUT_READKEY
A_TIME2_1:
MOV A,#10D
ADD CTIME2,A
JMP OUT_READKEY
;**************CTIME1,CTIME和HTIME处理程序
; INCMS R9
JMP OUT_READKEYX
NEXT_READPP:
MOV A,TIMEKEY2
AND A,#03H ;保存TIMEKEY2的最后两位
CMPRS A,#01D
JMP OUT_READKEYX1
CLR TIMEKEY2
BSET BJINKEY
CLR S1
;**************CTIME,CTIME1,CTIME2处理程序
BTS1 BCLEARKEY
JMP A_TIME3
MOV A,#35D
CMPRS A,CTIME
JMP A_TIME4
JMP OUT_READKEY;如果CTIME没低于35就可以继续减,要不就停止.
A_TIME4:
MOV A,CTIME
SUB A,#10D
MOV CTIME,A ;每按一次减号,CTIME减10MIN
JMP OUT_READKEY
A_TIME3:
BTS1 BDRYKEY
JMP A_TIME3_1
MOV A,#20D
CMPRS A,CTIME1
JMP A_TIME5
JMP OUT_READKEY;如果CTIME1没低于20就可以继续减,要不就停止.
A_TIME5:
MOV A,CTIME1
SUB A,#10D
MOV CTIME1,A ;每按一次减号,CTIME减10MIN
JMP OUT_READKEY
A_TIME3_1:
BTS1 BHEATKEY
JMP OUT_READKEY
MOV A,#20D
CMPRS A,CTIME2
JMP A_TIME5_1
JMP OUT_READKEY
A_TIME5_1:
MOV A,CTIME2
SUB A,#10D
MOV CTIME2,A
JMP OUT_READKEY
;**************CTIME,CTIME1,CTIME2处理程序
JMP OUT_READKEYX
OUT_READKEYX1:
CLR TIMEKEY2
OUT_READKEYX:
RET
;===========================读数码时间键完成
;====================读键子程序
READAD:
MOV A,AD1
SUB A,AD2
BTS1 FC
JMP READAD1
MOV A,AD1
SUB A,AD3
BTS0 FC
JMP READAD1
BSET BREADOK
RET
READAD1:
BCLR BREADOK
RET
;====================读键子程序完成
;===============读蜂鸣器程序
BUZ:
BTS1 TIME_10MSF
JMP OUT_BUZ
BTS1 BOFF
JMP NEXTBUZ_1
BSET BCUTKEY ;当有关机信号时不能按键,防止蜂鸣器报警出错.
BTS0 B1DI ;假如还有其他报警信号就不开关机蜂鸣
JMP NEXTBUZ_1A
JMP CLR_RAM1
NEXTBUZ_1:
BTS1 BDONE ;工作完成后六声报警.
JMP NEXTBUZ_1A
INCMS B3
MOV A,#200D
CMPRS A,B3
JMP NEXTBUZ_1A
BSET B1DI
CLR B3
INCMS B4
MOV A,#6D
CMPRS A,B4
JMP NEXTBUZ_1A
CLR B4
BCLR BDONE
BSET BOFF2
;=========================清除所有内存,进入待机状态.
CLR_RAM1:
BCLR P4.0
BCLR P4.2
BCLR P4.3
MOV A, #0
B0MOV Y, A ; Y = 1, bank 1
MOV A, #07CH
B0MOV Z, A ; Y = 2FH, 最后的内存地址
CLR_YZ_BUF1:
@RST_WDT ;清看门狗
CLR @YZ ; 清@YZ
DECMS Z ; Y – 1, if Y= 0, finish the routine
JMP CLR_YZ_BUF1 ; Not zero
CLR @YZ
END_CLR1:
BTS1 BOFF1
JMP NEXT_OFF
BCLR BOFF1
BCLR BPOWERKEY ;关机
JMP OUT_BUZ
NEXT_OFF:
BTS1 BOFF2
JMP OUT_BUZ
BCLR BOFF2
BSET BPOWLEDOFF
JMP OUT_BUZ
;================;清除所有内存完成
NEXTBUZ_1A:
BTS1 BDIDIDI
JMP NEXTBUZ_2
INCMS B5
MOV A,#180D
CMPRS A,B5
JMP NEXTBUZ_2
CLR B5
BSET B1DI
NEXTBUZ_2:
BTS1 B2DI
JMP NEXTBUZ_3
BTS0 BFIR1
JMP NEXTBUZ_21
BSET BFIR1
MOV A,#04D
MOV B8,A
BSET B1DI
BSET P4.7
NEXTBUZ_21:
INCMS B5
MOV A,#180D
CMPRS A,B5
JMP NEXTBUZ_3
CLR B5
BSET B1DI
MOV A,#03D
MOV B8,A
BSET P4.7
BCLR B2DI
NEXTBUZ_3:
BTS1 B1DI
JMP OUT_BUZ
BSET BRUNBUZ
INCMS B2
MOV A,#50D
CMPRS A,B2
JMP OUT_BUZ
CLR B2
BCLR P4.7
INCMS B9
MOV A,#2D
CMPRS A,B9
JMP OUT_BUZ
CLR B9
BCLR BRUNBUZ
BCLR B1DI
BSET P4.7
MOV A,#00000000B
B0MOV DAM,A
B0BSET FDAENB
B0BCLR FDAENB ;以免长期高电瓶.
JMP OUT_BUZ
OUT_BUZ:
RET
;===============读蜂鸣器程序完成
;=============LED显示程序
LED:
BTS1 TIME_2MSF
JMP OUT_LED
BCLR P2.0
BCLR P2.1
BCLR P2.2
BCLR P2.3
BCLR P2.4
BCLR P5.6
BTS0 BDONE
JMP OUT_LED
BTS0 BOFF
JMP OUT_LED
MOV A,U1
ADD PCL,A
JMP GOON_LED
JMP GOON_LED1
JMP GOON_LED2
JMP GOON_LED3
JMP GOON_LED5
GOON_LED:
INCMS U1
B0MOV Y,#TAB1$M
B0MOV Z,#TAB1$L
MOV A,#0D
CMPRS A,ATIME
JMP GOON_LED_1
CMPRS A,CTIME
JMP GOON_LED_2
CMPRS A,CTIME1
JMP GOON_LED_3
CMPRS A,CTIME2
JMP GOON_LED_4
INCMS U1 ;在没按键时候屏蔽时钟
JMP OUT_LED
GOON_LED_4:
MOV A,CTIME2
JMP GOON_LEDGO1
GOON_LED_3:
MOV A,CTIME1
JMP GOON_LEDGO1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -