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

📄 main.lss

📁 AVR(Atmega8/Atmega16) 1602液晶驱动程序
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000020e  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000024  00800060  0000020e  00000282  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .stab         00000378  00000000  00000000  000002a8  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  00000620  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000040  00000000  00000000  00000691  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 000000b7  00000000  00000000  000006d1  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   000003b9  00000000  00000000  00000788  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000018a  00000000  00000000  00000b41  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   00000365  00000000  00000000  00000ccb  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  000000a0  00000000  00000000  00001030  2**2
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    0000014b  00000000  00000000  000010d0  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    0000016b  00000000  00000000  0000121b  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   8:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  24:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ee e0       	ldi	r30, 0x0E	; 14
  68:	f2 e0       	ldi	r31, 0x02	; 2
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a4 38       	cpi	r26, 0x84	; 132
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a4 e8       	ldi	r26, 0x84	; 132
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a4 38       	cpi	r26, 0x84	; 132
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 ec 00 	call	0x1d8	; 0x1d8 <main>
  8a:	0c 94 06 01 	jmp	0x20c	; 0x20c <_exit>

0000008e <__bad_interrupt>:
  8e:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

00000092 <ReadStatusLCM>:


//读状态  
void ReadStatusLCM(void)
{
  92:	bf 98       	cbi	0x17, 7	; 23
	LCM_BUSY_DDR&=~BUSY;//设置BUSY口为输入
	LCM_CTRL_PORT&=~(1<<LCM_RS);//RS=0
  94:	91 98       	cbi	0x12, 1	; 18
	LCM_CTRL_PORT|=(1<<LCM_RW);//RW=1
  96:	92 9a       	sbi	0x12, 2	; 18

	LCM_CTRL_PORT|=(1<<LCM_EN);//E=1
  98:	93 9a       	sbi	0x12, 3	; 18
	while(LCM_BUSY_PIN&BUSY);//等待LCD_DB7为0
  9a:	b7 99       	sbic	0x16, 7	; 22
  9c:	fe cf       	rjmp	.-4      	; 0x9a <ReadStatusLCM+0x8>
	LCM_CTRL_PORT&=~(1<<LCM_EN);//重设E=0
  9e:	93 98       	cbi	0x12, 3	; 18
	LCM_BUSY_DDR|=BUSY;//设置BUSY口为输出
  a0:	bf 9a       	sbi	0x17, 7	; 23
  a2:	08 95       	ret

000000a4 <WriteCommandLCM>:
  a4:	1f 93       	push	r17
  a6:	18 2f       	mov	r17, r24
  a8:	66 23       	and	r22, r22
  aa:	11 f0       	breq	.+4      	; 0xb0 <WriteCommandLCM+0xc>
  ac:	0e 94 49 00 	call	0x92	; 0x92 <ReadStatusLCM>
  b0:	91 98       	cbi	0x12, 1	; 18
  b2:	92 98       	cbi	0x12, 2	; 18
  b4:	93 98       	cbi	0x12, 3	; 18
  b6:	93 9a       	sbi	0x12, 3	; 18
  b8:	18 bb       	out	0x18, r17	; 24
  ba:	93 98       	cbi	0x12, 3	; 18
  bc:	1f 91       	pop	r17
  be:	08 95       	ret

000000c0 <WriteDataLCM>:
  c0:	1f 93       	push	r17
  c2:	18 2f       	mov	r17, r24
  c4:	0e 94 49 00 	call	0x92	; 0x92 <ReadStatusLCM>
  c8:	91 9a       	sbi	0x12, 1	; 18
  ca:	92 98       	cbi	0x12, 2	; 18
  cc:	93 98       	cbi	0x12, 3	; 18
  ce:	93 9a       	sbi	0x12, 3	; 18
  d0:	18 bb       	out	0x18, r17	; 24
  d2:	93 98       	cbi	0x12, 3	; 18
  d4:	1f 91       	pop	r17
  d6:	08 95       	ret

000000d8 <WriteUserImgLCM>:
  d8:	0f 93       	push	r16
  da:	1f 93       	push	r17
  dc:	cf 93       	push	r28
  de:	df 93       	push	r29
  e0:	c0 e0       	ldi	r28, 0x00	; 0
  e2:	d0 e0       	ldi	r29, 0x00	; 0
  e4:	00 e6       	ldi	r16, 0x60	; 96
  e6:	10 e0       	ldi	r17, 0x00	; 0
  e8:	61 e0       	ldi	r22, 0x01	; 1
  ea:	9e 01       	movw	r18, r28
  ec:	20 64       	ori	r18, 0x40	; 64
  ee:	82 2f       	mov	r24, r18
  f0:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
  f4:	f8 01       	movw	r30, r16
  f6:	81 91       	ld	r24, Z+
  f8:	8f 01       	movw	r16, r30
  fa:	0e 94 60 00 	call	0xc0	; 0xc0 <WriteDataLCM>
  fe:	21 96       	adiw	r28, 0x01	; 1
 100:	c8 30       	cpi	r28, 0x08	; 8
 102:	d1 05       	cpc	r29, r1
 104:	89 f7       	brne	.-30     	; 0xe8 <WriteUserImgLCM+0x10>
 106:	df 91       	pop	r29
 108:	cf 91       	pop	r28
 10a:	1f 91       	pop	r17
 10c:	0f 91       	pop	r16
 10e:	08 95       	ret

00000110 <DisplayOneChar>:
}

