?? lcdtest.lss
字號:
_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 + -