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

📄 main.s

📁 本程序是基于avr单片机的atmega48的控制16*4点阵型液晶。其中main文件调用LCD.c和LCD.h文件。用户可以直接把工程中的LCD.c和LCD.h文件放到自己的程序目录下即可。
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile F:\avrprojs\lcd_block/lcd.h
	.dbfunc e LCD_init _LCD_init fV
	.even
_LCD_init::
	.dbline -1
	.dbline 22
; #include "lcd.h"
; #include "uart.h"
; void uart0_rx_isr();
; int i,j;
; /*
; #pragma interrupt_handler uart0_rx_isr:19
; void uart0_rx_isr(void)
; {
;  
;  unsigned char c;
;  c=UDR0;
;  LCD_display_char(0,0,c);
;  if(i>=15)
;  {
;   i=0;
;   j=j+1;
;   if(j>=4)
;    {
;    j=0;
;    LCD_write_char(0x01,0);
;    } 
;  }
	.dbline 23
; 
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 24
;  //uart has received a character in UDR
	clr R18
	clr R19
	ldi R16,56
	ldi R17,0
	rcall _LCD_write_char
	.dbline 26
; }
; */
	ldi R16,6
	ldi R17,0
	rcall _delay_nms
	.dbline 27
; void main(void)
	clr R18
	clr R19
	ldi R16,56
	ldi R17,0
	rcall _LCD_write_char
	.dbline 29
; {
;    unsigned char c,c_temp;
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 30
;       init_devices();
	clr R18
	clr R19
	ldi R16,56
	ldi R17,0
	rcall _LCD_write_char
	.dbline 32
;       LCD_init();
; 	  uart0_init();
	clr R18
	clr R19
	ldi R16,56
	ldi R17,0
	rcall _LCD_write_char
	.dbline 33
; 	  j=3;
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 34
; 	  i=12;
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 35
; 	  	 LCD_write_char(0x01,0);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 36
; 		// LCD_display_char(5,2,'8');
	clr R18
	clr R19
	ldi R16,8
	ldi R17,0
	rcall _LCD_write_char
	.dbline 37
; 	
	ldi R16,1
	ldi R17,0
	rcall _delay_nms
	.dbline 39
;          LCD_write_string(4,0,"Wellcome");
;          LCD_write_string(0,1,"www.OURAVR.com!");
	clr R18
	clr R19
	ldi R16,6
	ldi R17,0
	rcall _LCD_write_char
	.dbline 40
;          LCD_write_string(0,2,"happy new year!");
	ldi R16,1
	ldi R17,0
	rcall _delay_nms
	.dbline 43
;          LCD_write_string(0,3,"amork:everfriend");
; 		 delay_nms(5000);
; 		  LCD_write_char(0x01,0);
	clr R18
	clr R19
	ldi R16,12
	ldi R17,0
	rcall _LCD_write_char
	.dbline 45
;      while(1)    //for循环
;      {
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_string _LCD_write_string fV
;              s -> R20,R21
;              Y -> R10,R11
;              X -> R22,R23
	.even
_LCD_write_string::
	rcall push_gset3
	movw R10,R18
	movw R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 50
; 	     LCD_write_string(4,0,"Wellcome");
;          //LCD_write_string(0,1,"www.OURAVR.com!");
;          LCD_write_string(0,1,"happy new year!");
; 	   
; 	   c_temp=uart_rec();
	.dbline 51
;        LCD_display_char(i,j,c_temp);
	movw R18,R10
	movw R16,R22
	rcall _LCD_set_xy
	rjmp L4
L3:
	.dbline 54
	.dbline 55
	movw R30,R20
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 56
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 57
L4:
	.dbline 53
; 	     i=i+1;
;        if(i>=16)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L3
	.dbline -2
L2:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbsym r Y 10 I
	.dbsym r X 22 I
	.dbend
	.dbfunc e LCD_set_xy _LCD_set_xy fV
;        address -> R20
;              y -> R22,R23
;              x -> R20,R21
	.even
_LCD_set_xy::
	rcall push_gset2
	movw R22,R18
	movw R20,R16
	.dbline -1
	.dbline 62
;          {
;              i=0;
;              j=j+1;
;               if(j>=4)
;               {
;                 j=2;
;                 LCD_write_char(0x01,0);
;               } 
;           }
	.dbline 65
; 		 
; 
;      }
	ldi R16,100
	ldi R17,0
	rcall _delay_nus
	.dbline 66
; }
	andi R20,15
	andi R21,0
	.dbline 67
; }
	cpi R22,0
	cpc R22,R23
	breq L9
X0:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L10
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L11
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L12
	rjmp L8
X1:
	.dbline 68
; }
L9:
	.dbline 70
; }
; }
	.dbline 71
; }
	rjmp L8
L10:
	.dbline 73