void LCMInit(void) //LCM初始化  
{
	_delay_ms(15);
	WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号  
	_delay_ms(5); 
	WriteCommandLCM(0x38,0);
	_delay_ms(5); 
	WriteCommandLCM(0x38,0);
	_delay_ms(5); 

	WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号  
	WriteCommandLCM(0x08,1); //关闭显示	   
	WriteCommandLCM(0x01,1); //显示清屏	   
	WriteCommandLCM(0x06,1); // 显示光标移动设置   
	//WriteCommandLCM(0x0F,1); // 显示开及光标设置(有光标) 
	WriteCommandLCM(0x0C,1); // 显示开及光标设置(无光标)   
	WriteUserImgLCM();   

}												   

//按指定位置显示一个字符 
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
 110:	1f 93       	push	r17
 112:	14 2f       	mov	r17, r20
	Y &= 0x1;
	X &= 0xF; //限制X不能大于15,Y不能大于1
 114:	8f 70       	andi	r24, 0x0F	; 15
	if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 116:	60 fd       	sbrc	r22, 0
 118:	80 64       	ori	r24, 0x40	; 64
	X |= 0x80; //算出指令码	    
	WriteCommandLCM(X, 1); //发命令字  
 11a:	61 e0       	ldi	r22, 0x01	; 1
 11c:	80 68       	ori	r24, 0x80	; 128
 11e:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
	WriteDataLCM(DData); //发数据   
 122:	81 2f       	mov	r24, r17
 124:	0e 94 60 00 	call	0xc0	; 0xc0 <WriteDataLCM>
 128:	1f 91       	pop	r17
 12a:	08 95       	ret

0000012c <DisplayListChar>:
}

