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

📄 dj-18.asm

📁 单片机音频信号处理软件2.
💻 ASM
字号:
.include  "1200def.inc"

;***** Global Registers

.def	x_sr		=r0	;
.def	x_o_buf_l	=r1	;codec output buffer register
.def	x_o_buf_h	=r2
.def	x_i_buf_l	=r3	;codec input buffer register
.def	x_i_buf_h	=r4
.def	x_adc_com	=r5
.def	x_adc_value	=r6

.def	x_o_data_l	=r7	;codec output data register
.def	x_o_data_h	=r8
.def	x_delay_l	=r9	;adc delay value
.def	x_delay_h	=r10
.def	x_portd_i_buf	=r11

.def	x_adc_del	=r12
.def	x_adc_rep	=r13
.def	x_00		=r14
.def	x_80		=r15


.def	u_tmp		=r16
.def	u_tmp_l		=r17
.def	u_tmp_h		=r18
.def	u_adc_pin	=r19
.def	u_i_data_l	=r20	;codec input data register
.def	u_i_data_h	=r21			=r20
.def	u_adc_clk_cunt	=r22
.def	u_rep_val	=r23
.def	u_fb_data_l	=r24
.def	u_fb_data_h	=r25
.def	u_o_ptr_l	=r26
.def	u_o_ptr_h	=r27
.def	u_i_ptr_l	=r28
.def	u_i_ptr_h	=r29
.def	u_flags		=r30
.def	u_portd_o_buf	=r31



;***** Constant


.equ	codec_do	= 0

.equ	codec_bck	= 2
.equ	codec_fs	= 3
.equ	adc_ch0		= 3
.equ	adc_ch1		= 7
.equ	adc_dat_rdy_f	= 2
.equ	k_adc_dat_rdy_f	= 0b00000100
.equ	adc_rec_act_f	= 1
.equ	k_adc_rec_act_f	= 0b00000010	
.equ	adc_di		= 0
.equ	k_adc_di	= 0b00000001
.equ	adc_clk		= 1
.equ	k_adc_clk_pin	= 0b00000010
.equ	k_adc_cs_pin	= 0b00000100
.equ	adc_cs		= 2
.equ	adc_do		= 3
.equ	last_adc_data_clk 	= 13
.equ	last_adc_com_clk	= 5
.equ	by_pass_mode = 0b01010110
.equ	delay_dat_f	= 3
.equ	k_delay_dat_f	= 0b00001000
.equ	enable_effect_f	= 4
.equ	k_toggle_sw	= 0b00010000
.equ	led_pin		= 4
.equ	k_led_pin	= 0b00010000

.equ	adc_sw_dir		= 0b11010111
.equ	sw_pin		= 5
.equ	sw_pressed_f	= 5
.equ	k_sw_pressed_f	= 0b00100000
.equ	effect_latch	= 7
.equ	k_effect_latch	= 0b10000000
.equ	bypass_latch	= 6
.equ	k_bypass_latch	= 0b01000000

	

;flags define
;	forward & reverse effect mode 	0
;	adc receives data ready flag	1
;	adc data ready flag		2
;	delay data process flag		3
;	enable effect state flag 	4
;	switch has pressed flag		5
;	detect switch press		6


.MACRO	latch_all
	;cbi	PORTD,4
	;cbi	PORTD,5
	;cbi	PORTD,6
	;andi	u_portd_o_buf,0b00001111

	ldi	u_portd_o_buf,0b00001111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	latch_add_l
;	cbi	PORTD,4
;	sbi	PORTD,5
;	cbi	PORTD,6
;	andi	u_portd_o_buf,0b00001111
;	ori	u_portd_o_buf,0b00101101

	ldi	u_portd_o_buf,0b00101111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	latch_add_h
;	sbi	PORTD,4
;	cbi	PORTD,5
;	cbi	PORTD,6

	ldi	u_portd_o_buf,0b00011111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	low_ram_read
;	sbi	PORTD,4
;	sbi	PORTD,5
;	cbi	PORTD,6
;	andi	u_portd_o_buf,0b00001111
;	ori	u_portd_o_buf,0b00111101

	ldi	u_portd_o_buf,0b00111111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	high_ram_read
