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

📄 lesson6.s

📁 AVR8位单片机
💻 S
字号:
	.module lesson6.c
	.area code(ram, con, rel)
	.area lit(rom, con, rel)
_table::
	.byte 'I,32,'L,'O,'V,'E,32,'Y,'O,'U,32,33,0
	.dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
	.dbsym e table _table A[13:13]c
_table1::
	.byte 'L,'i,32,'h,'u,'a,'n,'g,32,'s,'h,'e,'n,'g,0
	.dbsym e table1 _table1 A[15:15]c
	.area text(rom, con, rel)
	.dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	xcall push_gset2
	.dbline -1
	.dbline 11
; #include <iom16v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; #pragma data:code 
; /*code存储器类型说明*/
; const uchar table[]="I LOVE YOU !";//const类型说明,表示在程序执行过程中不可更改的常量值
; const uchar table1[]="Li huang sheng";
; 
; void delay(uint ms)
; {
	.dbline 13
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 14
; 	   {
	.dbline 15
	clr R22
	clr R23
	xjmp L9
L6:
	.dbline 15
L7:
	.dbline 15
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 15
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L6
	.dbline 16
L3:
	.dbline 13
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 13
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
	.dbline 17
; 	   for(j=0;j<1141;j++);
;        }
; }
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e write_com _write_com fV
;            com -> R20
	.even
_write_com::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 19
; void write_com(uchar com)
; {
	.dbline 20
;        PORTD&=~BIT(4);
	cbi 0x12,4
	.dbline 21
; 	   PORTD&=~BIT(5);
	cbi 0x12,5
	.dbline 22
; 	   PORTB=com;
	out 0x18,R20
	.dbline 23
; 	   PORTD|=BIT(6);
	sbi 0x12,6
	.dbline 24
; 	   delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 25
; 	   PORTD&=~BIT(6);
	cbi 0x12,6
	.dbline -2
	.dbline 26
; }
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r com 20 c
	.dbend
	.dbfunc e write_dat _write_dat fV
;            dat -> R20
	.even
_write_dat::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 29
; 
; void write_dat(uchar dat)
; {     
	.dbline 30
;        PORTD|=BIT(4);
	sbi 0x12,4
	.dbline 31
; 	   PORTD&=~BIT(5);
	cbi 0x12,5
	.dbline 32
; 	   PORTB=dat;
	out 0x18,R20
	.dbline 33
; 	   PORTD|=BIT(6);
	sbi 0x12,6
	.dbline 34
; 	   delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 35
; 	   PORTD&=~BIT(6);
	cbi 0x12,6
	.dbline -2
	.dbline 37
; 
; }
L11:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r dat 20 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 39
; void  main()
; {
	xjmp L14
L13:
	.dbline 41
; while(1)
; {
	.dbline 43
;      uchar i;
; 	  DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	.dbline 44
; 	  DDRD|=BIT(4)|BIT(5)|BIT(6);
	in R24,0x11
	ori R24,112
	out 0x11,R24
	.dbline 45
; 	  PORTD&=~BIT(6);
	cbi 0x12,6
	.dbline 47
; 	  
; 	  write_com(0X38);//设置显示模式
	ldi R16,56
	xcall _write_com
	.dbline 48
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 49
; 	  write_com(0X01);//清屏
	ldi R16,1
	xcall _write_com
	.dbline 50
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 51
; 	  write_com(0X0C);//设置显示开关和光标
	ldi R16,12
	xcall _write_com
	.dbline 52
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 53
; 	  write_com(0X06);//设置字符显示移动模式
	ldi R16,6
	xcall _write_com
	.dbline 54
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 55
; 	  write_com(0X80+0X10);//设置第1行数据地址指针
	ldi R16,144
	xcall _write_com
	.dbline 56
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 57
; 	  for(i=0;i<12;i++)//显示第1行的字符
	clr R20
	xjmp L19
L16:
	.dbline 58
	.dbline 59
	ldi R24,<_table
	ldi R25,>_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _write_dat
	.dbline 60
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 61
L17:
	.dbline 57
	inc R20
L19:
	.dbline 57
	cpi R20,12
	brlo L16
	.dbline 62
; 	  {
; 	     write_dat(table[i]);
; 		 delay(5);
; 	  }
; 	  write_com(0X80+0X50);//设置第2行的数据地址指针
	ldi R16,208
	xcall _write_com
	.dbline 63
; 	  delay(5);
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 64
; 	    for(i=0;i<14;i++)//显示第2行的字符
	clr R20
	xjmp L23
L20:
	.dbline 65
	.dbline 66
	ldi R24,<_table1
	ldi R25,>_table1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _write_dat
	.dbline 67
	ldi R16,5
	ldi R17,0
	xcall _delay
	.dbline 68
L21:
	.dbline 64
	inc R20
L23:
	.dbline 64
	cpi R20,14
	brlo L20
	.dbline 69
; 	  {
; 	     write_dat(table1[i]);
; 		 delay(5);
; 	  }
; 	  for(i=0;i<16;i++)//设置字符从右到左显示
	clr R20
	xjmp L27
L24:
	.dbline 70
	.dbline 71
	ldi R16,24
	xcall _write_com
	.dbline 72
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 73
L25:
	.dbline 69
	inc R20
L27:
	.dbline 69
	cpi R20,16
	brlo L24
	.dbline 75
L14:
	.dbline 40
	xjmp L13
X0:
	.dbline -2
	.dbline 76
; 	  {
; 	     write_com(0X18);//从右到左显示指令
; 		 delay(500);
; 	  }
; 	  
; }
; }
L12:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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