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

📄 main.lss

📁 功能 : 1602字符型液晶显示驱动 开发环境:WinAVR 硬件环境:ATMEGA32/AVR开发板 创建日期:2008-3-27 最后修改:2008-3-27 作 者:bjj9217@1
💻 LSS
📖 第 1 页 / 共 2 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000450  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000a  00800060  00000450  000004c4  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .stab         00000378  00000000  00000000  000004d0  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  00000848  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000020  00000000  00000000  000008b9  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 000000f9  00000000  00000000  000008d9  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   00000514  00000000  00000000  000009d2  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000014f  00000000  00000000  00000ee6  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   0000051a  00000000  00000000  00001035  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  00000130  00000000  00000000  00001550  2**2
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000198  00000000  00000000  00001680  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    0000037c  00000000  00000000  00001818  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:	e0 e5       	ldi	r30, 0x50	; 80
  68:	f4 e0       	ldi	r31, 0x04	; 4
  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:	aa 36       	cpi	r26, 0x6A	; 106
  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:	aa e6       	ldi	r26, 0x6A	; 106
  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:	aa 36       	cpi	r26, 0x6A	; 106
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 dd 01 	call	0x3ba	; 0x3ba <main>
  8a:	0c 94 27 02 	jmp	0x44e	; 0x44e <_exit>

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

00000092 <delay_ms>:
    _delay_loop_2(FREQ>>2);
}

void delay_ms(unsigned int ms)   /*delay_ms*/
{
  92:	9c 01       	movw	r18, r24
  94:	e8 ee       	ldi	r30, 0xE8	; 232
  96:	f3 e0       	ldi	r31, 0x03	; 3
  98:	05 c0       	rjmp	.+10     	; 0xa4 <delay_ms+0x12>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  9a:	cf 01       	movw	r24, r30
  9c:	01 97       	sbiw	r24, 0x01	; 1
  9e:	f1 f7       	brne	.-4      	; 0x9c <delay_ms+0xa>
}

void delay_ms(unsigned int ms)   /*delay_ms*/
{
  for(;ms>0;ms--)
  a0:	21 50       	subi	r18, 0x01	; 1
  a2:	30 40       	sbci	r19, 0x00	; 0
  a4:	21 15       	cp	r18, r1
  a6:	31 05       	cpc	r19, r1
  a8:	c1 f7       	brne	.-16     	; 0x9a <delay_ms+0x8>
  aa:	08 95       	ret

000000ac <delay>:
    _delay_loop_2(FREQ*250);
}

