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

📄 main.s

📁 一个用于LCD的菜单模式界面的程序,如何实现滚屏.
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/delay.h
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 17
; #include <iom16v.h>
; #include <macros.h>
; #include "1602.h"
; #include "key.h"
; #include "uart.h"
; 
; 
; 
; 
; /************************************************************** 
; * 主函数 * 
; **************************************************************/
; 
; 
; void main(void)
; {  
;    LCD_init();
	.dbline 18
;    init_USART();
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 22
;    ShowMenu(); //欢迎界面显示
;    while(1)
;    {
;    		Menu_Change(get_key());
	.dbline 23
; 		
	clr R20
	clr R21
	.dbline 24
; 	}
	xjmp L6
L3:
	.dbline 25
	xcall _delay_1us
L4:
	.dbline 24
	subi R20,255  ; offset = 1
	sbci R21,255
L6:
	.dbline 24
	cp R20,R22
	cpc R21,R23
	brlo L3
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 29
; }
; }
; }
; }
; }
	.dbline 31
	clr R16
	clr R17
	xjmp L11
L8:
	.dbline 31
L9:
	.dbline 31
	subi R16,255  ; offset = 1
	sbci R17,255
L11:
	.dbline 31
; }
; }
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L8
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 35
; }
; }
; }
; }
	.dbline 36
; }
	clr R20
	clr R21
	.dbline 37
; }
	xjmp L16
L13:
	.dbline 38
	xcall _delay_1ms
L14:
	.dbline 37
	subi R20,255  ; offset = 1
	sbci R21,255
L16:
	.dbline 37
	cp R20,R22
	cpc R21,R23
	brlo L13
	.dbline -2
L12:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/1602.h
	.dbfunc e LCD_init _LCD_init fV
	.even
_LCD_init::
	.dbline -1
	.dbline 43
; }
; }
; }
; }
; }
; }
	.dbline 44
; }
	in R24,0x1a
	ori R24,240
	out 0x1a,R24
	.dbline 45
; }
	sbi 0x1a,3
	.dbline 46
; }
	sbi 0x1a,2
	.dbline 47
; }
	ldi R16,40
	xcall _LCD_write_command
	.dbline 48
; }
	xcall _LCD_en_write
	.dbline 49
; }
	ldi R16,40
	ldi R17,0
	xcall _delay_nus
	.dbline 50
; }
	ldi R16,40
	xcall _LCD_write_command
	.dbline 51
; }
	ldi R16,12
	xcall _LCD_write_command
	.dbline 52
; }
	ldi R16,1
	xcall _LCD_write_command
	.dbline 53
; }
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_en_write _LCD_en_write fV
	.even
_LCD_en_write::
	.dbline -1
	.dbline 57
; }
; }
; }
; }
	.dbline 58
; }
	sbi 0x1b,3
	.dbline 59
; }
	ldi R16,1
	ldi R17,0
	xcall _delay_nus
	.dbline 60
; }
	cbi 0x1b,3
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_command _LCD_write_command fV
;        command -> R20
	.even
_LCD_write_command::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 64
; }
; }
; }
; }
	.dbline 65
; }
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 66
; }
	cbi 0x1b,2
	.dbline 67
; }
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 68
; }
	mov R24,R20
	andi R24,240
	in R2,0x1b
	or R2,R24
	out 0x1b,R2
	.dbline 69
; }
	xcall _LCD_en_write
	.dbline 70
; }
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 71
; }
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 72
; }
	mov R24,R20
	andi R24,240
	in R2,0x1b
	or R2,R24
	out 0x1b,R2
	.dbline 73
; }
	xcall _LCD_en_write
	.dbline -2
L19:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r command 20 c
	.dbend
	.dbfunc e LCD_write_data _LCD_write_data fV
;           data -> R20
	.even
_LCD_write_data::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 78
; }
; }
; }
; }
; }
	.dbline 79
; }
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 80
; }
	sbi 0x1b,2
	.dbline 81
; }
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 82
; }
	mov R24,R20
	andi R24,240
	in R2,0x1b
	or R2,R24
	out 0x1b,R2
	.dbline 83
; }
	xcall _LCD_en_write
	.dbline 84
; }
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 85
; }
	in R24,0x1b
	andi R24,15
	out 0x1b,R24
	.dbline 86
; }
	mov R24,R20
	andi R24,240
	in R2,0x1b
	or R2,R24
	out 0x1b,R2
	.dbline 87
