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

📄 lcdtest.lss

📁 l602驱动程序 数据总线为4根 增加了io利用率
💻 LSS
📖 第 1 页 / 共 2 页
字号:
		_delay_us(0.5);
		CLEAR_E();
 24e:	97 98       	cbi	0x12, 7	; 18
 250:	93 2f       	mov	r25, r19
 252:	9a 95       	dec	r25
 254:	f1 f7       	brne	.-4      	; 0x252 <LCDBusyLoop+0x44>
		_delay_us(1);	//tEL
	}while(busy);
 256:	87 fd       	sbrc	r24, 7
 258:	e4 cf       	rjmp	.-56     	; 0x222 <LCDBusyLoop+0x14>

	CLEAR_RW();		//write mode
 25a:	95 98       	cbi	0x12, 5	; 18
	//Change Port to output
	LCD_DATA_DDR|=0x0F;
 25c:	84 b3       	in	r24, 0x14	; 20
 25e:	8f 60       	ori	r24, 0x0F	; 15
 260:	84 bb       	out	0x14, r24	; 20
 262:	08 95       	ret

00000264 <LCDByte>:
#define CLEAR_RW() (LCD_RW_PORT&=(~(1<<LCD_RW_POS)))



void LCDByte(uint8_t c,uint8_t isdata)
{
 264:	28 2f       	mov	r18, r24
uint8_t temp;

hn=c>>4;
ln=(c & 0x0F);

if(isdata==0)
 266:	66 23       	and	r22, r22
 268:	11 f4       	brne	.+4      	; 0x26e <LCDByte+0xa>
	CLEAR_RS();
 26a:	96 98       	cbi	0x12, 6	; 18
 26c:	01 c0       	rjmp	.+2      	; 0x270 <LCDByte+0xc>
else
	SET_RS();
 26e:	96 9a       	sbi	0x12, 6	; 18
 270:	81 e0       	ldi	r24, 0x01	; 1
 272:	8a 95       	dec	r24
 274:	f1 f7       	brne	.-4      	; 0x272 <LCDByte+0xe>

_delay_us(0.500);		//tAS

SET_E();
 276:	97 9a       	sbi	0x12, 7	; 18

//Send high nibble

temp=(LCD_DATA_PORT & 0XF0)|(hn);
 278:	85 b3       	in	r24, 0x15	; 21
 27a:	80 7f       	andi	r24, 0xF0	; 240
 27c:	92 2f       	mov	r25, r18
 27e:	92 95       	swap	r25
 280:	9f 70       	andi	r25, 0x0F	; 15
 282:	89 2b       	or	r24, r25
LCD_DATA_PORT=temp;
 284:	85 bb       	out	0x15, r24	; 21
 286:	92 e0       	ldi	r25, 0x02	; 2
 288:	89 2f       	mov	r24, r25
 28a:	8a 95       	dec	r24
 28c:	f1 f7       	brne	.-4      	; 0x28a <LCDByte+0x26>

_delay_us(1);			//tEH

//Now data lines are stable pull E low for transmission

CLEAR_E();
 28e:	97 98       	cbi	0x12, 7	; 18
 290:	89 2f       	mov	r24, r25
 292:	8a 95       	dec	r24
 294:	f1 f7       	brne	.-4      	; 0x292 <LCDByte+0x2e>

_delay_us(1);

//Send the lower nibble
SET_E();
 296:	97 9a       	sbi	0x12, 7	; 18

temp=(LCD_DATA_PORT & 0XF0)|(ln);
 298:	85 b3       	in	r24, 0x15	; 21
 29a:	80 7f       	andi	r24, 0xF0	; 240
 29c:	2f 70       	andi	r18, 0x0F	; 15
 29e:	82 2b       	or	r24, r18

LCD_DATA_PORT=temp;
 2a0:	85 bb       	out	0x15, r24	; 21
 2a2:	89 2f       	mov	r24, r25
 2a4:	8a 95       	dec	r24
 2a6:	f1 f7       	brne	.-4      	; 0x2a4 <LCDByte+0x40>

_delay_us(1);			//tEH

//SEND

CLEAR_E();
 2a8:	97 98       	cbi	0x12, 7	; 18
 2aa:	9a 95       	dec	r25
 2ac:	f1 f7       	brne	.-4      	; 0x2aa <LCDByte+0x46>

_delay_us(1);			//tEL

LCDBusyLoop();
 2ae:	0e 94 07 01 	call	0x20e	; 0x20e <LCDBusyLoop>
 2b2:	08 95       	ret

000002b4 <LCDWriteString>:

	LCDCmd(0b00001100|style);	//Display On
	LCDCmd(0b00101000);			//function set 4-bit,2 line 5x7 dot format
}
void LCDWriteString(const char *msg)
{
 2b4:	cf 93       	push	r28
 2b6:	df 93       	push	r29
 2b8:	ec 01       	movw	r28, r24
 2ba:	04 c0       	rjmp	.+8      	; 0x2c4 <LCDWriteString+0x10>


	*****************************************************************/
 while(*msg!='\0')
 {
	LCDData(*msg);
 2bc:	61 e0       	ldi	r22, 0x01	; 1
 2be:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
	msg++;
 2c2:	21 96       	adiw	r28, 0x01	; 1
	Arguments:
	msg: a null terminated string to print


	*****************************************************************/
 while(*msg!='\0')
 2c4:	88 81       	ld	r24, Y
 2c6:	88 23       	and	r24, r24
 2c8:	c9 f7       	brne	.-14     	; 0x2bc <LCDWriteString+0x8>
 2ca:	df 91       	pop	r29
 2cc:	cf 91       	pop	r28
 2ce:	08 95       	ret

000002d0 <LCDWriteInt>:
	msg++;
 }
}

