?? dtmf2.lss
字號(hào):
void trnsfr(char line, char eol) //Moves digits from eeprom to LCD line
{
3f6: 1f 93 push r17
3f8: cf 93 push r28
3fa: c8 2f mov r28, r24
3fc: 16 2f mov r17, r22
unsigned char hold,pop;
if(line<10) { //test if line is less than 10
3fe: 8a 30 cpi r24, 0x0A ; 10
400: 20 f4 brcc .+8 ; 0x40a
lcdata (' '); //write space on LCD
402: 60 e2 ldi r22, 0x20 ; 32
404: 81 e0 ldi r24, 0x01 ; 1
406: b9 d0 rcall .+370 ; 0x57a
lcdata ((line|0x30)); //write 'ones' line number on LCD
408: 04 c0 rjmp .+8 ; 0x412
}
else { //if line greater than 9....
lcdata ('1'); //write 1 on LCD
40a: 61 e3 ldi r22, 0x31 ; 49
40c: 81 e0 ldi r24, 0x01 ; 1
40e: b5 d0 rcall .+362 ; 0x57a
lcdata (((line-10)|0x30)); //write 'ones' line number on LCD
410: ca 50 subi r28, 0x0A ; 10
412: c0 63 ori r28, 0x30 ; 48
414: 6c 2f mov r22, r28
416: 81 e0 ldi r24, 0x01 ; 1
418: b0 d0 rcall .+352 ; 0x57a
}
lcdata ('-'); //write "-" after line number
41a: 6d e2 ldi r22, 0x2D ; 45
41c: 81 e0 ldi r24, 0x01 ; 1
41e: ad d0 rcall .+346 ; 0x57a
for(pop=1;pop<=13;pop++) { //Read nibbles
420: c1 e0 ldi r28, 0x01 ; 1
hold = eread(pop+eref-eol-14); //Get byte from eeprom
422: 80 91 78 00 lds r24, 0x0078
426: 8c 0f add r24, r28
428: 81 1b sub r24, r17
42a: 8e 50 subi r24, 0x0E ; 14
42c: ab df rcall .-170 ; 0x384
lcdata (fltr(hold)); //Send to LCD
42e: 8d d0 rcall .+282 ; 0x54a
430: 68 2f mov r22, r24
432: 81 e0 ldi r24, 0x01 ; 1
434: a2 d0 rcall .+324 ; 0x57a
436: cf 5f subi r28, 0xFF ; 255
438: ce 30 cpi r28, 0x0E ; 14
43a: 98 f3 brcs .-26 ; 0x422
}
}
43c: cf 91 pop r28
43e: 1f 91 pop r17
440: 08 95 ret
00000442 <updtlcd>:
void updtlcd(unsigned char ldata) //Handles writing new dtmf digit to LCD
{
442: cf 93 push r28
444: c8 2f mov r28, r24
if (redraw==1 && lcdpos<13) { // Redraw LCD if up/dn stuff is on it
446: 60 91 73 00 lds r22, 0x0073
44a: 61 30 cpi r22, 0x01 ; 1
44c: a1 f4 brne .+40 ; 0x476
44e: 80 91 72 00 lds r24, 0x0072
452: 8d 30 cpi r24, 0x0D ; 13
454: 80 f4 brcc .+32 ; 0x476
redraw = 0;
456: 10 92 73 00 sts 0x0073, r1
esrl = 0;
45a: 10 92 60 00 sts 0x0060, r1
lcdln = 19; //reset line numbner
45e: 83 e1 ldi r24, 0x13 ; 19
460: 80 93 62 00 sts 0x0062, r24
lcdcmd (0x01); //Clear LCD, move home//clear lcd
464: 80 e0 ldi r24, 0x00 ; 0
466: 89 d0 rcall .+274 ; 0x57a
trnsfr (18, 0); //draw line 18
468: 60 e0 ldi r22, 0x00 ; 0
46a: 82 e1 ldi r24, 0x12 ; 18
46c: c4 df rcall .-120 ; 0x3f6
lcdcmd (0xC0); //set cursor at begining of bottom line
46e: 60 ec ldi r22, 0xC0 ; 192
470: 80 e0 ldi r24, 0x00 ; 0
472: 83 d0 rcall .+262 ; 0x57a
line19(); //re-draw line 19
474: 48 d0 rcall .+144 ; 0x506
}
if (lcdpos>=13) {
476: 80 91 72 00 lds r24, 0x0072
47a: 8d 30 cpi r24, 0x0D ; 13
47c: a8 f1 brcs .+106 ; 0x4e8
lcdcmd (0x01); //Clear LCD, move home//clear lcd
47e: 61 e0 ldi r22, 0x01 ; 1
480: 80 e0 ldi r24, 0x00 ; 0
482: 7b d0 rcall .+246 ; 0x57a
lcdata ('1'); //write "18-"
484: 61 e3 ldi r22, 0x31 ; 49
486: 81 e0 ldi r24, 0x01 ; 1
488: 78 d0 rcall .+240 ; 0x57a
lcdata ('8');
48a: 68 e3 ldi r22, 0x38 ; 56
48c: 81 e0 ldi r24, 0x01 ; 1
48e: 75 d0 rcall .+234 ; 0x57a
lcdata ('-');
490: 6d e2 ldi r22, 0x2D ; 45
492: 81 e0 ldi r24, 0x01 ; 1
494: 72 d0 rcall .+228 ; 0x57a
for (lcdpos=0;lcdpos<=13;lcdpos++) { //Move bottom line to top
496: 10 92 72 00 sts 0x0072, r1
lcdata (lcdtemp[lcdpos]);
49a: 80 91 72 00 lds r24, 0x0072
49e: e8 2f mov r30, r24
4a0: ff 27 eor r31, r31
4a2: eb 59 subi r30, 0x9B ; 155
4a4: ff 4f sbci r31, 0xFF ; 255
4a6: 60 81 ld r22, Z
4a8: 81 e0 ldi r24, 0x01 ; 1
4aa: 67 d0 rcall .+206 ; 0x57a
4ac: 80 91 72 00 lds r24, 0x0072
4b0: 8f 5f subi r24, 0xFF ; 255
4b2: 80 93 72 00 sts 0x0072, r24
4b6: 8e 30 cpi r24, 0x0E ; 14
4b8: 80 f3 brcs .-32 ; 0x49a
}
lcdcmd (0xC0); //set cursor at begining of bottom line
4ba: 60 ec ldi r22, 0xC0 ; 192
4bc: 80 e0 ldi r24, 0x00 ; 0
4be: 5d d0 rcall .+186 ; 0x57a
lcdata ('1'); //write "19-"
4c0: 61 e3 ldi r22, 0x31 ; 49
4c2: 81 e0 ldi r24, 0x01 ; 1
4c4: 5a d0 rcall .+180 ; 0x57a
lcdata ('9');
4c6: 69 e3 ldi r22, 0x39 ; 57
4c8: 81 e0 ldi r24, 0x01 ; 1
4ca: 57 d0 rcall .+174 ; 0x57a
lcdata ('-');
4cc: 6d e2 ldi r22, 0x2D ; 45
4ce: 81 e0 ldi r24, 0x01 ; 1
4d0: 54 d0 rcall .+168 ; 0x57a
lcdpos = 0; //Reset line position
4d2: 10 92 72 00 sts 0x0072, r1
eref = eepos; //set end of line 18 at end of eeprom
4d6: 80 91 64 00 lds r24, 0x0064
4da: 80 93 78 00 sts 0x0078, r24
esrl = 0;
4de: 10 92 60 00 sts 0x0060, r1
lcdln = 19; //reset line numbner
4e2: 83 e1 ldi r24, 0x13 ; 19
4e4: 80 93 62 00 sts 0x0062, r24
}
lcdata (ldata); //Write digit to LCD
4e8: 6c 2f mov r22, r28
4ea: 81 e0 ldi r24, 0x01 ; 1
4ec: 46 d0 rcall .+140 ; 0x57a
lcdtemp[lcdpos] = ldata; //Store digit in ram
4ee: 80 91 72 00 lds r24, 0x0072
4f2: e8 2f mov r30, r24
4f4: ff 27 eor r31, r31
4f6: eb 59 subi r30, 0x9B ; 155
4f8: ff 4f sbci r31, 0xFF ; 255
4fa: c0 83 st Z, r28
lcdpos++;
4fc: 8f 5f subi r24, 0xFF ; 255
4fe: 80 93 72 00 sts 0x0072, r24
}
502: cf 91 pop r28
504: 08 95 ret
00000506 <line19>:
void line19(void) //restores Ln 19 before the scroll
{
lcdata ('1'); //Write "19-
506: 61 e3 ldi r22, 0x31 ; 49
508: 81 e0 ldi r24, 0x01 ; 1
50a: 37 d0 rcall .+110 ; 0x57a
lcdata ('9');
50c: 69 e3 ldi r22, 0x39 ; 57
50e: 81 e0 ldi r24, 0x01 ; 1
510: 34 d0 rcall .+104 ; 0x57a
lcdata ('-');
512: 6d e2 ldi r22, 0x2D ; 45
514: 81 e0 ldi r24, 0x01 ; 1
516: 31 d0 rcall .+98 ; 0x57a
for (a=0;a<lcdpos;a++) { //loop until all digits have been restored
518: 10 92 79 00 sts 0x0079, r1
51c: 80 91 72 00 lds r24, 0x0072
520: 88 23 and r24, r24
522: 91 f0 breq .+36 ; 0x548
lcdata (lcdtemp[a]); //restore LCD Line 19 from ram
524: 80 91 79 00 lds r24, 0x0079
528: e8 2f mov r30, r24
52a: ff 27 eor r31, r31
52c: eb 59 subi r30, 0x9B ; 155
52e: ff 4f sbci r31, 0xFF ; 255
530: 60 81 ld r22, Z
532: 81 e0 ldi r24, 0x01 ; 1
534: 22 d0 rcall .+68 ; 0x57a
536: 80 91 79 00 lds r24, 0x0079
53a: 8f 5f subi r24, 0xFF ; 255
53c: 80 93 79 00 sts 0x0079, r24
540: 90 91 72 00 lds r25, 0x0072
544: 89 17 cp r24, r25
546: 70 f3 brcs .-36 ; 0x524
}
}
548: 08 95 ret
0000054a <fltr>:
unsigned char fltr(char fdata) //Filters digits for 10,#, and *
{
if(fdata==0x0F) return (0x20); //correct for blank cell
54a: 8f 30 cpi r24, 0x0F ; 15
54c: 19 f4 brne .+6 ; 0x554
54e: 80 e2 ldi r24, 0x20 ; 32
550: 90 e0 ldi r25, 0x00 ; 0
if(fdata==0x0A) return (0x30); //correct for Zero from decoder
if(fdata==0x0B) return (0x2A); //correct for * from decoder
if(fdata==0x0C) return (0x23); //correct for # from decoder
else return (fdata|0x30);
}
552: 08 95 ret
554: 8a 30 cpi r24, 0x0A ; 10
556: 19 f4 brne .+6 ; 0x55e
558: 80 e3 ldi r24, 0x30 ; 48
55a: 90 e0 ldi r25, 0x00 ; 0
55c: 08 95 ret
55e: 8b 30 cpi r24, 0x0B ; 11
560: 19 f4 brne .+6 ; 0x568
562: 8a e2 ldi r24, 0x2A ; 42
564: 90 e0 ldi r25, 0x00 ; 0
566: 08 95 ret
568: 8c 30 cpi r24, 0x0C ; 12
56a: 19 f4 brne .+6 ; 0x572
56c: 83 e2 ldi r24, 0x23 ; 35
56e: 90 e0 ldi r25, 0x00 ; 0
570: 08 95 ret
572: 80 63 ori r24, 0x30 ; 48
574: 99 27 eor r25, r25
576: 08 95 ret
578: 08 95 ret
0000057a <lcdwrt>:
void lcdwrt (char dt, char data) // Writes Byte to LCD dt=0 Control dt=1 data
{
57a: cf 93 push r28
57c: df 93 push r29
57e: cd b7 in r28, 0x3d ; 61
580: de b7 in r29, 0x3e ; 62
582: 22 97 sbiw r28, 0x02 ; 2
584: 0f b6 in r0, 0x3f ; 63
586: f8 94 cli
588: de bf out 0x3e, r29 ; 62
58a: 0f be out 0x3f, r0 ; 63
58c: cd bf out 0x3d, r28 ; 61
58e: 98 2f mov r25, r24
volatile unsigned int x;
DDRB = 0xFF; //Set PORTB as Output
590: 8f ef ldi r24, 0xFF ; 255
592: 87 bb out 0x17, r24 ; 23
if (dt == 1) sbi(PORTD,5); //Data PD5=1 or Control PD5=0
594: 91 30 cpi r25, 0x01 ; 1
596: 11 f4 brne .+4 ; 0x59c
598: 95 9a sbi 0x12, 5 ; 18
59a: 01 c0 rjmp .+2 ; 0x59e
else cbi(PORTD,5);
59c: 95 98 cbi 0x12, 5 ; 18
PORTB = data; //Send data byte (PORTB)
59e: 68 bb out 0x18, r22 ; 24
for (x=0;x < 50;x++); //Delay 250uS
5a0: 19 82 std Y+1, r1 ; 0x01
5a2: 1a 82 std Y+2, r1 ; 0x02
5a4: 89 81 ldd r24, Y+1 ; 0x01
5a6: 9a 81 ldd r25, Y+2 ; 0x02
5a8: c2 97 sbiw r24, 0x32 ; 50
5aa: 48 f4 brcc .+18 ; 0x5be
5ac: 89 81 ldd r24, Y+1 ; 0x01
5ae: 9a 81 ldd r25, Y+2 ; 0x02
5b0: 01 96 adiw r24, 0x01 ; 1
5b2: 89 83 std Y+1, r24 ; 0x01
5b4: 9a 83 std Y+2, r25 ; 0x02
5b6: 89 81 ldd r24, Y+1 ; 0x01
5b8: 9a 81 ldd r25, Y+2 ; 0x02
5ba: c2 97 sbiw r24, 0x32 ; 50
5bc: b8 f3 brcs .-18 ; 0x5ac
sbi(PORTD,6); //Set Strobe
5be: 96 9a sbi 0x12, 6 ; 18
for (x=0;x < 50;x++); //Delay 250uS
5c0: 19 82 std Y+1, r1 ; 0x01
5c2: 1a 82 std Y+2, r1 ; 0x02
5c4: 89 81 ldd r24, Y+1 ; 0x01
5c6: 9a 81 ldd r25, Y+2 ; 0x02
5c8: c2 97 sbiw r24, 0x32 ; 50
5ca: 48 f4 brcc .+18 ; 0x5de
5cc: 89 81 ldd r24, Y+1 ; 0x01
5ce: 9a 81 ldd r25, Y+2 ; 0x02
5d0: 01 96 adiw r24, 0x01 ; 1
5d2: 89 83 std Y+1, r24 ; 0x01
5d4: 9a 83 std Y+2, r25 ; 0x02
5d6: 89 81 ldd r24, Y+1 ; 0x01
5d8: 9a 81 ldd r25, Y+2 ; 0x02
5da: c2 97 sbiw r24, 0x32 ; 50
5dc: b8 f3 brcs .-18 ; 0x5cc
cbi(PORTD,6); //Clear Strobe
5de: 96 98 cbi 0x12, 6 ; 18
for (x=0;x < 200;x++); //Delay 1000uS
5e0: 19 82 std Y+1, r1 ; 0x01
5e2: 1a 82 std Y+2, r1 ; 0x02
5e4: 89 81 ldd r24, Y+1 ; 0x01
5e6: 9a 81 ldd r25, Y+2 ; 0x02
5e8: 88 3c cpi r24, 0xC8 ; 200
5ea: 91 05 cpc r25, r1
5ec: 50 f4 brcc .+20 ; 0x602
5ee: 89 81 ldd r24, Y+1 ; 0x01
5f0: 9a 81 ldd r25, Y+2 ; 0x02
5f2: 01 96 adiw r24, 0x01 ; 1
5f4: 89 83 std Y+1, r24 ; 0x01
5f6: 9a 83 std Y+2, r25 ; 0x02
5f8: 89 81 ldd r24, Y+1 ; 0x01
5fa: 9a 81 ldd r25, Y+2 ; 0x02
5fc: 88 3c cpi r24, 0xC8 ; 200
5fe: 91 05 cpc r25, r1
600: b0 f3 brcs .-20 ; 0x5ee
DDRB = 0x00; //Set PORTB as Input
602: 17 ba out 0x17, r1 ; 23
}
604: 22 96 adiw r28, 0x02 ; 2
606: 0f b6 in r0, 0x3f ; 63
608: f8 94 cli
60a: de bf out 0x3e, r29 ; 62
60c: 0f be out 0x3f, r0 ; 63
60e: cd bf out 0x3d, r28 ; 61
610: df 91 pop r29
612: cf 91 pop r28
614: 08 95 ret
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -