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

📄 lcd.s

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 S
字号:
	.module LCD.c
	.area text(rom, con, rel)
;              i -> R20
;              t -> R16,R17
	.even
_delay::
	xcall push_gset1
; #include <iom128v.h>
; #ifndef __lcd_h
; #define __lcd_h
; #define req asm("sbi 0x03,6")
; #define cl_req asm("cbi 0x03,6")
; #define dat asm("sbi 0x18,0")
; #define cl_dat asm("cbi 0x18,0")
; #define cl_reset asm("cbi 0x15,3")
; #define set_reset asm("sbi 0x15,3")
; #define LCD 0x9000
; void delay (unsigned int t)
; {
	ldi R20,1
	xjmp L5
L2:
L3:
	inc R20
L5:
; unsigned char i;
; for (i=1;i<t;i++);
	mov R2,R20
	clr R3
	cp R2,R16
	cpc R3,R17
	brlo L2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
;              i -> R16,R17
	.even
_delay_1ms::
; }
; void delay_1ms(void)                
;   {
	clr R16
	clr R17
	xjmp L10
L7:
L8:
	subi R16,255  ; offset = 1
	sbci R17,255
L10:
;    unsigned int i;
;    for (i=0;i<2286;i++);
	cpi R16,238
	ldi R30,8
	cpc R17,R30
	brlo L7
L6:
	.dbline 0 ; func end
	ret
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
;   }
; void delay_nms(unsigned int n)      
;   {
;    unsigned int i=0;
	clr R20
	clr R21
;    for (i=0;i<n;i++)
	xjmp L15
L12:
	xcall _delay_1ms
L13:
	subi R20,255  ; offset = 1
	sbci R21,255
L15:
	cp R20,R22
	cpc R21,R23
	brlo L12
L11:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;              p -> R20,R21
;           data -> R16
	.even
_lcd_w::
	xcall push_gset1
;    delay_1ms();
;   }
; 
; 
; void lcd_w(unsigned char data)
; {
; unsigned char *p=(unsigned char *)(LCD);
	ldi R20,36864
	ldi R21,144
L17:
L18:
; while((PINE&0x80)!=0x00)
	in R24,0x1
	andi R24,128
	brne L17
; ;
; dat;
	sbi 0x18,0
; *p=data;
	movw R30,R20
	std z+0,R16
; cl_dat;
	cbi 0x18,0
; ;;
; req;
	sbi 0x03,6
; ;;
L20:
L21:
; while((PINE&0x80)==0x00)
	in R24,0x1
	andi R24,128
	breq L20
; ;
; cl_req;
	cbi 0x03,6
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.even
_lcd_init::
; }
; void lcd_init (void)
; {
; MCUCR=MCUCR|0x80;
	in R24,0x35
	ori R24,128
	out 0x35,R24
; DDRB|=0x01;
	sbi 0x17,0
; PORTB&=0xfe;
	in R24,0x18
	andi R24,254
	out 0x18,R24
; DDRE=0x40;
	ldi R24,64
	out 0x2,R24
; PORTE=0xff;
	ldi R24,255
	out 0x3,R24
; cl_reset;
	cbi 0x15,3
; delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
; set_reset;
	sbi 0x15,3
; delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
; cl_req;
	cbi 0x03,6
; delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
L23:
	.dbline 0 ; func end
	ret
	.even
_lcd_clear::
; }
; void lcd_clear (void)
; {
; lcd_w(0xf4);
	ldi R16,244
	xcall _lcd_w
L24:
	.dbline 0 ; func end
	ret
;              i -> R12,R13
;             ch -> R22,R23
;              y -> R10
;              x -> R20
	.even
_lcd_putsc::
	xcall push_gset4
	mov R10,R18
	mov R20,R16
	ldd R22,y+8
	ldd R23,y+9
; }
; 
; void lcd_putsc (unsigned char x,unsigned char y,unsigned char *ch)
; { unsigned  int i;
; x+=2;
	subi R20,254    ; addi 2
	xjmp L27
L26:
; while (*ch!=0)
; {
; lcd_w(0xf0);
	ldi R16,240
	xcall _lcd_w
; lcd_w(x);
	mov R16,R20
	xcall _lcd_w
; lcd_w(y);
	mov R16,R10
	xcall _lcd_w
; lcd_w(*ch-0xa0);
	movw R30,R22
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
; ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
; lcd_w(*ch-0xa0);
	movw R30,R22
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
; ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
; delay_nms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
; for(i=0;i<16;i++)
	clr R12
	clr R13
	xjmp L32
L29:
	ldi R16,247
	xcall _lcd_w
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
L30:
	movw R24,R12
	adiw R24,1
	movw R12,R24
L32:
	movw R24,R12
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brlo L29
L27:
	movw R30,R22
	ldd R2,z+0
	tst R2
	breq X0
	xjmp L26
X0:
; {lcd_w(0xf7);
;  delay_nms(2);}
; }
; for(i=0;i<115;i++)
	clr R12
	clr R13
	xjmp L36
L33:
	ldi R16,247
	xcall _lcd_w
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
L34:
	movw R24,R12
	adiw R24,1
	movw R12,R24
L36:
	movw R24,R12
	cpi R24,115
	ldi R30,0
	cpc R25,R30
	brlo L33
L25:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
;              i -> R12,R13
;             ch -> R22,R23
;              y -> R10
;              x -> R20
	.even
_lcd_putsm::
	xcall push_gset4
	mov R10,R18
	mov R20,R16
	ldd R22,y+8
	ldd R23,y+9
; {lcd_w(0xf7);
;  delay_nms(2);}
; }
; void lcd_putsm(unsigned char x,unsigned char y,unsigned char *ch)
; { unsigned  int i;
; x+=4;
	subi R20,252    ; addi 4
	xjmp L39
L38:
; while (*ch!=0)
; {
; lcd_w(0xf1);
	ldi R16,241
	xcall _lcd_w
; lcd_w(x);
	mov R16,R20
	xcall _lcd_w
; lcd_w(y);
	mov R16,R10
	xcall _lcd_w
; lcd_w(*ch);
	movw R30,R22
	ldd R16,z+0
	xcall _lcd_w
; ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
; delay_nms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay_nms
; for(i=0;i<8;i++)
	clr R12
	clr R13
	xjmp L44
L41:
	ldi R16,247
	xcall _lcd_w
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
L42:
	movw R24,R12
	adiw R24,1
	movw R12,R24
L44:
	movw R24,R12
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brlo L41
L39:
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L38
; {lcd_w(0xf7);
;  delay_nms(2);}
; }
; for(i=0;i<118;i++)
	clr R12
	clr R13
	xjmp L48
L45:
	ldi R16,247
	xcall _lcd_w
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
L46:
	movw R24,R12
	adiw R24,1
	movw R12,R24
L48:
	movw R24,R12
	cpi R24,118
	ldi R30,0
	cpc R25,R30
	brlo L45
L37:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
;             ch -> R20,R21
;              y -> R22
;              x -> R10
	.even
_lcd_putse::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	ldd R20,y+6
	ldd R21,y+7
; {lcd_w(0xf7);
;  delay_nms(2);}
; 
; 
; }
; 
; void lcd_putse(unsigned char x,unsigned char y,unsigned char *ch)
; {
; x+=4;
	mov R24,R10
	subi R24,252    ; addi 4
	mov R10,R24
	xjmp L51
L50:
; while (*ch!=0)
; {
; lcd_w(0xf1);
	ldi R16,241
	xcall _lcd_w
; lcd_w(x);
	mov R16,R10
	xcall _lcd_w
; lcd_w(y);
	mov R16,R22
	xcall _lcd_w
; lcd_w(*ch);
	movw R30,R20
	ldd R16,z+0
	xcall _lcd_w
; ch++;
	subi R20,255  ; offset = 1
	sbci R21,255
; if (x>=19)
	mov R24,R10
	cpi R24,19
	brlo L53
; {
; x=4;
	ldi R24,4
	mov R10,R24
; y+=8;
	subi R22,248    ; addi 8
; }
	xjmp L54
L53:
; else 
; x++;
	inc R10
L54:
L51:
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L50
L49:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
;              i -> <dead>
;             ch -> R22,R23
;              y -> R10
;              x -> R20
	.even
_lcd_putsf::
	xcall push_gset3
	mov R10,R18
	mov R20,R16
	ldd R22,y+6
	ldd R23,y+7
; }
; }
; void lcd_putsf(unsigned char x,unsigned char y,unsigned char *ch)
; { unsigned  int i;
; x+=2;
	subi R20,254    ; addi 2
	xjmp L57
L56:
; while (*ch!=0)
; {
; lcd_w(0xf0);
	ldi R16,240
	xcall _lcd_w
; lcd_w(x);
	mov R16,R20
	xcall _lcd_w
; lcd_w(y);
	mov R16,R10
	xcall _lcd_w
; lcd_w(*ch-0xa0);
	movw R30,R22
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
; ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
; lcd_w(*ch-0xa0);
	movw R30,R22
	ldd R16,z+0
	subi R16,160
	xcall _lcd_w
; ch++;
	subi R22,255  ; offset = 1
	sbci R23,255
; delay_nms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
; if (x>=0x09)
	cpi R20,9
	brlo L59
; {
; x=2;
	ldi R20,2
; y+=1;
	inc R10
; }
	xjmp L60
L59:
; else 
; x++;
	inc R20
L60:
L57:
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L56
L55:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.area data(ram, con, rel)
_a::
	.blkb 2
	.area idata
	.byte 'W,'e
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'l,'c
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'o,'m
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 32,'t
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'o,32
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'B,'e
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'i,'j
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'i,'n
	.area data(ram, con, rel)
_b::
	.blkb 2
	.area idata
	.byte 'O,'n
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'e,32
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'W,'o
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'r,'l
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'd,32
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'O,'n
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'e,32
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'D,'r
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'e,'a
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'm,0
	.area data(ram, con, rel)
	.area text(rom, con, rel)
;              j -> R20,R21
	.even
_main::
	sbiw R28,2
; }
; }
; 
; #endif
; 
; unsigned char a[]={87,101,108,99,111,109,32,116,111,32,66,101,105,106,105,110};
; unsigned char b[]={79,110,101,32,87,111,114,108,100,32,79,110,
; 101,32,68,114,101,97,109,0};
; void main(void)
; {while(1)
	xjmp L63
L62:
;  {
;   int j;
;   lcd_init();
	xcall _lcd_init
;   lcd_clear();
	xcall _lcd_clear
;   lcd_putsc(7,0,"北京欢迎你"); //右移动
	ldi R24,<L65
	ldi R25,>L65
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,7
	xcall _lcd_putsc
;   lcd_putsm(55,10,b);
	ldi R24,<_b
	ldi R25,>_b
	std y+1,R25
	std y+0,R24
	ldi R18,10
	ldi R16,55
	xcall _lcd_putsm
;   delay_nms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_nms
;   for(j=0;j<2;j++)
	clr R20
	clr R21
L66:
	ldi R24,<L65
	ldi R25,>L65
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,1
	xcall _lcd_putsf
	ldi R16,20
	ldi R17,0
	xcall _delay_nms
	ldi R16,244
	xcall _lcd_w
	ldi R16,20
	ldi R17,0
	xcall _delay_nms
L67:
	subi R20,255  ; offset = 1
	sbci R21,255
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	brlt L66
	ldi R24,<L65
	ldi R25,>L65
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,1
	xcall _lcd_putsf
	ldi R24,<_b
	ldi R25,>_b
	std y+1,R25
	std y+0,R24
	ldi R18,35
	clr R16
	xcall _lcd_putse
	ldi R16,150
	ldi R17,0
	xcall _delay_nms
L63:
	xjmp L62
X1:
L61:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.area data(ram, con, rel)
L65:
	.blkb 11
	.area idata
	.byte 177,177,190,169,187,182,211,173,196,227,0
	.area data(ram, con, rel)

⌨️ 快捷键说明

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