void LCDWriteInt(int val,unsigned int field_length)
{
 2d0:	ef 92       	push	r14
 2d2:	ff 92       	push	r15
 2d4:	0f 93       	push	r16
 2d6:	1f 93       	push	r17
 2d8:	cf 93       	push	r28
 2da:	df 93       	push	r29
 2dc:	cd b7       	in	r28, 0x3d	; 61
 2de:	de b7       	in	r29, 0x3e	; 62
 2e0:	25 97       	sbiw	r28, 0x05	; 5
 2e2:	0f b6       	in	r0, 0x3f	; 63
 2e4:	f8 94       	cli
 2e6:	de bf       	out	0x3e, r29	; 62
 2e8:	0f be       	out	0x3f, r0	; 63
 2ea:	cd bf       	out	0x3d, r28	; 61
 2ec:	9c 01       	movw	r18, r24
 2ee:	8b 01       	movw	r16, r22
	2)unsigned int field_length :total length of field in which the value is printed
	must be between 1-5 if it is -1 the field length is no of digits in the val

	****************************************************************/

	char str[5]={0,0,0,0,0};
 2f0:	85 e0       	ldi	r24, 0x05	; 5
 2f2:	fe 01       	movw	r30, r28
 2f4:	31 96       	adiw	r30, 0x01	; 1
 2f6:	11 92       	st	Z+, r1
 2f8:	8a 95       	dec	r24
 2fa:	e9 f7       	brne	.-6      	; 0x2f6 <LCDWriteInt+0x26>
 2fc:	fe 01       	movw	r30, r28
 2fe:	35 96       	adiw	r30, 0x05	; 5
 300:	0c c0       	rjmp	.+24     	; 0x31a <LCDWriteInt+0x4a>
	int i=4,j=0;
	while(val)
	{
	str[i]=val%10;
 302:	c9 01       	movw	r24, r18
 304:	6a e0       	ldi	r22, 0x0A	; 10
 306:	70 e0       	ldi	r23, 0x00	; 0
 308:	0e 94 f9 01 	call	0x3f2	; 0x3f2 <__divmodhi4>
 30c:	81 83       	std	Z+1, r24	; 0x01
	val=val/10;
 30e:	c9 01       	movw	r24, r18
 310:	6a e0       	ldi	r22, 0x0A	; 10
 312:	70 e0       	ldi	r23, 0x00	; 0
 314:	0e 94 f9 01 	call	0x3f2	; 0x3f2 <__divmodhi4>
 318:	9b 01       	movw	r18, r22
 31a:	31 97       	sbiw	r30, 0x01	; 1

	****************************************************************/

	char str[5]={0,0,0,0,0};
	int i=4,j=0;
	while(val)
 31c:	21 15       	cp	r18, r1
 31e:	31 05       	cpc	r19, r1
 320:	81 f7       	brne	.-32     	; 0x302 <LCDWriteInt+0x32>
	{
	str[i]=val%10;
	val=val/10;
	i--;
	}
	if(field_length==-1)
 322:	8f ef       	ldi	r24, 0xFF	; 255
 324:	0f 3f       	cpi	r16, 0xFF	; 255
 326:	18 07       	cpc	r17, r24
 328:	59 f4       	brne	.+22     	; 0x340 <LCDWriteInt+0x70>
 32a:	fe 01       	movw	r30, r28
 32c:	31 96       	adiw	r30, 0x01	; 1
		while(str[j]==0) j++;
 32e:	80 81       	ld	r24, Z
 330:	88 23       	and	r24, r24
 332:	e1 f3       	breq	.-8      	; 0x32c <LCDWriteInt+0x5c>
	msg++;
 }
}