void delay(unsigned int t)  /*t最大为65535*/
{
  ac:	08 95       	ret

000000ae <LCD1602ReadBusy>:
/************************
* 检测忙信号
************************/
void LCD1602ReadBusy(void)
{
  ae:	a7 98       	cbi	0x14, 7	; 20
  cbi(LCD_DDR,BF);  //输入
  sbi(LCD_PORT,BF);
  b0:	af 9a       	sbi	0x15, 7	; 21
  cbi(LCD_PORT,RS);
  b2:	a9 98       	cbi	0x15, 1	; 21
  sbi(LCD_PORT,RW);
  b4:	aa 9a       	sbi	0x15, 2	; 21
  sbi(LCD_PORT,E);
  b6:	ab 9a       	sbi	0x15, 3	; 21
  while(chkbit(LCD_PIN,BF));  //查询
  b8:	9f 99       	sbic	0x13, 7	; 19
  ba:	fe cf       	rjmp	.-4      	; 0xb8 <LCD1602ReadBusy+0xa>
  cbi(LCD_PORT,E);
  bc:	ab 98       	cbi	0x15, 3	; 21
  cbi(LCD_PORT,RS);
  be:	a9 98       	cbi	0x15, 1	; 21
  cbi(LCD_PORT,RW);
  c0:	aa 98       	cbi	0x15, 2	; 21
  sbi(LCD_DDR,BF);  //输出
  c2:	a7 9a       	sbi	0x14, 7	; 20
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
  c4:	81 e0       	ldi	r24, 0x01	; 1
  c6:	8a 95       	dec	r24
  c8:	f1 f7       	brne	.-4      	; 0xc6 <LCD1602ReadBusy+0x18>
  ca:	08 95       	ret

000000cc <WriteComand>:
* lcd1602_写指令
* data: 要写到LCD寄存器的指令值
************************/
void WriteComand(unsigned char Comand)
{
  cc:	1f 93       	push	r17
  ce:	18 2f       	mov	r17, r24
  LCD1602ReadBusy();//查询状态
  d0:	0e 94 57 00 	call	0xae	; 0xae <LCD1602ReadBusy>
  cbi(LCD_PORT,RS); //RS=0
  d4:	a9 98       	cbi	0x15, 1	; 21
  cbi(LCD_PORT,RW); //RW=0
  d6:	aa 98       	cbi	0x15, 2	; 21
  LCD_DDR|=0xFF;    //设置为输出
  d8:	84 b3       	in	r24, 0x14	; 20
  da:	2f ef       	ldi	r18, 0xFF	; 255
  dc:	24 bb       	out	0x14, r18	; 20
  sbi(LCD_PORT,E);  //E=1
  de:	ab 9a       	sbi	0x15, 3	; 21
  LCD_PORT&=0x0F;   //高四位清零,即数据线清零
  e0:	85 b3       	in	r24, 0x15	; 21
  e2:	8f 70       	andi	r24, 0x0F	; 15
  e4:	85 bb       	out	0x15, r24	; 21
  LCD_PORT|=Comand&0xF0; //输出高四位
  e6:	85 b3       	in	r24, 0x15	; 21
  e8:	91 2f       	mov	r25, r17
  ea:	90 7f       	andi	r25, 0xF0	; 240
  ec:	89 2b       	or	r24, r25
  ee:	85 bb       	out	0x15, r24	; 21
  cbi(LCD_PORT,E);  //E=0
  f0:	ab 98       	cbi	0x15, 3	; 21
  
  LCD_DDR|=0xFF;    //设置为输出
  f2:	84 b3       	in	r24, 0x14	; 20
  f4:	24 bb       	out	0x14, r18	; 20
  sbi(LCD_PORT,E);  //E=1
  f6:	ab 9a       	sbi	0x15, 3	; 21
  LCD_PORT&=0x0F;  //高四位清零,即数据线清零
  f8:	85 b3       	in	r24, 0x15	; 21
  fa:	8f 70       	andi	r24, 0x0F	; 15
  fc:	85 bb       	out	0x15, r24	; 21
  LCD_PORT|=(Comand<<4)&0xF0; //输出低四位
  fe:	85 b3       	in	r24, 0x15	; 21
 100:	12 95       	swap	r17
 102:	10 7f       	andi	r17, 0xF0	; 240
 104:	81 2b       	or	r24, r17
 106:	85 bb       	out	0x15, r24	; 21
  cbi(LCD_PORT,E); //E=0;
 108:	ab 98       	cbi	0x15, 3	; 21
 10a:	1f 91       	pop	r17
 10c:	08 95       	ret

0000010e <WriteData>:
}
/************************
* lcd1602_写数据
* data: 要写到LCD寄存器的数据值
************************/
void WriteData(unsigned char data)
{
 10e:	1f 93       	push	r17
 110:	18 2f       	mov	r17, r24
  LCD1602ReadBusy();//查询状态
 112:	0e 94 57 00 	call	0xae	; 0xae <LCD1602ReadBusy>
  sbi(LCD_PORT,RS); //RS=1
 116:	a9 9a       	sbi	0x15, 1	; 21
  cbi(LCD_PORT,RW); //RW=0
 118:	aa 98       	cbi	0x15, 2	; 21
  LCD_DDR|=0xFF;    //设置为输出
 11a:	84 b3       	in	r24, 0x14	; 20
 11c:	2f ef       	ldi	r18, 0xFF	; 255
 11e:	24 bb       	out	0x14, r18	; 20
  sbi(LCD_PORT,E);  //E=1
 120:	ab 9a       	sbi	0x15, 3	; 21
  LCD_PORT&=0x0F;   //高四位清零,即数据线清零
 122:	85 b3       	in	r24, 0x15	; 21
 124:	8f 70       	andi	r24, 0x0F	; 15
 126:	85 bb       	out	0x15, r24	; 21
  LCD_PORT|=data&0xF0; //输出高四位
 128:	85 b3       	in	r24, 0x15	; 21
 12a:	91 2f       	mov	r25, r17
 12c:	90 7f       	andi	r25, 0xF0	; 240
 12e:	89 2b       	or	r24, r25
 130:	85 bb       	out	0x15, r24	; 21
  cbi(LCD_PORT,E);  //E=0
 132:	ab 98       	cbi	0x15, 3	; 21
  
  LCD_DDR|=0xFF;    //设置为输出
 134:	84 b3       	in	r24, 0x14	; 20
 136:	24 bb       	out	0x14, r18	; 20
  sbi(LCD_PORT,E);  //E=1
 138:	ab 9a       	sbi	0x15, 3	; 21
  LCD_PORT&=0x0F;   //高四位清零,即数据线清零
 13a:	85 b3       	in	r24, 0x15	; 21
 13c:	8f 70       	andi	r24, 0x0F	; 15
 13e:	85 bb       	out	0x15, r24	; 21
  LCD_PORT|=(data<<4)&0xF0; //输出低四位
 140:	85 b3       	in	r24, 0x15	; 21
 142:	12 95       	swap	r17
 144:	10 7f       	andi	r17, 0xF0	; 240
 146:	81 2b       	or	r24, r17
 148:	85 bb       	out	0x15, r24	; 21
  cbi(LCD_PORT,E);  //E=0
 14a:	ab 98       	cbi	0x15, 3	; 21
 14c:	1f 91       	pop	r17
 14e:	08 95       	ret

00000150 <Locate_xy>:
}
/************************
* 光标定位
* x,y: 位置
************************/
void Locate_xy(unsigned char x,unsigned char y)
{
 150:	66 23       	and	r22, r22
 152:	11 f4       	brne	.+4      	; 0x158 <Locate_xy+0x8>
  unsigned char address = (y == 0) ? (0x80 + x) : (0xc0 + x);
 154:	80 58       	subi	r24, 0x80	; 128
 156:	01 c0       	rjmp	.+2      	; 0x15a <Locate_xy+0xa>
 158:	80 54       	subi	r24, 0x40	; 64
  WriteComand(address);		
 15a:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
 15e:	08 95       	ret

00000160 <DispChar>:
}
/************************
* 显示一个字符
* data: 要显示的字符,为ASCII码
************************/
void DispChar(unsigned char data)
{
 160:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 164:	08 95       	ret

00000166 <XYChar>:
  WriteData(data);
}
/************************
* 在(x,y)位置显示一个字符
* x,y: 位置
* data: 要显示的字符,为ASCII码
************************/
void XYChar(unsigned char x,unsigned char y,unsigned char data)
{
 166:	1f 93       	push	r17
 168:	14 2f       	mov	r17, r20
  Locate_xy(x,y);
 16a:	0e 94 a8 00 	call	0x150	; 0x150 <Locate_xy>
  WriteData(data);
 16e:	81 2f       	mov	r24, r17
 170:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 174:	1f 91       	pop	r17
 176:	08 95       	ret

00000178 <DispString>:
}
/************************
* 显示一个字符串
* String: 要显示的字符串
************************/
void DispString(unsigned char *String)
{
 178:	cf 93       	push	r28
 17a:	df 93       	push	r29
 17c:	ec 01       	movw	r28, r24
 17e:	02 c0       	rjmp	.+4      	; 0x184 <DispString+0xc>
  unsigned int i=0;
  while(String[i]!='\0')WriteData(String[i++]);
 180:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 184:	89 91       	ld	r24, Y+
 186:	88 23       	and	r24, r24
 188:	d9 f7       	brne	.-10     	; 0x180 <DispString+0x8>
 18a:	df 91       	pop	r29
 18c:	cf 91       	pop	r28
 18e:	08 95       	ret

00000190 <XYString>:
}
/************************
* 在(x,y)位置显示一个字符串
* x,y: 位置
* String: 要显示的字符串
************************/
void XYString(unsigned char x,unsigned char y,unsigned char *String)
{
 190:	0f 93       	push	r16
 192:	1f 93       	push	r17
 194:	cf 93       	push	r28
 196:	df 93       	push	r29
 198:	8a 01       	movw	r16, r20
  unsigned int i=0;
  Locate_xy(x,y);
 19a:	0e 94 a8 00 	call	0x150	; 0x150 <Locate_xy>
 19e:	e8 01       	movw	r28, r16
 1a0:	02 c0       	rjmp	.+4      	; 0x1a6 <XYString+0x16>
  //DispString(*String);
  while(String[i]!='\0')WriteData(String[i++]);
 1a2:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 1a6:	89 91       	ld	r24, Y+
 1a8:	88 23       	and	r24, r24
 1aa:	d9 f7       	brne	.-10     	; 0x1a2 <XYString+0x12>
 1ac:	df 91       	pop	r29
 1ae:	cf 91       	pop	r28
 1b0:	1f 91       	pop	r17
 1b2:	0f 91       	pop	r16
 1b4:	08 95       	ret

000001b6 <DispNum>:
}
/************************
* 显示一个0-9的数字
* num: 要显示的数字 0~9
************************/
void DispNum(unsigned char num)
{
 1b6:	80 5d       	subi	r24, 0xD0	; 208
 1b8:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 1bc:	08 95       	ret

000001be <XYNum>:
  WriteData(num+0x30);
}
/************************
* 在(x,y)位置显示一个0-9的数字
* x,y: 位置
* num: 要显示的数字 0~9
************************/
void XYNum(unsigned char x,unsigned char y,unsigned char num)
{
 1be:	1f 93       	push	r17
 1c0:	14 2f       	mov	r17, r20
  Locate_xy(x,y);
 1c2:	0e 94 a8 00 	call	0x150	; 0x150 <Locate_xy>
  WriteData(num+0x30);
 1c6:	81 2f       	mov	r24, r17
 1c8:	80 5d       	subi	r24, 0xD0	; 208
 1ca:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 1ce:	1f 91       	pop	r17
 1d0:	08 95       	ret

000001d2 <DispHex>:
}

/************************
* 显示十六进制
* hex: 要显示的数,为十进制数 0~255
************************/
void DispHex(unsigned char hex)
{
 1d2:	0f 93       	push	r16

⌨️ 快捷键说明

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