; }
	xcall _LCD_en_write
	.dbline -2
L20:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_set_xy _LCD_set_xy fV
;        address -> R20
;              y -> R20
;              x -> R22
	.even
_LCD_set_xy::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 92
; }
; }
; }
; }
; }
	.dbline 94
; }
; }
	tst R20
	brne L22
	.dbline 94
	mov R20,R22
	subi R20,128    ; addi 128
	xjmp L23
L22:
	.dbline 95
; }
	mov R20,R22
	subi R20,64    ; addi 192
L23:
	.dbline 96
; }
	mov R16,R20
	xcall _LCD_write_command
	.dbline -2
L21:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e LCD_write_string _LCD_write_string fV
;              s -> R20,R21
;              Y -> R10
;              X -> R22
	.even
_LCD_write_string::
	xcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 100
; }
; }
; }
; }
	.dbline 101
; }
	mov R18,R10
	mov R16,R22
	xcall _LCD_set_xy
	xjmp L26
L25:
	.dbline 103
	.dbline 104
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_write_data
	.dbline 105
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 106
L26:
	.dbline 102
; }
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L25
	.dbline -2
L24:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbsym r Y 10 c
	.dbsym r X 22 c
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;           data -> y+4
;              Y -> R22
;              X -> R20
	.even
_LCD_write_char::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 111
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 112
; }
	mov R18,R22
	mov R16,R20
	xcall _LCD_set_xy
	.dbline 113
; }
	ldd R16,y+4
	xcall _LCD_write_data
	.dbline -2
L28:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data 4 c
	.dbsym r Y 22 c
	.dbsym r X 20 c
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/key.h
	.dbfunc e key_read _key_read fc
;              i -> R20
	.even
_key_read::
	xcall push_gset1
	.dbline -1
	.dbline 10
	.dbline 13
	ldi R24,240
	out 0x17,R24
	.dbline 14
	ldi R24,15
	out 0x18,R24
	.dbline 15
	ldi R16,1
	ldi R17,0
	xcall _delay_nms
	.dbline 17
	in R20,0x16
	andi R20,15
	.dbline 20
	ldi R24,15
	out 0x17,R24
	.dbline 21
	ldi R24,240
	out 0x18,R24
	.dbline 22
	ldi R16,1
	ldi R17,0
	xcall _delay_nms
	.dbline 24
	in R24,0x16
	andi R24,240
	or R20,R24
	.dbline 26
	clr R21
	cpi R20,215
	ldi R30,0
	cpc R21,R30
	brne X1
	xjmp L47
X1:
	cpi R20,219
	ldi R30,0
	cpc R21,R30
	brne X2
	xjmp L43
X2:
	cpi R20,221
	ldi R30,0
	cpc R21,R30
	brne X3
	xjmp L39
X3:
	cpi R20,222
	ldi R30,0
	cpc R21,R30
	brne X4
	xjmp L35
X4:
	ldi R24,222
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L51
L50:
	cpi R20,119
	ldi R30,0
	cpc R21,R30
	brne X5
	xjmp L49
X5:
	cpi R20,123
	ldi R30,0
	cpc R21,R30
	brne X6
	xjmp L45
X6:
	cpi R20,125
	ldi R30,0
	cpc R21,R30
	brne X7
	xjmp L41
X7:
	cpi R20,126
	ldi R30,0
	cpc R21,R30
	brne X8
	xjmp L37
X8:
	cpi R20,119
	ldi R30,0
	cpc R21,R30
	brge X9
	xjmp L30
X9:
L52:
	cpi R20,183
	ldi R30,0
	cpc R21,R30
	brne X10
	xjmp L48
X10:
	cpi R20,187
	ldi R30,0
	cpc R21,R30
	brne X11
	xjmp L44
X11:
	cpi R20,189
	ldi R30,0
	cpc R21,R30
	breq L40
	cpi R20,190
	ldi R30,0
	cpc R21,R30
	breq L36
	xjmp L30
L51:
	cpi R20,231
	ldi R30,0
	cpc R21,R30
	breq L46
	cpi R20,235
	ldi R30,0
	cpc R21,R30
	breq L42
	cpi R20,237
	ldi R30,0
	cpc R21,R30
	breq L38
	cpi R20,238
	ldi R30,0
	cpc R21,R30
	breq L34
	cpi R20,231
	ldi R30,0
	cpc R21,R30
	brlt L30