;	cbi	PORTD,4
;	cbi	PORTD,5
;	sbi	PORTD,6
;	andi	u_portd_o_buf,0b00001111
;	ori	u_portd_o_buf,0b01001101

	ldi	u_portd_o_buf,0b01001111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	low_ram_write
;	sbi	PORTD,4
;	cbi	PORTD,5
;	sbi	PORTD,6
;	andi	u_portd_o_buf,0b00001111
;	ori	u_portd_o_buf,0b01011101

	ldi	u_portd_o_buf,0b01011111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	high_ram_write
;	cbi	PORTD,4
;	sbi	PORTD,5
;	sbi	PORTD,6
;	andi	u_portd_o_buf,0b00001111
;	ori	u_portd_o_buf,0b01101101

	ldi	u_portd_o_buf,0b01101111
	out	PORTD,u_portd_o_buf
.ENDMACRO

.MACRO	adc_latch
;	sbi	PORTD,4
;	sbi	PORTD,5
;	sbi	PORTD,6
;	ori	u_portd_o_buf,0b01111101

	ldi	u_portd_o_buf,0b01111111	
	out	PORTD,u_portd_o_buf
.ENDMACRO


.MACRO	SET_PORTB_INPUT
	clr	u_tmp			;1*
	out	DDRB,u_tmp		;1* set input
.ENDMACRO

.MACRO	SET_PORTB_OUTPUT
	ser	u_tmp
	out	DDRB,u_tmp		;1* set output
.ENDMACRO
;***** code segment 


	.cseg

	.org	$0000
	rjmp	init

	.org	INT0addr
	rjmp	ext_int0
	
	
	.org	OVF0addr
	reti

	.org	ACIaddr
	reti


;***** External int. by BCK 
ext_int0:

;
	in	x_sr,SREG	;1 store status register
dat_to_codec:
	rol	x_o_buf_l		;1 c<- outbuf_l(7)		
	rol	x_o_buf_h		;1 outbuf_h(0) <- c ,c<-outbuf_h(7)		
	andi	u_portd_o_buf,0b11111101
	brcc	out_dat_to_codec
	ori	u_portd_o_buf,0b00000010
	
out_dat_to_codec:
	out	PORTD,u_portd_o_buf
	
	in	x_portd_i_buf,PIND	;1/(2) 	|skip codec data is low
	ror	x_portd_i_buf	;1	|
	rol	x_i_buf_l		;1	|MAX 11 
	rol	x_i_buf_h		;1	|
	out	SREG,x_sr
	sbis	PIND,codec_fs	;1/2	|
	reti				;4	|
;**** max 19 cycles
;	mov	x_o_buf_l,x_i_buf_l
;	mov	x_o_buf_h,x_i_buf_h
	mov	x_o_buf_l,x_o_data_l	;1 |
	mov	x_o_buf_h,x_o_data_h	;1 |
	mov	u_i_data_l,x_i_buf_l	;1 |MAX 10
	mov	u_i_data_h,x_i_buf_h	;1 |
return:
	out	SREG,x_sr		;1 |
	reti				;4 |

;***** max 25 cycles
;first 15 bit codec data use 19 cycles 
;last bit codec data use 25 cycles 
;total 16 codec data = 19 * 15 + 25 = 310 cycles
;
	
init:	
	ldi	u_tmp,0x65
	out	0x3d,u_tmp	
	ldi	u_tmp,(1<<DDD1)+(1<<DDD4)
	OUT	DDRD,u_tmp

	ldi	u_tmp,0x40
	out	GIMSK,u_tmp		;Enable external interrupt 0
	ldi	u_tmp,0x02
	out	MCUCR,u_tmp		;on falling edges
		
	ldi	u_tmp,0b01110010	;set the portd bit direction
	out	DDRD,u_tmp

	ldi	u_tmp,0b00000100
	mov	r30,u_tmp	;u_flags
	
	SET_PORTB_INPUT
	adc_latch
	nop
	in	u_tmp,PINB
	sbrc	u_tmp,5
	rjmp	forward_mode