//按指定位置显示一串字符 
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
 12c:	ff 92       	push	r15
 12e:	0f 93       	push	r16
 130:	1f 93       	push	r17
 132:	cf 93       	push	r28
 134:	df 93       	push	r29
 136:	06 2f       	mov	r16, r22
 138:	ea 01       	movw	r28, r20
	unsigned char ListLength;

  ListLength = 0;
	Y &= 0x1;
 13a:	01 70       	andi	r16, 0x01	; 1
	X &= 0xF; //限制X不能大于15,Y不能大于1
 13c:	18 2f       	mov	r17, r24
 13e:	1f 70       	andi	r17, 0x0F	; 15
 140:	ff 24       	eor	r15, r15
 142:	08 c0       	rjmp	.+16     	; 0x154 <DisplayListChar+0x28>
	while (DData[ListLength]>0x19) //若到达字串尾则退出	  
		{
			if (X <= 0xF) //X坐标应小于0xF
 144:	10 31       	cpi	r17, 0x10	; 16
 146:	30 f4       	brcc	.+12     	; 0x154 <DisplayListChar+0x28>
				{
					DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 
 148:	60 2f       	mov	r22, r16
 14a:	81 2f       	mov	r24, r17
 14c:	0e 94 88 00 	call	0x110	; 0x110 <DisplayOneChar>
					ListLength++;
 150:	f3 94       	inc	r15
					X++;
 152:	1f 5f       	subi	r17, 0xFF	; 255
 154:	fe 01       	movw	r30, r28
 156:	ef 0d       	add	r30, r15
 158:	f1 1d       	adc	r31, r1
 15a:	40 81       	ld	r20, Z
 15c:	4a 31       	cpi	r20, 0x1A	; 26
 15e:	90 f7       	brcc	.-28     	; 0x144 <DisplayListChar+0x18>
 160:	df 91       	pop	r29
 162:	cf 91       	pop	r28
 164:	1f 91       	pop	r17
 166:	0f 91       	pop	r16
 168:	ff 90       	pop	r15
 16a:	08 95       	ret

0000016c <LCMInit>:
 16c:	0f 93       	push	r16
 16e:	1f 93       	push	r17
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 170:	80 e3       	ldi	r24, 0x30	; 48
 172:	95 e7       	ldi	r25, 0x75	; 117
 174:	01 97       	sbiw	r24, 0x01	; 1
 176:	f1 f7       	brne	.-4      	; 0x174 <LCMInit+0x8>
 178:	60 e0       	ldi	r22, 0x00	; 0
 17a:	88 e3       	ldi	r24, 0x38	; 56
 17c:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 180:	00 e1       	ldi	r16, 0x10	; 16
 182:	17 e2       	ldi	r17, 0x27	; 39
 184:	c8 01       	movw	r24, r16
 186:	01 97       	sbiw	r24, 0x01	; 1
 188:	f1 f7       	brne	.-4      	; 0x186 <LCMInit+0x1a>
 18a:	60 e0       	ldi	r22, 0x00	; 0
 18c:	88 e3       	ldi	r24, 0x38	; 56
 18e:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 192:	c8 01       	movw	r24, r16
 194:	01 97       	sbiw	r24, 0x01	; 1
 196:	f1 f7       	brne	.-4      	; 0x194 <LCMInit+0x28>
 198:	60 e0       	ldi	r22, 0x00	; 0
 19a:	88 e3       	ldi	r24, 0x38	; 56
 19c:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1a0:	c8 01       	movw	r24, r16
 1a2:	01 97       	sbiw	r24, 0x01	; 1
 1a4:	f1 f7       	brne	.-4      	; 0x1a2 <LCMInit+0x36>
 1a6:	61 e0       	ldi	r22, 0x01	; 1
 1a8:	88 e3       	ldi	r24, 0x38	; 56
 1aa:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 1ae:	61 e0       	ldi	r22, 0x01	; 1
 1b0:	88 e0       	ldi	r24, 0x08	; 8
 1b2:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 1b6:	61 e0       	ldi	r22, 0x01	; 1
 1b8:	81 e0       	ldi	r24, 0x01	; 1
 1ba:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 1be:	61 e0       	ldi	r22, 0x01	; 1
 1c0:	86 e0       	ldi	r24, 0x06	; 6
 1c2:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 1c6:	61 e0       	ldi	r22, 0x01	; 1
 1c8:	8c e0       	ldi	r24, 0x0C	; 12
 1ca:	0e 94 52 00 	call	0xa4	; 0xa4 <WriteCommandLCM>
 1ce:	0e 94 6c 00 	call	0xd8	; 0xd8 <WriteUserImgLCM>
 1d2:	1f 91       	pop	r17
 1d4:	0f 91       	pop	r16
 1d6:	08 95       	ret

000001d8 <main>:



int main(void)
{
 1d8:	8f ef       	ldi	r24, 0xFF	; 255
 1da:	88 bb       	out	0x18, r24	; 24
	LCM_DATA_PORT=0xff;
	LCM_DATA_DDR=0xff;
 1dc:	87 bb       	out	0x17, r24	; 23
	
	LCM_CTRL_PORT|=(1<<LCM_RS)|(1<<LCM_RW)|(1<<LCM_EN);
 1de:	82 b3       	in	r24, 0x12	; 18
 1e0:	8e 60       	ori	r24, 0x0E	; 14
 1e2:	82 bb       	out	0x12, r24	; 18
	LCM_CTRL_DDR|=(1<<LCM_RS)|(1<<LCM_RW)|(1<<LCM_EN);
 1e4:	81 b3       	in	r24, 0x11	; 17
 1e6:	8e 60       	ori	r24, 0x0E	; 14
 1e8:	81 bb       	out	0x11, r24	; 17
	
	LCM_LED_PORT&=~(1<<LCM_LED);//LCM_LCD ON
 1ea:	90 98       	cbi	0x12, 0	; 18
	LCM_LED_DDR|=(1<<LCM_LED);
 1ec:	88 9a       	sbi	0x11, 0	; 17
	
	LCMInit();
 1ee:	0e 94 b6 00 	call	0x16c	; 0x16c <LCMInit>
	

	DisplayListChar(0,0,"Welcome...");
 1f2:	48 e6       	ldi	r20, 0x68	; 104
 1f4:	50 e0       	ldi	r21, 0x00	; 0
 1f6:	60 e0       	ldi	r22, 0x00	; 0
 1f8:	80 e0       	ldi	r24, 0x00	; 0
 1fa:	0e 94 96 00 	call	0x12c	; 0x12c <DisplayListChar>
	DisplayListChar(0,1,"LCD1602 Test OK!");
 1fe:	43 e7       	ldi	r20, 0x73	; 115
 200:	50 e0       	ldi	r21, 0x00	; 0
 202:	61 e0       	ldi	r22, 0x01	; 1
 204:	80 e0       	ldi	r24, 0x00	; 0
 206:	0e 94 96 00 	call	0x12c	; 0x12c <DisplayListChar>
 20a:	ff cf       	rjmp	.-2      	; 0x20a <main+0x32>

0000020c <_exit>:
 20c:	ff cf       	rjmp	.-2      	; 0x20c <_exit>

⌨️ 快捷键说明

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