; }
; }
	subi R20,192    ; addi 64
	.dbline 74
; }
	rjmp L8
L11:
	.dbline 76
; }
; }
	subi R20,240    ; addi 16
	.dbline 77
; }
	rjmp L8
L12:
	.dbline 79
; }
; }
	subi R20,176    ; addi 80
	.dbline 80
; }
	.dbline 82
; }
; }
L8:
	.dbline 84
; }
; }
	ori R20,128
	.dbline 85
; }
	clr R18
	clr R19
	mov R16,R20
	clr R17
	rcall _LCD_write_char
	.dbline -2
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r y 22 I
	.dbsym r x 20 I
	.dbend
	.dbfunc e LCD_en_write _LCD_en_write fV
	.even
_LCD_en_write::
	.dbline -1
	.dbline 91
; }
; }
; }
; }
; }
; }
	.dbline 92
; }
	sbi 0xb,4
	.dbline 93
; }
	ldi R16,1
	ldi R17,0
	rcall _delay_nus
	.dbline 94
; }
	cbi 0xb,4
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_display_char _LCD_display_char fV
;           data -> y+4
;              y -> R22,R23
;              x -> R20,R21
	.even
_LCD_display_char::
	rcall push_gset2
	movw R22,R18
	movw R20,R16
	.dbline -1
	.dbline 97
; }
; }
; }
	.dbline 98
; }
	movw R18,R22
	movw R16,R20
	rcall _LCD_set_xy
	.dbline 99
; }
	ldd R18,y+4
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline -2
L14:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data 4 c
	.dbsym r y 22 I
	.dbsym r x 20 I
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;           data -> R22,R23
;        command -> R20,R21
	.even
_LCD_write_char::
	rcall push_gset2
	movw R22,R18
	movw R20,R16
	.dbline -1
	.dbline 103
; }
; }
; }
; }
	.dbline 105
; }
; }
	ldi R16,16
	ldi R17,0
	rcall _delay_nus
	.dbline 106
; }
	cpi R20,0
	cpc R20,R21
	brne L16
X2:
	.dbline 107
; }
	.dbline 108
; }
	sbi 0xb,3
	.dbline 109
; }
	cbi 0xb,4
	.dbline 110
; }
	out 0x5,R22
	.dbline 111
; }
	sbi 0xb,4
	.dbline 113
; }
; }
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 114
; }
	cbi 0xb,4
	.dbline 115
; }
	rjmp L17
L16:
	.dbline 117
	.dbline 118
	cbi 0xb,3
	.dbline 119
	cbi 0xb,4
	.dbline 120
	out 0x5,R20
	.dbline 121
	sbi 0xb,4
	.dbline 123
	ldi R16,50
	ldi R17,0
	rcall _delay_nus
	.dbline 124
	cbi 0xb,4
	.dbline 125
L17:
	.dbline -2
L15:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r data 22 i
	.dbsym r command 20 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 129
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 130
; }
	ldi R24,27
	out 0x5,R24
	.dbline 131
; }
	ldi R24,255
	out 0x4,R24
	.dbline 132
; }
	ldi R24,3
	out 0x8,R24
	.dbline 133
; }
	out 0x7,R24
	.dbline 134
; }
	clr R2
	out 0xb,R2
	.dbline 135
; }
	ldi R24,24
	out 0xa,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 140
; }
; }
; }
; }
; }
	.dbline 142
; }
; }
	rcall _port_init
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 151
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 152
; }
	nop
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 156
; }
; }
; }
; }
	.dbline 157
; }
	clr R20
	clr R21
	.dbline 158
; }
	rjmp L25
L22:
	.dbline 159
	rcall _delay_1us
L23:
	.dbline 158
	subi R20,255  ; offset = 1
	sbci R21,255
L25:
	.dbline 158
	cp R20,R22
	cpc R21,R23
	brlo L22
	.dbline -2
L21:
	rcall 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 163
; }
; }
; }
; }
; }
	.dbline 165
	clr R16
	clr R17
	rjmp L30
L27:
	.dbline 165
L28:
	.dbline 165
	subi R16,255  ; offset = 1
	sbci R17,255
L30:
	.dbline 165
; }
; }
	cpi R16,114
	ldi R30,0
	cpc R17,R30
	brlo L27
	.dbline -2
L26:
	.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::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 169
; }
; }
; }
; }
	.dbline 170
; }
	clr R20
	clr R21
	.dbline 171
; }
	rjmp L35
L32:
	.dbline 172
	rcall _delay_1ms
L33:
	.dbline 171
	subi R20,255  ; offset = 1
	sbci R21,255
L35:
	.dbline 171
	cp R20,R22
	cpc R21,R23
	brlo L32
	.dbline -2
L31:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfile F:\avrprojs\lcd_block/uart.h
	.dbfunc e delay _delay fV
;              i -> y+0
	.even
