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

📄 lcdtest.lss

📁 l602驱动程序 数据总线为4根 增加了io利用率
💻 LSS
📖 第 1 页 / 共 2 页
字号:

lcdtest.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000444  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000007c  00800060  00000444  000004b8  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .stab         000011c4  00000000  00000000  00000534  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      0000093d  00000000  00000000  000016f8  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:	e4 e4       	ldi	r30, 0x44	; 68
  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:	ac 3d       	cpi	r26, 0xDC	; 220
  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:	ac ed       	ldi	r26, 0xDC	; 220
  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:	ac 3d       	cpi	r26, 0xDC	; 220
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 93 00 	call	0x126	; 0x126 <main>
  8a:	0c 94 20 02 	jmp	0x440	; 0x440 <_exit>

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

00000092 <DelayMs>:
 //外部中断 0 
 #ifndef CP_F
 #define  CP_F   8
 #endif
void DelayMs(uint t)
{
  92:	20 e0       	ldi	r18, 0x00	; 0
  94:	30 e0       	ldi	r19, 0x00	; 0
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  96:	40 ed       	ldi	r20, 0xD0	; 208
  98:	57 e0       	ldi	r21, 0x07	; 7
  9a:	05 c0       	rjmp	.+10     	; 0xa6 <DelayMs+0x14>
  9c:	fa 01       	movw	r30, r20
  9e:	31 97       	sbiw	r30, 0x01	; 1
  a0:	f1 f7       	brne	.-4      	; 0x9e <DelayMs+0xc>
 uint  i; 
 for(i=0;i<t;i++) 
  a2:	2f 5f       	subi	r18, 0xFF	; 255
  a4:	3f 4f       	sbci	r19, 0xFF	; 255
  a6:	28 17       	cp	r18, r24
  a8:	39 07       	cpc	r19, r25
  aa:	c0 f3       	brcs	.-16     	; 0x9c <DelayMs+0xa>
  _delay_loop_2(CP_F  * 250); 

}
  ac:	08 95       	ret

000000ae <display_number>:
void display_number(uchar num,uchar hex)
{
  ae:	0f 93       	push	r16
  b0:	1f 93       	push	r17
  b2:	08 2f       	mov	r16, r24
  b4:	16 2f       	mov	r17, r22
LCDClear();
  b6:	60 e0       	ldi	r22, 0x00	; 0
  b8:	81 e0       	ldi	r24, 0x01	; 1
  ba:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
if(hex==0)
  be:	11 23       	and	r17, r17
  c0:	b1 f4       	brne	.+44     	; 0xee <display_number+0x40>
	{
	LCDWriteString("now you input:");
  c2:	80 e6       	ldi	r24, 0x60	; 96
  c4:	90 e0       	ldi	r25, 0x00	; 0
  c6:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
	LCDWriteIntXY(2,1,num,3);
  ca:	61 e0       	ldi	r22, 0x01	; 1
  cc:	82 e0       	ldi	r24, 0x02	; 2
  ce:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
  d2:	63 e0       	ldi	r22, 0x03	; 3
  d4:	70 e0       	ldi	r23, 0x00	; 0
  d6:	80 2f       	mov	r24, r16
  d8:	90 e0       	ldi	r25, 0x00	; 0
  da:	0e 94 68 01 	call	0x2d0	; 0x2d0 <LCDWriteInt>
	LCDWriteStringXY(5,1,"continus?");
  de:	61 e0       	ldi	r22, 0x01	; 1
  e0:	85 e0       	ldi	r24, 0x05	; 5
  e2:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
  e6:	8f e6       	ldi	r24, 0x6F	; 111
  e8:	90 e0       	ldi	r25, 0x00	; 0
  ea:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
	}
else
  	{
	}
}
  ee:	1f 91       	pop	r17
  f0:	0f 91       	pop	r16
  f2:	08 95       	ret