void LCDWriteInt(int val,unsigned int field_length)
{
 334:	ce 01       	movw	r24, r28
 336:	01 96       	adiw	r24, 0x01	; 1
 338:	e8 1b       	sub	r30, r24
 33a:	f9 0b       	sbc	r31, r25
 33c:	cf 01       	movw	r24, r30
 33e:	04 c0       	rjmp	.+8      	; 0x348 <LCDWriteInt+0x78>
	i--;
	}
	if(field_length==-1)
		while(str[j]==0) j++;
	else
		j=5-field_length;
 340:	85 e0       	ldi	r24, 0x05	; 5
 342:	90 e0       	ldi	r25, 0x00	; 0
 344:	80 1b       	sub	r24, r16
 346:	91 0b       	sbc	r25, r17
 348:	7e 01       	movw	r14, r28
 34a:	08 94       	sec
 34c:	e1 1c       	adc	r14, r1
 34e:	f1 1c       	adc	r15, r1
 350:	e8 0e       	add	r14, r24
 352:	f9 1e       	adc	r15, r25
 354:	8c 01       	movw	r16, r24
 356:	09 c0       	rjmp	.+18     	; 0x36a <LCDWriteInt+0x9a>

	if(val<0) LCDData('-');
	for(i=j;i<5;i++)
	{
	LCDData(48+str[i]);
 358:	f7 01       	movw	r30, r14
 35a:	81 91       	ld	r24, Z+
 35c:	7f 01       	movw	r14, r30
 35e:	61 e0       	ldi	r22, 0x01	; 1
 360:	80 5d       	subi	r24, 0xD0	; 208
 362:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
		while(str[j]==0) j++;
	else
		j=5-field_length;

	if(val<0) LCDData('-');
	for(i=j;i<5;i++)
 366:	0f 5f       	subi	r16, 0xFF	; 255
 368:	1f 4f       	sbci	r17, 0xFF	; 255
 36a:	05 30       	cpi	r16, 0x05	; 5
 36c:	11 05       	cpc	r17, r1
 36e:	a4 f3       	brlt	.-24     	; 0x358 <LCDWriteInt+0x88>
 370:	25 96       	adiw	r28, 0x05	; 5
 372:	0f b6       	in	r0, 0x3f	; 63
 374:	f8 94       	cli
 376:	de bf       	out	0x3e, r29	; 62
 378:	0f be       	out	0x3f, r0	; 63
 37a:	cd bf       	out	0x3d, r28	; 61
 37c:	df 91       	pop	r29
 37e:	cf 91       	pop	r28
 380:	1f 91       	pop	r17
 382:	0f 91       	pop	r16
 384:	ff 90       	pop	r15
 386:	ef 90       	pop	r14
 388:	08 95       	ret

0000038a <LCDGotoXY>:
	LCDData(48+str[i]);
	}
}
void LCDGotoXY(uint8_t x,uint8_t y)
{
 if(x<40)
 38a:	88 32       	cpi	r24, 0x28	; 40
 38c:	30 f4       	brcc	.+12     	; 0x39a <LCDGotoXY+0x10>
 {
  if(y) x|=0b01000000;
 38e:	61 11       	cpse	r22, r1
 390:	80 64       	ori	r24, 0x40	; 64
  x|=0b10000000;
  LCDCmd(x);
 392:	60 e0       	ldi	r22, 0x00	; 0
 394:	80 68       	ori	r24, 0x80	; 128
 396:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
 39a:	08 95       	ret

0000039c <InitLCD>:
	LCD_DATA_DDR|=0x0F;

}

void InitLCD(uint8_t style)
{
 39c:	1f 93       	push	r17
 39e:	18 2f       	mov	r17, r24
 3a0:	80 e6       	ldi	r24, 0x60	; 96
 3a2:	9a ee       	ldi	r25, 0xEA	; 234
 3a4:	01 97       	sbiw	r24, 0x01	; 1
 3a6:	f1 f7       	brne	.-4      	; 0x3a4 <InitLCD+0x8>
	
	//After power on Wait for LCD to Initialize
	_delay_ms(30);
	
	//Set IO Ports
	LCD_DATA_DDR|=(0x0F);
 3a8:	84 b3       	in	r24, 0x14	; 20
 3aa:	8f 60       	ori	r24, 0x0F	; 15
 3ac:	84 bb       	out	0x14, r24	; 20
	LCD_E_DDR|=(1<<LCD_E_POS);
 3ae:	8f 9a       	sbi	0x11, 7	; 17
	LCD_RS_DDR|=(1<<LCD_RS_POS);
 3b0:	8e 9a       	sbi	0x11, 6	; 17
	LCD_RW_DDR|=(1<<LCD_RW_POS);
 3b2:	8d 9a       	sbi	0x11, 5	; 17
	LCD_DATA_PORT&=0XF0;
 3b4:	85 b3       	in	r24, 0x15	; 21
 3b6:	80 7f       	andi	r24, 0xF0	; 240
 3b8:	85 bb       	out	0x15, r24	; 21
	
       
	CLEAR_E();
 3ba:	97 98       	cbi	0x12, 7	; 18
	CLEAR_RW();
 3bc:	95 98       	cbi	0x12, 5	; 18
	CLEAR_RS();
 3be:	96 98       	cbi	0x12, 6	; 18
 3c0:	81 e0       	ldi	r24, 0x01	; 1
 3c2:	8a 95       	dec	r24
 3c4:	f1 f7       	brne	.-4      	; 0x3c2 <InitLCD+0x26>

	//Set 4-bit mode
	_delay_us(0.3);	//tAS

	SET_E();
 3c6:	97 9a       	sbi	0x12, 7	; 18
	LCD_DATA_PORT|=(0b00000010); //[B] To transfer 0b00100000 i was using LCD_DATA_PORT|=0b00100000
 3c8:	a9 9a       	sbi	0x15, 1	; 21
 3ca:	82 e0       	ldi	r24, 0x02	; 2
 3cc:	98 2f       	mov	r25, r24
 3ce:	9a 95       	dec	r25
 3d0:	f1 f7       	brne	.-4      	; 0x3ce <InitLCD+0x32>
	_delay_us(1);
	CLEAR_E();
 3d2:	97 98       	cbi	0x12, 7	; 18
 3d4:	8a 95       	dec	r24
 3d6:	f1 f7       	brne	.-4      	; 0x3d4 <InitLCD+0x38>
	_delay_us(1);
	
	//Wait for LCD to execute the Functionset Command
	LCDBusyLoop();                                    //[B] Forgot this delay
 3d8:	0e 94 07 01 	call	0x20e	; 0x20e <LCDBusyLoop>

	//Now the LCD is in 4-bit mode

	LCDCmd(0b00001100|style);	//Display On
 3dc:	60 e0       	ldi	r22, 0x00	; 0
 3de:	81 2f       	mov	r24, r17
 3e0:	8c 60       	ori	r24, 0x0C	; 12
 3e2:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
	LCDCmd(0b00101000);			//function set 4-bit,2 line 5x7 dot format
 3e6:	60 e0       	ldi	r22, 0x00	; 0
 3e8:	88 e2       	ldi	r24, 0x28	; 40
 3ea:	0e 94 32 01 	call	0x264	; 0x264 <LCDByte>
 3ee:	1f 91       	pop	r17
 3f0:	08 95       	ret

000003f2 <__divmodhi4>:
 3f2:	97 fb       	bst	r25, 7
 3f4:	09 2e       	mov	r0, r25
 3f6:	07 26       	eor	r0, r23
 3f8:	0a d0       	rcall	.+20     	; 0x40e <__divmodhi4_neg1>
 3fa:	77 fd       	sbrc	r23, 7
 3fc:	04 d0       	rcall	.+8      	; 0x406 <__divmodhi4_neg2>
 3fe:	0c d0       	rcall	.+24     	; 0x418 <__udivmodhi4>
 400:	06 d0       	rcall	.+12     	; 0x40e <__divmodhi4_neg1>
 402:	00 20       	and	r0, r0
 404:	1a f4       	brpl	.+6      	; 0x40c <__divmodhi4_exit>

00000406 <__divmodhi4_neg2>:
 406:	70 95       	com	r23
 408:	61 95       	neg	r22
 40a:	7f 4f       	sbci	r23, 0xFF	; 255

0000040c <__divmodhi4_exit>:
 40c:	08 95       	ret

0000040e <__divmodhi4_neg1>:
 40e:	f6 f7       	brtc	.-4      	; 0x40c <__divmodhi4_exit>
 410:	90 95       	com	r25
 412:	81 95       	neg	r24
 414:	9f 4f       	sbci	r25, 0xFF	; 255
 416:	08 95       	ret

00000418 <__udivmodhi4>:
 418:	aa 1b       	sub	r26, r26
 41a:	bb 1b       	sub	r27, r27
 41c:	51 e1       	ldi	r21, 0x11	; 17
 41e:	07 c0       	rjmp	.+14     	; 0x42e <__udivmodhi4_ep>

00000420 <__udivmodhi4_loop>:
 420:	aa 1f       	adc	r26, r26
 422:	bb 1f       	adc	r27, r27
 424:	a6 17       	cp	r26, r22
 426:	b7 07       	cpc	r27, r23
 428:	10 f0       	brcs	.+4      	; 0x42e <__udivmodhi4_ep>
 42a:	a6 1b       	sub	r26, r22
 42c:	b7 0b       	sbc	r27, r23

0000042e <__udivmodhi4_ep>:
 42e:	88 1f       	adc	r24, r24
 430:	99 1f       	adc	r25, r25
 432:	5a 95       	dec	r21
 434:	a9 f7       	brne	.-22     	; 0x420 <__udivmodhi4_loop>
 436:	80 95       	com	r24
 438:	90 95       	com	r25
 43a:	bc 01       	movw	r22, r24
 43c:	cd 01       	movw	r24, r26
 43e:	08 95       	ret

00000440 <_exit>:
 440:	f8 94       	cli

00000442 <__stop_program>:
 442:	ff cf       	rjmp	.-2      	; 0x442 <__stop_program>

⌨️ 快捷键说明

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