_delay::
	rcall push_gset2
	sbiw R28,4
	.dbline -1
	.dbline 10
	.dbline 12
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	rjmp L40
L37:
	.dbline 12
L38:
	.dbline 12
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L40:
	.dbline 12
	ldi R20,134
	ldi R21,43
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlo L37
	.dbline -2
L36:
	adiw R28,4
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 0 l
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 19
	.dbline 20
	clr R2
	sts 193,R2
	.dbline 21
	sts 192,R2
	.dbline 22
	ldi R24,6
	sts 194,R24
	.dbline 23
	ldi R24,51
	sts 196,R24
	.dbline 24
	sts 197,R2
	.dbline 25
	ldi R24,152
	sts 193,R24
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_send _uart_send fV
;              c -> R16
	.even
_uart_send::
	.dbline -1
	.dbline 29
	.dbline 31
	sts 198,R16
L43:
	.dbline 32
L44:
	.dbline 32
	lds R2,192
	sbrs R2,6
	rjmp L43
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e uart_rec _uart_rec fc
	.even
_uart_rec::
	.dbline -1
	.dbline 36
L47:
	.dbline 37
L48:
	.dbline 37
	lds R2,192
	sbrs R2,7
	rjmp L47
	.dbline 38
	lds R16,198
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile F:\avrprojs\lcd_block\main.c
	.dbfunc e main _main fV
;              c -> <dead>
;         c_temp -> R20
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 28
	.dbline 30
	rcall _init_devices
	.dbline 31
	rcall _LCD_init
	.dbline 32
	rcall _uart0_init
	.dbline 33
	ldi R24,3
	ldi R25,0
	sts _j+1,R25
	sts _j,R24
	.dbline 34
	ldi R24,12
	sts _i+1,R25
	sts _i,R24
	.dbline 35
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 38
	ldi R24,<L51
	ldi R25,>L51
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,4
	ldi R17,0
	rcall _LCD_write_string
	.dbline 39
	ldi R24,<L52
	ldi R25,>L52
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_string
	.dbline 40
	ldi R24,<L53
	ldi R25,>L53
	std y+1,R25
	std y+0,R24
	ldi R18,2
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_string
	.dbline 41
	ldi R24,<L54
	ldi R25,>L54
	std y+1,R25
	std y+0,R24
	ldi R18,3
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_string
	.dbline 42
	ldi R16,5000
	ldi R17,19
	rcall _delay_nms
	.dbline 43
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	rjmp L56
L55:
	.dbline 45
	.dbline 46
	ldi R24,<L51
	ldi R25,>L51
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,4
	ldi R17,0
	rcall _LCD_write_string
	.dbline 48
	ldi R24,<L53
	ldi R25,>L53
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R19,0
	clr R16
	clr R17
	rcall _LCD_write_string
	.dbline 50
	rcall _uart_rec
	mov R20,R16
	.dbline 51
	std y+0,R20
	lds R18,_j
	lds R19,_j+1
	lds R16,_i
	lds R17,_i+1
	rcall _LCD_display_char
	.dbline 52
	lds R24,_i
	lds R25,_i+1
	adiw R24,1
	sts _i+1,R25
	sts _i,R24
	.dbline 53
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlt L58
	.dbline 54
	.dbline 55
	clr R2
	clr R3
	sts _i+1,R3
	sts _i,R2
	.dbline 56
	lds R24,_j
	lds R25,_j+1
	adiw R24,1
	sts _j+1,R25
	sts _j,R24
	.dbline 57
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brlt L60
	.dbline 58
	.dbline 59
	ldi R24,2
	ldi R25,0
	sts _j+1,R25
	sts _j,R24
	.dbline 60
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 61
L60:
	.dbline 62
L58:
	.dbline 65
L56:
	.dbline 44
	rjmp L55
X3:
	.dbline -2
L50:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym l c 3 c
	.dbsym r c_temp 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c
_j::
	.blkb 2
	.dbsym e j _j I
_i::
	.blkb 2
	.dbsym e i _i I
	.area data(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c
L54:
	.blkb 17
	.area idata
	.byte 'a,'m,'o,'r,'k,58,'e,'v,'e,'r,'f,'r,'i,'e,'n,'d
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c
L53:
	.blkb 16
	.area idata
	.byte 'h,'a,'p,'p,'y,32,'n,'e,'w,32,'y,'e,'a,'r,33,0
	.area data(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c
L52:
	.blkb 16
	.area idata
	.byte 'w,'w,'w,46,'O,'U,'R,'A,'V,'R,46,'c,'o,'m,33,0
	.area data(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c
L51:
	.blkb 9
	.area idata
	.byte 'W,'e,'l,'l,'c,'o,'m,'e,0
	.area data(ram, con, rel)
	.dbfile F:\avrprojs\lcd_block\main.c

⌨️ 快捷键说明

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