reverse_mode:
	ori	r30,0b00000001
	rjmp	initadc_latch
	

forward_mode:
	andi	r30,0b11111110
	ori	r30,0b00100000
	
initadc_latch:

	adc_latch	
	ldi	u_adc_pin,0b01010110	;.7 effect off 0
					;.6 bypass on  1
					;.5 x
					;.4 led  off   1
					;.3 x
					;.2 adc cs h   1
					;.1 adc clk h  1
					;.0 x
	ser	u_tmp
	out	DDRB,u_tmp
	out	PORTB,u_adc_pin
	latch_all

	clr	x_o_buf_l
	clr	x_o_buf_h
init_value:
	
	clr	u_o_ptr_l
	clr	u_o_ptr_h

	clr	x_i_buf_l
	clr	x_i_buf_h
	
	clr	u_i_data_l
	clr	u_i_data_h
	clr	x_o_data_l
	clr	x_o_data_h

	clr	x_adc_value
	clr	u_rep_val
	clr	x_adc_del
	clr	x_adc_rep

	ldi	u_tmp,0x00
	mov	x_00,u_tmp

	ldi	u_tmp,0x80
	mov	x_80,u_tmp
	
	
	ldi	u_tmp,0x7f
	mov	x_delay_h,u_tmp
	
	ldi	u_tmp,0xff
	mov	x_delay_l,u_tmp
	
	clr	u_i_ptr_l	
	clr	u_i_ptr_h

	SET_PORTB_OUTPUT
address:
	out	PORTB,u_i_ptr_l		;1*
	latch_add_l
	latch_all
				;2*
	out	PORTB,u_i_ptr_h		;1*
	latch_add_h
	latch_all

	ldi	u_tmp,0
	out	PORTB,u_tmp		;1*
	low_ram_write
	latch_all

	out	PORTB,u_tmp		;1*
	high_ram_write
	latch_all
	
	subi	u_i_ptr_l,low(-1)	;1*
	sbci	u_i_ptr_h,high(-1)	;1*
	sbrs	u_i_ptr_h,7
	brcs	address

	
	ldi	u_tmp,0b00000011	;adc_ch0
	mov	x_adc_com,u_tmp

	clr	u_adc_clk_cunt		
	clr	u_i_ptr_h

start:	sbis	PIND,3			;wait for fs high
	rjmp	start
wait_fs_low:
	sbic	PIND,3			;wait for fs low
	rjmp	wait_fs_low

	sei
	rjmp	first_begin	


wait_fs_pulse:
	latch_all
wait_fs:
	sbis	PIND,3			; wait for FS high
	rjmp 	wait_fs
fs_low:
	sbic	PIND,3			;wait for FS low
	rjmp	fs_low

		
;get the data from the memory 
first_begin:
	SET_PORTB_OUTPUT

	out	PORTB,u_o_ptr_l		;1*
	latch_add_l
	latch_all	


	out	PORTB,u_o_ptr_h		;1*
	latch_add_h
	latch_all

	SET_PORTB_INPUT

	low_ram_read			;2*
	nop
	in	x_o_data_l,PINB		;1*
	mov	u_tmp_l,x_o_data_l	;1*

	high_ram_read			;2*
	nop
	in	x_o_data_h,PINB		;1*
	mov	u_tmp_h,x_o_data_h	;1*

remain_fb_data:
	clt				;1*
	sbrs	u_tmp_h,7		;2*
	rjmp	div_8			;2
	
	set				;1*
 	com	u_tmp_l			;1*
	com	u_tmp_h			;1*
	subi	u_tmp_l,low(-1)		;1*
	sbci	u_tmp_h,high(-1)	;1*