L53:
	cpi R20,255
	ldi R30,0
	cpc R21,R30
	breq L33
	xjmp L30
X0:
	.dbline 27
L33:
	.dbline 28
	clr R16
	xjmp L29
L34:
	.dbline 29
	ldi R16,48
	xjmp L29
L35:
	.dbline 30
	ldi R16,49
	xjmp L29
L36:
	.dbline 31
	ldi R16,50
	xjmp L29
L37:
	.dbline 32
	ldi R16,51
	xjmp L29
L38:
	.dbline 33
	ldi R16,52
	xjmp L29
L39:
	.dbline 34
	ldi R16,53
	xjmp L29
L40:
	.dbline 35
	ldi R16,54
	xjmp L29
L41:
	.dbline 36
	ldi R16,55
	xjmp L29
L42:
	.dbline 37
	ldi R16,56
	xjmp L29
L43:
	.dbline 38
	ldi R16,57
	xjmp L29
L44:
	.dbline 39
	ldi R16,65
	xjmp L29
L45:
	.dbline 40
	ldi R16,66
	xjmp L29
L46:
	.dbline 41
	ldi R16,67
	xjmp L29
L47:
	.dbline 42
	ldi R16,68
	xjmp L29
L48:
	.dbline 43
	ldi R16,69
	xjmp L29
L49:
	.dbline 44
	ldi R16,70
	xjmp L29
L30:
	.dbline 45
	clr R16
	.dbline -2
L29:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/key.h
L55:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/key.h
	.dbfunc e get_key _get_key fc
	.dbsym s j L55 c
;              i -> R20
	.even
_get_key::
	xcall push_gset1
	.dbline -1
	.dbline 50
	.dbline 54
	xcall _key_read
	mov R20,R16
	.dbline 55
	tst R16
	brne L56
	.dbline 56
	.dbline 57
	clr R2
	sts L55,R2
	.dbline 58
	clr R16
	xjmp L54
L56:
	.dbline 60
	lds R2,L55
	tst R2
	brne L58
	.dbline 61
	.dbline 62
	sts L55,R20
	.dbline 63
	ldi R16,10
	ldi R17,0
	xcall _delay_nms
	.dbline 64
	xcall _key_read
	mov R20,R16
	.dbline 65
	lds R2,L55
	cp R16,R2
	brne L60
	.dbline 66
	xjmp L54
L60:
	.dbline 67
L58:
	.dbline 68
	clr R16
	.dbline -2
L54:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu/uart.h
	.dbfunc e put_c _put_c fV
;              c -> R16
	.even
_put_c::
	.dbline -1
	.dbline 13
L63:
	.dbline 14
L64:
	.dbline 14
	sbis 0xb,5
	rjmp L63
	.dbline 15
	out 0xc,R16
	.dbline -2
L62:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e put_s _put_s fV
;            ptr -> R20,R21
	.even
_put_s::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 19
	xjmp L68
L67:
	.dbline 21
	.dbline 22
	movw R30,R20
	ld R16,Z+
	movw R20,R30
	xcall _put_c
	.dbline 23
L68:
	.dbline 20
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L67
	.dbline 24
	ldi R16,13
	xcall _put_c
	.dbline 25
	ldi R16,10
	xcall _put_c
	.dbline -2
L66:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ptr 20 pc
	.dbend
	.dbfunc e get_c _get_c fc
	.even
_get_c::
	.dbline -1
	.dbline 29
L71:
	.dbline 29
L72:
	.dbline 29
	sbis 0xb,7
	rjmp L71
	.dbline 30
	in R16,0xc
	.dbline -2
L70:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_USART _init_USART fV
	.even
_init_USART::
	.dbline -1
	.dbline 34
	.dbline 37
	ldi R24,134
	out 0x20,R24
	.dbline 39
	ldi R24,51
	out 0x9,R24
	.dbline 40
	clr R2
	out 0x20,R2
	.dbline 41
	out 0xb,R2
	.dbline 42
	ldi R24,24
	out 0xa,R24
	.dbline -2
L74:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\Menu\main.c
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 16
	.dbline 17
	xcall _LCD_init
	.dbline 18
	xcall _init_USART
	.dbline 19
	xcall _ShowMenu
	xjmp L77
L76:
	.dbline 21
	.dbline 22
	xcall _get_key
	clr R17
	xcall _Menu_Change
	.dbline 24
L77:
	.dbline 20
	xjmp L76
X12:
	.dbline -2
L75:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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