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

📄 main.lss

📁 用ATmega32写的采用四线接法的LCD1602驱动程序
💻 LSS
📖 第 1 页 / 共 3 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000003b4  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000050  00800060  000003b4  00000428  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .debug_aranges 00000020  00000000  00000000  00000478  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 000000b1  00000000  00000000  00000498  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   00000752  00000000  00000000  00000549  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 000001f4  00000000  00000000  00000c9b  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   0000055f  00000000  00000000  00000e8f  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  000000b0  00000000  00000000  000013f0  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    00000114  00000000  00000000  000014a0  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_loc    0000044f  00000000  00000000  000015b4  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_ranges 00000090  00000000  00000000  00001a03  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:	d8 e0       	ldi	r29, 0x08	; 8
  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:	e4 eb       	ldi	r30, 0xB4	; 180
  68:	f3 e0       	ldi	r31, 0x03	; 3
  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:	a0 3b       	cpi	r26, 0xB0	; 176
  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:	a0 eb       	ldi	r26, 0xB0	; 176
  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:	a0 3b       	cpi	r26, 0xB0	; 176
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 5b 01 	call	0x2b6	; 0x2b6 <main>
  8a:	0c 94 d8 01 	jmp	0x3b0	; 0x3b0 <_exit>

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

00000092 <lcm_delay>:
* 调用          :NULL
* 编写日期      :2008-2-29 
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  92:	df 93       	push	r29
  94:	cf 93       	push	r28
  96:	00 d0       	rcall	.+0      	; 0x98 <lcm_delay+0x6>
  98:	00 d0       	rcall	.+0      	; 0x9a <lcm_delay+0x8>
  9a:	cd b7       	in	r28, 0x3d	; 61
  9c:	de b7       	in	r29, 0x3e	; 62
  9e:	69 83       	std	Y+1, r22	; 0x01
  a0:	7a 83       	std	Y+2, r23	; 0x02
  a2:	8b 83       	std	Y+3, r24	; 0x03
  a4:	9c 83       	std	Y+4, r25	; 0x04
  a6:	60 e0       	ldi	r22, 0x00	; 0
  a8:	70 e0       	ldi	r23, 0x00	; 0
  aa:	02 c0       	rjmp	.+4      	; 0xb0 <lcm_delay+0x1e>
  unsigned int a;
  for(a=0;a<i;a++)
  ac:	6f 5f       	subi	r22, 0xFF	; 255
  ae:	7f 4f       	sbci	r23, 0xFF	; 255
  b0:	29 81       	ldd	r18, Y+1	; 0x01
  b2:	3a 81       	ldd	r19, Y+2	; 0x02
  b4:	4b 81       	ldd	r20, Y+3	; 0x03
  b6:	5c 81       	ldd	r21, Y+4	; 0x04
  b8:	cb 01       	movw	r24, r22
  ba:	a0 e0       	ldi	r26, 0x00	; 0
  bc:	b0 e0       	ldi	r27, 0x00	; 0
  be:	82 17       	cp	r24, r18
  c0:	93 07       	cpc	r25, r19
  c2:	a4 07       	cpc	r26, r20
  c4:	b5 07       	cpc	r27, r21
  c6:	90 f3       	brcs	.-28     	; 0xac <lcm_delay+0x1a>
  ;
}
  c8:	0f 90       	pop	r0
  ca:	0f 90       	pop	r0
  cc:	0f 90       	pop	r0
  ce:	0f 90       	pop	r0
  d0:	cf 91       	pop	r28
  d2:	df 91       	pop	r29
  d4:	08 95       	ret

000000d6 <LCD_PORT_init>:
* 调用          :NULL
* 编写日期      :2008-2-29 
* 最后修改日期  :2008-2-29 
************************************************************************/
void LCD_PORT_init(void)
{
  d6:	84 b3       	in	r24, 0x14	; 20
  d8:	80 6f       	ori	r24, 0xF0	; 240
  da:	84 bb       	out	0x14, r24	; 20
  LCD_DATA_DDR |= LCD_DATA;
  LCD_CTR_DDR  |= LCD_RS | LCD_RW | LCD_EN;
  dc:	84 b3       	in	r24, 0x14	; 20
  de:	8e 60       	ori	r24, 0x0E	; 14
  e0:	84 bb       	out	0x14, r24	; 20
  LCD_EN_PORT  &= ~LCD_EN;      //EN=0
  e2:	ab 98       	cbi	0x15, 3	; 21
}
  e4:	08 95       	ret