div_8:	clc				;1*
	ror	u_tmp_h			;1*
	ror	u_tmp_l			;1*	
	clc				;1*
	ror	u_tmp_h			;1*
	ror	u_tmp_l			;1*	
	clc				;1*
	ror	u_tmp_h			;1*
	ror	u_tmp_l			;1*
	mov	u_fb_data_l,u_tmp_l
	mov	u_fb_data_h,u_tmp_h		

	

	cpi	u_rep_val,6
	breq	times_6
	cpi	u_rep_val,5
	breq	times_5
	cpi	u_rep_val,4
	breq	times_4
	cpi	u_rep_val,3
	breq	times_3
	cpi	u_rep_val,2
	breq	times_2
	cpi	u_rep_val,1
	breq	check_neq
	cpi	u_rep_val,0
	breq	times_0
	mov	u_fb_data_l,x_o_data_l
	mov	u_fb_data_h,x_o_data_h
	rjmp	save_ram	
	
times_0:clr	u_fb_data_l
	clr	u_fb_data_h
	rjmp	save_ram
		
times_2:clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	rjmp	check_neq	;16

times_3:clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	add	u_fb_data_l,u_tmp_l
	adc	u_fb_data_h,u_tmp_h
	rjmp	check_neq	;16 t

times_4:clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	rjmp	check_neq	;13

times_5:clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	add	u_fb_data_l,u_tmp_l
	adc	u_fb_data_h,u_tmp_h
	rjmp	check_neq	;14

times_6:clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	clc
	rol	u_fb_data_l
	rol	u_fb_data_h
	add	u_fb_data_l,u_tmp_l
	adc	u_fb_data_h,u_tmp_h
	add	u_fb_data_l,u_tmp_l
	adc	u_fb_data_h,u_tmp_h	;12

check_neq:
	brtc	save_ram		;2
	com	u_fb_data_l		;1*
	com	u_fb_data_h		;1*
	subi	u_fb_data_l,low(-1)	;1*
	sbci	u_fb_data_h,high(-1)	;1*
save_ram:
	
	SET_PORTB_OUTPUT

					;2*
	out	PORTB,u_fb_data_l	;1*
	low_ram_write
	latch_all

	out	PORTB,u_fb_data_h	;1*
	high_ram_write
	latch_all

;	sbrc	r30,0
;	rjmp	reverse

;	subi	u_o_ptr_l,low(-1)	;1
;	sbci	u_o_ptr_h,high(-1)	;1
;	cp	x_delay_l,u_o_ptr_l	;1*
;	cpc	x_delay_h,u_o_ptr_h	;1*
;	brcc	skip_init_o_ptr		;1*
;	clr	u_o_ptr_l			;1*
;	clr	u_o_ptr_h	
;	rjmp	skip_init_o_ptr

reverse:subi	u_o_ptr_l,low(1)
	sbci	u_o_ptr_h,high(1)
	sbrs	u_o_ptr_h,7
	rjmp	skip_init_o_ptr		;1*
	mov	u_o_ptr_l,x_delay_l	;1*
	mov	u_o_ptr_h,x_delay_h	;1*

skip_init_o_ptr:

;*****89 cycles
;write data to memory 
;	sbrc	u_adc_pin,6
;	rjmp	skip_change
;	ori	u_adc_pin,0b00010000
;	cpi	u_i_ptr_h,0x08
;	brlo	skip_change
;	andi	u_adc_pin,0b11101111
skip_change:
	
	SET_PORTB_OUTPUT		;2*
	out	PORTB,u_i_ptr_l		;1*
	latch_add_l
	latch_all

				;2*
	out	PORTB,u_i_ptr_h		;1*
	latch_add_h
	latch_all

	SET_PORTB_INPUT
	
	low_ram_read
	nop
	in	u_tmp_l,PINB
	
	
	high_ram_read
	nop
	in	u_tmp_h,PINB

	sbrc	u_i_data_h,7
	rjmp	neg_i
	sbrc	u_tmp_h,7
	rjmp	pos_neg

two_pos:
	add	u_i_data_l,u_tmp_l
	adc	u_i_data_h,u_tmp_h
	brvc	non_over_flow
	ldi	u_i_data_l,0xff
	ldi	u_i_data_h,0x7f
	rjmp	non_over_flow

	
neg_i:	sbrs	u_tmp_h,7
	rjmp	pos_neg
	