000000f4 <key_process>:
	   {
	  // unsigned char time,i;
	   uchar key_num,temp_num;
	   
		     //if(bit_is_set(PINA,7))
		     if(PINA&0x80)
  f4:	cf 9b       	sbis	0x19, 7	; 25
  f6:	16 c0       	rjmp	.+44     	; 0x124 <key_process+0x30>
			{
			
			key_num=(PINB&0x0f);
  f8:	86 b3       	in	r24, 0x16	; 22
    can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
  fa:	91 e0       	ldi	r25, 0x01	; 1
  fc:	9a 95       	dec	r25
  fe:	f1 f7       	brne	.-4      	; 0xfc <key_process+0x8>
                     temp_num=key_num;
			_delay_us(0.3);		 
			 //time=0;
			 if((key_num=(PINB&0x0f))==temp_num)	 
 100:	96 b3       	in	r25, 0x16	; 22
 102:	9f 70       	andi	r25, 0x0F	; 15
 104:	8f 70       	andi	r24, 0x0F	; 15
 106:	98 17       	cp	r25, r24
 108:	29 f4       	brne	.+10     	; 0x114 <key_process+0x20>
			      {     
			 // PORTC=key_num;
			  display_number(key_num,0);	
 10a:	60 e0       	ldi	r22, 0x00	; 0
 10c:	89 2f       	mov	r24, r25
 10e:	0e 94 57 00 	call	0xae	; 0xae <display_number>
 112:	08 95       	ret
			 	}
			 else
			 	{
			 LCDClear();
 114:	60 e0       	ldi	r22, 0x00	; 0
 116:	81 e0       	ldi	r24, 0x01	; 1
 118:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
			 LCDWriteString("....wait you...");
 11c:	89 e7       	ldi	r24, 0x79	; 121
 11e:	90 e0       	ldi	r25, 0x00	; 0
 120:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
 124:	08 95       	ret

00000126 <main>:
		
	}


void main()
{
 126:	ef 92       	push	r14
 128:	ff 92       	push	r15
 12a:	0f 93       	push	r16
 12c:	1f 93       	push	r17
 12e:	cf 93       	push	r28
 130:	df 93       	push	r29
	unsigned char i;
       
	//Initialize LCD module
	InitLCD(LS_BLINK|LS_ULINE);
 132:	83 e0       	ldi	r24, 0x03	; 3
 134:	0e 94 ce 01 	call	0x39c	; 0x39c <InitLCD>

	//Clear the screen
	LCDClear();
 138:	60 e0       	ldi	r22, 0x00	; 0
 13a:	81 e0       	ldi	r24, 0x01	; 1
 13c:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>

	//Simple string printing
	LCDWriteString("ready config ");
 140:	89 e8       	ldi	r24, 0x89	; 137
 142:	90 e0       	ldi	r25, 0x00	; 0
 144:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
	
	//A string on line 2
	LCDWriteStringXY(0,1,"Loading ");
 148:	61 e0       	ldi	r22, 0x01	; 1
 14a:	80 e0       	ldi	r24, 0x00	; 0
 14c:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
 150:	87 e9       	ldi	r24, 0x97	; 151
 152:	90 e0       	ldi	r25, 0x00	; 0
 154:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
 158:	c0 e0       	ldi	r28, 0x00	; 0
 15a:	d0 e0       	ldi	r29, 0x00	; 0
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 15c:	00 e0       	ldi	r16, 0x00	; 0
 15e:	10 e0       	ldi	r17, 0x00	; 0
   
	//Print some numbers
	for (i=0;i<10;i+=1)
	{
		LCDWriteIntXY(9,1,i,3);
 160:	61 e0       	ldi	r22, 0x01	; 1
 162:	89 e0       	ldi	r24, 0x09	; 9
 164:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
 168:	63 e0       	ldi	r22, 0x03	; 3
 16a:	70 e0       	ldi	r23, 0x00	; 0
 16c:	ce 01       	movw	r24, r28
 16e:	0e 94 68 01 	call	0x2d0	; 0x2d0 <LCDWriteInt>
		LCDWriteStringXY(12,1,"%");
 172:	61 e0       	ldi	r22, 0x01	; 1
 174:	8c e0       	ldi	r24, 0x0C	; 12
 176:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
 17a:	80 ea       	ldi	r24, 0xA0	; 160
 17c:	90 e0       	ldi	r25, 0x00	; 0
 17e:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
 182:	ee 24       	eor	r14, r14
 184:	ff 24       	eor	r15, r15
 186:	c8 01       	movw	r24, r16
 188:	01 97       	sbiw	r24, 0x01	; 1
 18a:	f1 f7       	brne	.-4      	; 0x188 <main+0x62>
 18c:	c8 01       	movw	r24, r16
 18e:	01 97       	sbiw	r24, 0x01	; 1
 190:	f1 f7       	brne	.-4      	; 0x18e <main+0x68>
 192:	c8 01       	movw	r24, r16
 194:	01 97       	sbiw	r24, 0x01	; 1
 196:	f1 f7       	brne	.-4      	; 0x194 <main+0x6e>
 198:	c8 01       	movw	r24, r16
 19a:	01 97       	sbiw	r24, 0x01	; 1
 19c:	f1 f7       	brne	.-4      	; 0x19a <main+0x74>
 19e:	21 96       	adiw	r28, 0x01	; 1
	
	//A string on line 2
	LCDWriteStringXY(0,1,"Loading ");
   
	//Print some numbers
	for (i=0;i<10;i+=1)
 1a0:	ca 30       	cpi	r28, 0x0A	; 10
 1a2:	d1 05       	cpc	r29, r1
 1a4:	e9 f6       	brne	.-70     	; 0x160 <main+0x3a>


	}

	//Clear the screen
	LCDClear();
 1a6:	60 e0       	ldi	r22, 0x00	; 0
 1a8:	81 e0       	ldi	r24, 0x01	; 1
 1aa:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>

	//Some more text

	LCDWriteString("Hello everyone");
 1ae:	82 ea       	ldi	r24, 0xA2	; 162
 1b0:	90 e0       	ldi	r25, 0x00	; 0
 1b2:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
	LCDWriteStringXY(0,1,"sign you name ");		// <--- Write ur NAME HERE !!!!!!!!!!!
 1b6:	61 e0       	ldi	r22, 0x01	; 1
 1b8:	80 e0       	ldi	r24, 0x00	; 0
 1ba:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
 1be:	81 eb       	ldi	r24, 0xB1	; 177
 1c0:	90 e0       	ldi	r25, 0x00	; 0
 1c2:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
 1c6:	c7 01       	movw	r24, r14
 1c8:	01 97       	sbiw	r24, 0x01	; 1
 1ca:	f1 f7       	brne	.-4      	; 0x1c8 <main+0xa2>
 1cc:	c7 01       	movw	r24, r14
 1ce:	01 97       	sbiw	r24, 0x01	; 1
 1d0:	f1 f7       	brne	.-4      	; 0x1ce <main+0xa8>
 1d2:	c7 01       	movw	r24, r14
 1d4:	01 97       	sbiw	r24, 0x01	; 1
 1d6:	f1 f7       	brne	.-4      	; 0x1d4 <main+0xae>

	//Wait
	for(i=0;i<3;i++) _delay_loop_2(0);

	//Some More ......
	LCDClear();
 1d8:	60 e0       	ldi	r22, 0x00	; 0
 1da:	81 e0       	ldi	r24, 0x01	; 1
 1dc:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
	LCDWriteString("@welcome to@");
 1e0:	80 ec       	ldi	r24, 0xC0	; 192
 1e2:	90 e0       	ldi	r25, 0x00	; 0
 1e4:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
	LCDWriteStringXY(0,1,"fenggang space");
 1e8:	61 e0       	ldi	r22, 0x01	; 1
 1ea:	80 e0       	ldi	r24, 0x00	; 0
 1ec:	0e 94 c5 01 	call	0x38a	; 0x38a <LCDGotoXY>
 1f0:	8d ec       	ldi	r24, 0xCD	; 205
 1f2:	90 e0       	ldi	r25, 0x00	; 0
 1f4:	0e 94 5a 01 	call	0x2b4	; 0x2b4 <LCDWriteString>
        #undef  __DOXYGEN__
       #endif
	  sei(); //总中断允许   
	  */

DDRA|=0x00; //定义为输入引脚
 1f8:	8a b3       	in	r24, 0x1a	; 26
 1fa:	8a bb       	out	0x1a, r24	; 26
PORTA=_BV(PA7);
 1fc:	80 e8       	ldi	r24, 0x80	; 128
 1fe:	8b bb       	out	0x1b, r24	; 27
DDRB|=0x00; //定义为输入引脚
 200:	87 b3       	in	r24, 0x17	; 23
 202:	87 bb       	out	0x17, r24	; 23
PORTB=_BV(PB0)|_BV(PB1)|_BV(PB2)|_BV(PB3);//键盘引脚上拉电阻开 
 204:	8f e0       	ldi	r24, 0x0F	; 15
 206:	88 bb       	out	0x18, r24	; 24
	  while(1)
	  	{
	  	key_process();
 208:	0e 94 7a 00 	call	0xf4	; 0xf4 <key_process>
 20c:	fd cf       	rjmp	.-6      	; 0x208 <main+0xe2>

0000020e <LCDBusyLoop>:
	//This function waits till lcd is BUSY

	uint8_t busy,status=0x00,temp;

	//Change Port to input type because we are reading data
	LCD_DATA_DDR&=0xF0;
 20e:	84 b3       	in	r24, 0x14	; 20
 210:	80 7f       	andi	r24, 0xF0	; 240
 212:	84 bb       	out	0x14, r24	; 20

	//change LCD mode
	SET_RW();		//Read mode
 214:	95 9a       	sbi	0x12, 5	; 18
	CLEAR_RS();		//Read status
 216:	96 98       	cbi	0x12, 6	; 18
 218:	81 e0       	ldi	r24, 0x01	; 1
 21a:	8a 95       	dec	r24
 21c:	f1 f7       	brne	.-4      	; 0x21a <LCDBusyLoop+0xc>
 21e:	21 e0       	ldi	r18, 0x01	; 1
 220:	32 e0       	ldi	r19, 0x02	; 2

	
	do
	{

		SET_E();
 222:	97 9a       	sbi	0x12, 7	; 18
 224:	82 2f       	mov	r24, r18
 226:	8a 95       	dec	r24
 228:	f1 f7       	brne	.-4      	; 0x226 <LCDBusyLoop+0x18>

		//Wait tDA for data to become available
		_delay_us(0.5);

		status=LCD_DATA_PIN;
 22a:	83 b3       	in	r24, 0x13	; 19
		status=status<<4;
 22c:	82 95       	swap	r24
 22e:	80 7f       	andi	r24, 0xF0	; 240
 230:	92 2f       	mov	r25, r18
 232:	9a 95       	dec	r25
 234:	f1 f7       	brne	.-4      	; 0x232 <LCDBusyLoop+0x24>

		_delay_us(0.5);

		//Pull E low
		CLEAR_E();
 236:	97 98       	cbi	0x12, 7	; 18
 238:	93 2f       	mov	r25, r19
 23a:	9a 95       	dec	r25
 23c:	f1 f7       	brne	.-4      	; 0x23a <LCDBusyLoop+0x2c>
		_delay_us(1);	//tEL

		SET_E();
 23e:	97 9a       	sbi	0x12, 7	; 18
 240:	92 2f       	mov	r25, r18
 242:	9a 95       	dec	r25
 244:	f1 f7       	brne	.-4      	; 0x242 <LCDBusyLoop+0x34>
		_delay_us(0.5);

		temp=LCD_DATA_PIN;
 246:	93 b3       	in	r25, 0x13	; 19
 248:	92 2f       	mov	r25, r18
 24a:	9a 95       	dec	r25
 24c:	f1 f7       	brne	.-4      	; 0x24a <LCDBusyLoop+0x3c>
		status=status|temp;

		busy=status & 0b10000000;

⌨️ 快捷键说明

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