000000e6 <read_busy>:
* 调用          :NULL
* 编写日期      :2008-2-29 
* 最后修改日期  :2008-2-29 
************************************************************************/
void read_busy(void)
{ 
  e6:	80 e0       	ldi	r24, 0x00	; 0
  e8:	90 e0       	ldi	r25, 0x00	; 0
  ea:	01 c0       	rjmp	.+2      	; 0xee <read_busy+0x8>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
  ec:	01 96       	adiw	r24, 0x01	; 1
  ee:	84 36       	cpi	r24, 0x64	; 100
  f0:	91 05       	cpc	r25, r1
  f2:	e0 f3       	brcs	.-8      	; 0xec <read_busy+0x6>
{ 
  //_delay_ms(1000);//直接用延时代替读忙以防LCM出错导致的死机
  //return;

  lcm_delay(100);
  LCD_CTR_DDR  |= LCD_EN | LCD_RW | LCD_RS;
  f4:	84 b3       	in	r24, 0x14	; 20
  f6:	8e 60       	ori	r24, 0x0E	; 14
  f8:	84 bb       	out	0x14, r24	; 20
  LCD_DATA_DDR &= ~(1<<7);
  fa:	a7 98       	cbi	0x14, 7	; 20
  
  lcm_delay(20);
  fc:	80 e0       	ldi	r24, 0x00	; 0
  fe:	90 e0       	ldi	r25, 0x00	; 0
 100:	01 c0       	rjmp	.+2      	; 0x104 <read_busy+0x1e>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
 102:	01 96       	adiw	r24, 0x01	; 1
 104:	84 31       	cpi	r24, 0x14	; 20
 106:	91 05       	cpc	r25, r1
 108:	e0 f3       	brcs	.-8      	; 0x102 <read_busy+0x1c>
  lcm_delay(100);
  LCD_CTR_DDR  |= LCD_EN | LCD_RW | LCD_RS;
  LCD_DATA_DDR &= ~(1<<7);
  
  lcm_delay(20);
  LCD_RS_PORT &=  ~LCD_RS;    //RS=0
 10a:	a9 98       	cbi	0x15, 1	; 21
  lcm_delay(20);
 10c:	80 e0       	ldi	r24, 0x00	; 0
 10e:	90 e0       	ldi	r25, 0x00	; 0
 110:	01 c0       	rjmp	.+2      	; 0x114 <read_busy+0x2e>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
 112:	01 96       	adiw	r24, 0x01	; 1
 114:	84 31       	cpi	r24, 0x14	; 20
 116:	91 05       	cpc	r25, r1
 118:	e0 f3       	brcs	.-8      	; 0x112 <read_busy+0x2c>
  LCD_DATA_DDR &= ~(1<<7);
  
  lcm_delay(20);
  LCD_RS_PORT &=  ~LCD_RS;    //RS=0
  lcm_delay(20);
  LCD_RW_PORT |=  LCD_RW;     //RW=1 
 11a:	aa 9a       	sbi	0x15, 2	; 21
  lcm_delay(20);
 11c:	80 e0       	ldi	r24, 0x00	; 0
 11e:	90 e0       	ldi	r25, 0x00	; 0
 120:	01 c0       	rjmp	.+2      	; 0x124 <read_busy+0x3e>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
 122:	01 96       	adiw	r24, 0x01	; 1
 124:	84 31       	cpi	r24, 0x14	; 20
 126:	91 05       	cpc	r25, r1
 128:	e0 f3       	brcs	.-8      	; 0x122 <read_busy+0x3c>
  lcm_delay(20);
  LCD_RS_PORT &=  ~LCD_RS;    //RS=0
  lcm_delay(20);
  LCD_RW_PORT |=  LCD_RW;     //RW=1 
  lcm_delay(20);
  LCD_EN_PORT |=  LCD_EN;     //EN=1 
 12a:	ab 9a       	sbi	0x15, 3	; 21

  lcm_delay(20);
 12c:	80 e0       	ldi	r24, 0x00	; 0
 12e:	90 e0       	ldi	r25, 0x00	; 0
 130:	01 c0       	rjmp	.+2      	; 0x134 <read_busy+0x4e>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
 132:	01 96       	adiw	r24, 0x01	; 1
 134:	84 31       	cpi	r24, 0x14	; 20
 136:	91 05       	cpc	r25, r1
 138:	e0 f3       	brcs	.-8      	; 0x132 <read_busy+0x4c>
 13a:	07 c0       	rjmp	.+14     	; 0x14a <read_busy+0x64>
  LCD_RW_PORT |=  LCD_RW;     //RW=1 
  lcm_delay(20);
  LCD_EN_PORT |=  LCD_EN;     //EN=1 

  lcm_delay(20);
  while(LCD_DATA_PIN & 0x80) lcm_delay(20);
 13c:	80 e0       	ldi	r24, 0x00	; 0
 13e:	90 e0       	ldi	r25, 0x00	; 0
 140:	01 c0       	rjmp	.+2      	; 0x144 <read_busy+0x5e>
* 最后修改日期  :2008-2-29 
************************************************************************/
void lcm_delay(volatile unsigned long i)
{
  unsigned int a;
  for(a=0;a<i;a++)
 142:	01 96       	adiw	r24, 0x01	; 1
 144:	84 31       	cpi	r24, 0x14	; 20
 146:	91 05       	cpc	r25, r1
 148:	e0 f3       	brcs	.-8      	; 0x142 <read_busy+0x5c>
  LCD_RW_PORT |=  LCD_RW;     //RW=1 
  lcm_delay(20);
  LCD_EN_PORT |=  LCD_EN;     //EN=1 

  lcm_delay(20);
  while(LCD_DATA_PIN & 0x80) lcm_delay(20);
 14a:	9f 99       	sbic	0x13, 7	; 19
 14c:	f7 cf       	rjmp	.-18     	; 0x13c <read_busy+0x56>
  
  LCD_EN_PORT &=  ~LCD_EN;     //EN=0
 14e:	ab 98       	cbi	0x15, 3	; 21
}
 150:	08 95       	ret

⌨️ 快捷键说明

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