two_neg:
	add	u_i_data_l,u_tmp_l
	adc	u_i_data_h,u_tmp_h 
	brpl	max_neg
	clr	u_tmp
	cp	u_i_data_l,x_00
	cpc	u_i_data_h,x_80
	brcc	non_over_flow
	
max_neg:ldi	u_i_data_l,0x01
	ldi	u_i_data_h,0x80
	rjmp	non_over_flow
	

pos_neg:
	add	u_i_data_l,u_tmp_l
	adc	u_i_data_h,u_tmp_h

non_over_flow:

	SET_PORTB_OUTPUT	 

	out	PORTB,u_i_data_l		;1*
	low_ram_write
	latch_all

	out	PORTB,u_i_data_h		;1*
	high_ram_write
	latch_all
	
	subi	u_i_ptr_l,low(-1)	;1*
	sbci	u_i_ptr_h,high(-1)	;1*
	cp	x_delay_l,u_i_ptr_l	;1*
	cpc	x_delay_h,u_i_ptr_h	;1*
	brcc	skip_init_i_ptr		;1*
	clr	u_i_ptr_l			;1*
	clr	u_i_ptr_h	
	
			;1*
skip_init_i_ptr:
	
;*****110 cycles
	
	ldi	u_tmp,0b11010111
	out	DDRB,u_tmp		;1* bit0-2 out, bit3 input

	sbrc	r30,6		;check switch flag
	rjmp	detect_sw
	sbrs	r30,2		;check 0 adc data ready	
	rjmp	process_adc_data	;2

adc_process:
		
	andi	u_adc_pin,0b11111011	;clear adc cs pin for selection
	sbrc	u_adc_pin,adc_clk		;*1/2
	rjmp	adc_clk_to_low		;2

adc_clk_to_high:
	ori	u_adc_pin,0b00000010	;set adc clock pin
	inc	u_adc_clk_cunt
	cpi	u_adc_clk_cunt,14	;
	brcc	adc_data_fully_rec
	cpi	u_adc_clk_cunt,6
	brcc	rec_adc_data
	cpi	u_adc_clk_cunt,4
	brcc	set_rec_adc_flags
	out	PORTB,u_adc_pin
	adc_latch
;	latch_all
	rjmp	wait_fs_pulse

set_rec_adc_flags:
	
	ori	r30,0b00000010	;set the receving data flag
	out	PORTB,u_adc_pin
	adc_latch
;	latch_all
	rjmp	wait_fs_pulse
		

adc_data_fully_rec:
	ori	r30,0b01000000	;set detect swtich flag	
	clr	u_adc_clk_cunt
	ori	u_adc_pin,0b00000100	;set adc cs pin
	out	PORTB,u_adc_pin
	adc_latch
;	latch_all
	rjmp	wait_fs_pulse

rec_adc_data:
	out	PORTB,u_adc_pin
	adc_latch
	clc
	sbic	PINB,3		;1
	sec			;1
	rol	x_adc_value	;1
;	latch_all
	rjmp 	wait_fs_pulse		


detect_sw:
	out	PORTB,u_adc_pin
	adc_latch
	andi	r30,0b10111011	;clear the detect sw flag,
				;clear the adc data 've processed 
	in	u_tmp,PINB
	sbrc	u_tmp,5		;switch press or not
	rjmp	switch_press
;	latch_all	
	andi	r30,0b11011111
	rjmp	wait_fs_pulse

switch_press:
	sbrc	r30,5	;check the sw pressed process already 
	rjmp	return2
	ori	r30,0b00100000	;set the switch pressed flag
	ldi	u_tmp,0b00010000	;toggle the switch register pin
	eor	r30,u_tmp
have_processed:
	sbrc	r30,4	;check enable effect or not
	rjmp	on_effect
bypass:
	andi	u_adc_pin,0b01111111	;clear the effect pin
	ori	u_adc_pin,0b01010000	;set the bypass pin 
	out	PORTB,u_adc_pin

return2:;latch_all
	rjmp	wait_fs_pulse

on_effect:
	andi	u_adc_pin,0b10101111	;clear bypass,clear the led
	ori	u_adc_pin,0b10000000	;set the effect
	out	PORTB,u_adc_pin
	latch_all
	rjmp	init_value


adc_clk_to_low:
	
	andi	u_adc_pin,0b11111101	;clear adc clk 
	sbrc	r30,1		;check the adc receive data flag
	rjmp	receiving_adc_dat
adc_command_out:
	ror	x_adc_com
	brcc	zero
one:	ori	u_adc_pin,0b00000001
	rjmp	cont
zero:	andi	u_adc_pin,0b11111110
	
cont:	out	PORTB,u_adc_pin
	adc_latch
	nop
;	latch_all
	rjmp	wait_fs_pulse	

receiving_adc_dat:
	out	PORTB,u_adc_pin
	adc_latch
	nop
;	latch_all
	rjmp	wait_fs_pulse

		

***************		
process_adc_data:
	ori	r30,0b00000100	;set the adc data have processed flag
	andi	r30,0b11111101
	sbrc	r30,delay_dat_f					
	rjmp	delay_process
repeat_process:
	ori	r30,0b00001000	;change next adc data for delay
	ldi	u_tmp,0b00000111	;adc_ch1
	mov	x_adc_com,u_tmp
	mov	u_tmp,x_adc_value
	andi	u_tmp,0b11111000
	cp	u_tmp,x_adc_rep
	breq	return4	
	mov	x_adc_rep,u_tmp

	cpi	u_tmp,223
	brcc	repeat_7
	cpi	u_tmp,191
	brcc	repeat_6
	cpi	u_tmp,159
	brcc	repeat_5
	cpi	u_tmp,127
	brcc	repeat_4
	cpi	u_tmp,95
	brcc	repeat_3
	cpi	u_tmp,65
	brcc	repeat_2	
	cpi	u_tmp,31
	brcc	repeat_1
	clr	u_rep_val
return4:
	rjmp	wait_fs_pulse
repeat_7:
	ldi	u_rep_val,7
	rjmp	wait_fs_pulse
repeat_6:
	ldi	u_rep_val,6
	rjmp	wait_fs_pulse
repeat_5:
	ldi	u_rep_val,5
	rjmp	wait_fs_pulse
repeat_4:
	ldi	u_rep_val,4
	rjmp	wait_fs_pulse
repeat_3:
	ldi	u_rep_val,3
	rjmp	wait_fs_pulse
repeat_2:
	ldi	u_rep_val,2
	rjmp	wait_fs_pulse
repeat_1:
	ldi	u_rep_val,1
	rjmp	wait_fs_pulse
	
delay_process:
	andi	r30,0b11110111
	ldi	u_tmp,0b00000011
	mov	x_adc_com,u_tmp

	ldi	u_tmp,0xff
	cp	x_adc_value,u_tmp
	breq	max_delay

	ldi	u_tmp,0b11111000
	and	x_adc_value,u_tmp	
	
	cp	x_adc_del,x_adc_value
	breq	return3

	mov	x_adc_del,x_adc_value

	clr	u_i_ptr_l
	clr	u_o_ptr_l
	clr	u_i_ptr_h
	clr	u_o_ptr_h

	ldi	u_tmp,0x15
	cp	x_adc_value,u_tmp
	brlo	min_delay
	
	clr	x_delay_h
	clc
	mov	x_delay_l,x_adc_value
		
	rol	x_delay_l
	rol	x_delay_h
	
	rol	x_delay_l
	rol	x_delay_h
	
	rol	x_delay_l
	rol	x_delay_h
	
	rol	x_delay_l
	rol	x_delay_h
	
	rol	x_delay_l
	rol	x_delay_h

	rol	x_delay_l
	rol	x_delay_h

	rol	x_delay_l
	rol	x_delay_h

		

return3:
	rjmp	wait_fs_pulse


max_delay:
	ldi	u_tmp,0xff
	mov	x_delay_l,u_tmp
	ldi	u_tmp,0x7f
	mov	x_delay_h,u_tmp
	rjmp	wait_fs_pulse

min_delay:	
	ldi	u_tmp,0xff
	mov	x_delay_l,u_tmp
	clr	x_delay_h
	rjmp	wait_fs_pulse

⌨️ 快捷键说明

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