Regeln | Neue Beiträge | Thema RSS | Suche | Registrieren | Log-in

LCD-Schnittstelle mit einem PIC - Tutorial --



Post new topic Reply to topic EDAboard.com Foren-Übersicht -> Microcontrollers -> LCD-Anbindung mit einem PIC - Tutorial --
Arabische Fassung Bulgarische Version Katalanischen Version Tschechische Version Dänische Fassung Deutsch Version Griechische Fassung Englisch Version Spanische Version Finnische Fassung Französische Version Hindi-Version Kroatische Version Indonesisch-Version Italienische Version Hebräisch-Version Japanische Version German Version Litauische Fassung Lettische Fassung Niederländische Fassung Norwegische Version Polnische Fassung Portugiesische Version Romanian version Russische Version Slowakische Fassung Slowenisch-Version Serbisch-Version Schwedische Version Tagalog Version Ukrainisch Version Vietnamesisch-Version Chinesische Version
Autor Nachricht
TekUT



Joined: 17 Jun 2008
Beiträge: 413
Geholfen: 23


Post 26 Sep 2008 17:15 LCD-Anbindung mit einem PIC - Tutorial --

Hi all,
Ich sehen, dass viele Menschen Schwierigkeiten haben, über die LCD-Schnittstelle, ich habe gerade Fertig stellen, um eine Bibliothek, um all die Dinge benötigt, um ein HD44780 LCD-Display-Controller auf der Grundlage mit einem PIC. Mein Programm ist in der Lage, mit 4 Bit-Schnittstelle (in der Reihenfolge zu speichern, 4-polig der Mikrocontroller) und ist auch nicht auf einige PIC, nur die Pin-Zuweisung auf der Header-Datei und alles ist getan.

Dieses Design wurde ursprünglich mit Hi-Tech für eine PIC16F870 (20 MHz Takt), aber es gibt keine Einschränkung, über welche Art von PIC können Sie einfach ändern Sie den PIN-Zuweisung, wie ich später zeigen.

Es gibt nur drei Dateien:

- Lcddisp.c (Haupt-Datei - nur um zu zeigen, wie die Bibliothek zu benutzen)
- LCD-lib.c (der Code, um die LCD)
- LCD-lib.h (Pin-Zuweisung)

Beginnend mit der Datei haben wir zunächst die Einbeziehung der Header-Datei über die Mikrocontroller Pin Zuweisung:

Code:

# include <pic.h>
# include <stdio.h>

# include "lcd-lib.h" / / Pin-Definition für die LCD -


file: Öffnen Sie den LCD-lib.h-Datei, hier unten finden Sie die PIN-Erklärung für die Hi-Tech-Compiler, wenn Sie eine andere Art von Compiler einfach ändern Sie den PIN-Syntax, nur ein, was, nicht die Pin-Namen ( RS, RW, EN, DB4, DB5, DB6, DB7), denn diese werden nach der LCD-Routine in der LCD-lib.c Datei:

Code:

/ / -------------------------------------------
/ / LCD-Typ
/ / -------------------------------------------
# define MAXPOSX 16
# define MAXPOSY 2

/ / -------------------------------------------
/ / Definition des LCD-uP Pin (Hi-Tech-Compiler)
/ / -------------------------------------------
static volatile Bit RS @ (unsigned) & PORTA * 8 0;
static volatile Bit RW @ (unsigned) & PORTA * 8 1;
static volatile Bit @ DE (unsigned) & PORTA * 8 2;
static volatile Bit DB4 @ (unsigned) & PORTB * 8 1;
static volatile Bit DB5 @ (unsigned) & PORTB * 8 2;
static volatile Bit DB6 @ (unsigned) & PORTB * 8 3;
static volatile Bit DB7 @ (unsigned) & PORTB * 8 4;


Jetzt hast Du diese Funktionen zur Verfügung:

Code:

void GenDelay (int); / / Generic Verzögerung
void LongDelay (lang); / / Long generischen Verzögerung
void LCDInit (void); / / LCD Init-Routine
void ClearDisplay (void); / / Deaktivieren Sie das LCD-Display
void CursorAtHome (void); / / Set Cursor-Position zu Hause
void Printxy (unsigned char, unsigned char, unsigned char); / / Print ein Zeichen


Wenn Sie einen anderen Compiler oder andere Frequenz Uhr einfach die Verzögerung Routine, um Ihren Bedarf, nur darauf zu achten, über den Zeitpunkt, dass ich geschrieben habe als Bemerkung in den Quellcode.

Über das Display gibt es keine Einschränkungen, das Einzige, was sich auf die Steuerung muss es sich um ein HD44780 oder kompatibel.
Ich habe auch ein Bild an der Verbindung (die 2kOhm Trimmer auf der rechten Seite der Anschluss wird benutzt, um den LCD-Kontrast), trotzdem hier die Anzeige Anschluss Signal Name:

Pin 1: Vss (0 V)
Pin 2: VCC ( 5 V)
Pin 3: Vee (Kontrast, nur mit einem einfachen 2kOhm Trimmer von Vcc zu Vss, Cursor auf Vee)
Pin 4: RS
Pin 5: R / W
Pin 6: E
Pin 7: DB0 (nicht für 4-Bit-Schnittstelle)
Pin 8: DB1 (nicht für 4-Bit-Schnittstelle)
Pin 9: DB2 (nicht für 4-Bit-Schnittstelle)
Pin 10: DB3 (nicht für 4-Bit-Schnittstelle)
Pin 11: DB4 (für 4-Bit-Schnittstelle)
Pin 12: DB5 (für 4-Bit-Schnittstelle)
Pin 13: DB6 (für 4-Bit-Schnittstelle)
Pin 14: DB7 (für 4-Bit-Schnittstelle)
Pin 15: LED-Anode ( )
Pin 16: Led katode (-)

Ich habe nicht für die LED-Beleuchtung zurück, wenn Sie so wollen, es zu benutzen Schließen Sie den Pin 15 durch ein 680Ohm Widerstand gegen 5 V und der Pin 16 des 0V.
Hoffe, kann dies dazu beitragen, ein wenig.

Tschüss
Pow


Es tut uns leid, aber Sie müssen zum Login, um die Anlage

Zurück zum Anfang
View user's profile
xylynn



Beitritt: 26. Nov 2007
Beiträge: 48


Post 28 Sep 2008 5:53 Re: LCD-Anbindung mit einem PIC - Tutorial --

Könnte ich die assmebly Quellcode für diesen?

Mit besten Grüßen
Zurück zum Anfang
View user's profile
Google
AdSense





Post 28 Sep 2008 5:53-Anzeigen



Zurück zum Anfang
TekUT



Joined: 17 Jun 2008
Beiträge: 413
Geholfen: 23


Post 29 Sep 2008 9:38 Re: LCD-Anbindung mit einem PIC - Tutorial --

file in assembly. Ich habe es in C-Code, aber ich denke, das ist sehr, sehr einfach zu übersetzen die Routine in der LCD-lib.c Datei in der Montage. Lassen Sie es mich wissen, wenn Sie Hilfe benötigen, heute habe ich keine Zeit mehr, aber in den nächsten Tagen kann ich versuchen, die Übersetzung zu ASM.
Um Ihnen zu helfen, in einer Art und Weise habe ich schnell an die ASM-Listing, das ist die Erstellung Ergebnis dann können Sie die Änderung in der einfachen Art und Weise.

Code:

--- C: \ Temp \ PIC_LCD \ LCD-lib.c ----------------------------------- -------------------------------
1: void GenDelay (int); / / Funzione pro ritrado generico (<1 secondo)
2: void LongDelay (lang); / / Funzione pro ritrado generico (> 1 secondo)
3: void LCDInit (void);
4: void ClearDisplay (void); / / Absage il contenuto dedl Anzeige
5: void CursorAtHome (void); / / Posiziona il cursore nella posizione di Home
6: void Printxy (unsigned char, unsigned char, unsigned char); / / Visualizza un CARATTERE sul Anzeige
7:
8: / / ---------------------------------------------- -------------------------
9: / / Zweck: Generic Verzögerung (US-Reihe)
10: / / Autor: Powermos
11: / / creazione Date: 25/09/2008
12: / / ---------------------------------------------- -------------------------
13:
14: void GenDelay (int DelayPar)
15: (
16: Loop1:
17: asm ( "clrwdt");
4D4 0064 CLRWDT
18: if (DelayPar> = 0)
4D5 1283 BCF 0x3, 0x5
4D6 1303 BCF 0x3, 0x6
4D7 1BA9 BTFSC 0x29, 0x7
19: (
20: DelayPar -;
4D9 08A8 MOVF 0x28, F
4DA 1903 BTFSC 0x3, 0x2
4DB 03A9 DECF 0x29, F
4DC 03A8 DECF 0x28, F
21: goto Loop1;
4DD 2CD4 GOTO 0x4d4
22:)
23: return;
24:)
4D8 0008 RETURN
25:
26: / / ---------------------------------------------- -------------------------
27: / / Zweck: Generic Verzögerung (ms-Bereich)
28: / / Autor: Powermos
29: / / creazione Date: 25/09/2008
30: / / ---------------------------------------------- -------------------------
31:
32: void LongDelay (lange DelayExt)
33: (
50F 3020 MOVLW 0x20
34: lange DelayInt = 800;
510 0183 CLRF 0x3
511 00A7 MOVWF 0x27
512 3003 MOVLW 0x3
513 00A8 MOVWF 0x28
514 3000 MOVLW 0
515 01A9 CLRF 0x29
516 01AA CLRF 0x2A
35:
36: LoopExt:
37: if (DelayExt> = 0)
517 2D45 GOTO 0x545
545 1BA6 BTFSC 0x26, 0x7
547 2D2A GOTO 0x52a
38: (
39: LoopInt:
40: asm ( "clrwdt");
52A 0064 CLRWDT
41: if (DelayInt> = 0)
52B 1FAA BTFSS 0x2A, 0x7
52C 2D18 GOTO 0x518
42: (
43: DelayInt -;
518 3001 MOVLW 0x1
519 00F0 MOVWF 0x70
51A 01F1 CLRF 0x71
51B 01F2 CLRF 0x72
51C 01F3 CLRF 0x73
51D 02A7 SUBWF 0x27, F
51E 0871 MOVF 0x71 W
51F 1C03 BTFSS 0x3, 0
520 0F71 INCFSZ 0x71 W
521 02A8 SUBWF 0x28, F
522 0872 MOVF 0x72 W
523 1C03 BTFSS 0x3, 0
524 0F72 INCFSZ 0x72 W
525 02A9 SUBWF 0x29, F
526 0873 MOVF 0x73 W
527 1C03 BTFSS 0x3, 0
528 0A73 INCF 0x73 W
529 02AA SUBWF 0x2A, F
44: goto LoopInt;
45:)
46: DelayInt = 800;
52D 3020 MOVLW 0x20
52E 00A7 MOVWF 0x27
52f 3003 MOVLW 0x3
530 00A8 MOVWF 0x28
531 01A9 CLRF 0x29
532 01AA CLRF 0x2A
47: DelayExt -;
533 3001 MOVLW 0x1
534 00F0 MOVWF 0x70
535 01F1 CLRF 0x71
536 01F2 CLRF 0x72
537 01F3 CLRF 0x73
538 02A3 SUBWF 0x23, F
539 0871 MOVF 0x71 W
53A 1C03 BTFSS 0x3, 0
53B 0F71 INCFSZ 0x71 W
53C 02A4 SUBWF 0x24, F
53D 0872 MOVF 0x72 W
53E 1C03 BTFSS 0x3, 0
53F 0F72 INCFSZ 0x72 W
540 02A5 SUBWF 0x25, F
541 0873 MOVF 0x73 W
542 1C03 BTFSS 0x3, 0
543 0A73 INCF 0x73 W
544 02A6 SUBWF 0x26, F
48: goto LoopExt;
49:)
50: return;
51:)
546 0008 RETURN
52:
53: / / ---------------------------------------------- -------------------------
54: / / Zweck: LCD-Initialisierung mit 4-Bit-Schnittstelle
55: / / Autor: Powermos
56: / / creazione Date: 25/09/2008
57: / / ---------------------------------------------- -------------------------
58: void LCDInit (void)
59: (
639 0183 CLRF 0x3
60: char i;
61:
62: / / Code 0x03
63: RS = 0;
63A 1005 BCF 0x5, 0
64: RW = 0;
63B 1085 BCF 0x5, 0x1
65: DB4 = 1;
63C 1486 BSF 0x6, 0x1
66: DB5 = 1;
63D 1506 BSF 0x6, 0x2
67: DB6 = 0;
63E 1186 BCF 0x6, 0x3
68: DB7 = 0;
63F 1206 BCF 0x6, 0x4
69: DE = 1;
640 1505 BSF 0x5, 0x2
70: asm ( "nop");
641 0000 NOP
71: asm ( "nop");
642 0000 NOP
72: asm ( "nop");
643 0000 NOP
73: asm ( "nop");
644 0000 NOP
74: asm ( "nop");
645 0000 NOP
75: EN = 0;
646 1105 BCF 0x5, 0x2
76: for (i = 0; i <8; i )
647 01A3 CLRF 0x23
64C 0AA3 INCF 0x23, F
64D 3008 MOVLW 0x8
64E 0223 SUBWF 0x23 W
64F 1C03 BTFSS 0x3, 0
650 2E48 GOTO 0x648
77: (
78: GenDelay (255); / / Zeitverzögerung 5 ms Minimum
648 30ff MOVLW 0xff
649 00A8 MOVWF 0x28
64A 01A9 CLRF 0x29
64B 24D4 CALL 0x4d4
79:)
80:
81: / / Code 0x03
82: RS = 0;
651 1005 BCF 0x5, 0
83: RW = 0;
652 1085 BCF 0x5, 0x1
84: DB4 = 1;
653 1486 BSF 0x6, 0x1
85: DB5 = 1;
654 1506 BSF 0x6, 0x2
86: DB6 = 0;
655 1186 BCF 0x6, 0x3
87: DB7 = 0;
656 1206 BCF 0x6, 0x4
88: DE = 1;
657 1505 BSF 0x5, 0x2
89: asm ( "nop");
658 0000 NOP
90: asm ( "nop");
659 0000 NOP
91: asm ( "nop");
65A 0000 NOP
92: asm ( "nop");
65B 0000 NOP
93: asm ( "nop");
65C 0000 NOP
94: EN = 0;
65D 1105 BCF 0x5, 0x2
95: GenDelay (60); / / Zeit dalay 160 US Minimum
65E 303C MOVLW 0x3c
65F 00A8 MOVWF 0x28
660 01A9 CLRF 0x29
661 24D4 CALL 0x4d4
96:
97: / / Code 0x03
98: RS = 0;
662 1005 BCF 0x5, 0
99: RW = 0;
663 1085 BCF 0x5, 0x1
100: DB4 = 1;
664 1486 BSF 0x6, 0x1
101: DB5 = 1;
665 1506 BSF 0x6, 0x2
102: DB6 = 0;
666 1186 BCF 0x6, 0x3
103: DB7 = 0;
667 1206 BCF 0x6, 0x4
104: DE = 1;
668 1505 BSF 0x5, 0x2
105: asm ( "nop");
669 0000 NOP
106: asm ( "nop");
66A 0000 NOP
107: asm ( "nop");
66B 0000 NOP
108: asm ( "nop");
66C 0000 NOP
109: asm ( "nop");
66d 0000 NOP
110: EN = 0;
66E 1105 BCF 0x5, 0x2
111: GenDelay (60); / / Zeit dalay 160 US Minimum
66F 303C MOVLW 0x3c
670 00A8 MOVWF 0x28
671 01A9 CLRF 0x29
672 24D4 CALL 0x4d4
112:
113: / / Funktion Set (Code 0x02)
114: RS = 0;
673 1005 BCF 0x5, 0
115: RW = 0;
674 1085 BCF 0x5, 0x1
116: DB4 = 0;
675 1086 BCF 0x6, 0x1
117: DB5 = 1;
676 1506 BSF 0x6, 0x2
118: DB6 = 0;
677 1186 BCF 0x6, 0x3
119: DB7 = 0;
678 1206 BCF 0x6, 0x4
120: DE = 1;
679 1505 BSF 0x5, 0x2
121: asm ( "nop");
67A 0000 NOP
122: asm ( "nop");
67B 0000 NOP
123: asm ( "nop");
67C 0000 NOP
124: asm ( "nop");
67D 0000 NOP
125: asm ( "nop");
67E 0000 NOP
126: EN = 0;
67f 1105 BCF 0x5, 0x2
127: GenDelay (20); / / Warten Sie uns für 59 (Minimum gefordert uns von 37)
680 3014 MOVLW 0x14
681 00A8 MOVWF 0x28
682 01A9 CLRF 0x29
683 24D4 CALL 0x4d4
128:
129: / / Funktion Set (D, N, F)
130: RS = 0;
684 1005 BCF 0x5, 0
131: RW = 0;
685 1085 BCF 0x5, 0x1
132: DB4 = 0; / / D = 0 die 4-Bit-Schnittstelle
686 1086 BCF 0x6, 0x1
133: DB5 = 1;
687 1506 BSF 0x6, 0x2
134: DB6 = 0;
688 1186 BCF 0x6, 0x3
135: DB7 = 0;
689 1206 BCF 0x6, 0x4
136: DE = 1;
68A 1505 BSF 0x5, 0x2
137: asm ( "nop");
68B 0000 NOP
138: asm ( "nop");
68C 0000 NOP
139: asm ( "nop");
68D 0000 NOP
140: asm ( "nop");
68E 0000 NOP
141: asm ( "nop");
68F 0000 NOP
142: EN = 0;
690 1105 BCF 0x5, 0x2
143: DB4 = 0;
691 1086 BCF 0x6, 0x1
144: DB5 = 0;
692 1106 BCF 0x6, 0x2
145: DB6 = 0; / / F = 0 font
693 1186 BCF 0x6, 0x3
146: DB7 = 1; / / N = 1 Display 2 linee
694 1606 BSF 0x6, 0x4
147: DE = 1;
695 1505 BSF 0x5, 0x2
148: asm ( "nop");
696 0000 NOP
149: asm ( "nop");
697 0000 NOP
150: asm ( "nop");
698 0000 NOP
151: asm ( "nop");
699 0000 NOP
152: asm ( "nop");
69A 0000 NOP
153: EN = 0;
69B 1105 BCF 0x5, 0x2
154: GenDelay (20); / / Warten Sie uns für 59 (Minimum gefordert uns von 37)
69C 3014 MOVLW 0x14
69D 00A8 MOVWF 0x28
69E 01A9 CLRF 0x29
69F 24D4 CALL 0x4d4
155:
156: / / Display aus
157: RS = 0;
6A0 1005 BCF 0x5, 0
158: RW = 0;
6A1 1085 BCF 0x5, 0x1
159: DB4 = 0;
6A2 1086 BCF 0x6, 0x1
160: DB5 = 0;
6A3 1106 BCF 0x6, 0x2
161: DB6 = 0;
6A4 1186 BCF 0x6, 0x3
162: DB7 = 0;
6A5 1206 BCF 0x6, 0x4
163: DE = 1;
6A6 1505 BSF 0x5, 0x2
164: asm ( "nop");
6A7 0000 NOP
165: asm ( "nop");
6A8 0000 NOP
166: asm ( "nop");
6A9 0000 NOP
167: asm ( "nop");
6AA 0000 NOP
168: asm ( "nop");
6AB 0000 NOP
169: EN = 0;
6AC 1105 BCF 0x5, 0x2
170: DB4 = 0;
6AD 1086 BCF 0x6, 0x1
171: DB5 = 0;
6AE 1106 BCF 0x6, 0x2
172: DB6 = 0;
6AF 1186 BCF 0x6, 0x3
173: DB7 = 1;
6B0 1606 BSF 0x6, 0x4
174: DE = 1;
6B1 1505 BSF 0x5, 0x2
175: asm ( "nop");
6B2 0000 NOP
176: asm ( "nop");
6B3 0000 NOP
177: asm ( "nop");
6B4 0000 NOP
178: asm ( "nop");
6B5 0000 NOP
179: asm ( "nop");
6B6 0000 NOP
180: EN = 0;
6B7 1105 BCF 0x5, 0x2
181: GenDelay (20); / / Warten Sie uns für 59 (Minimum gefordert uns von 37)
6B8 3014 MOVLW 0x14
6B9 00A8 MOVWF 0x28
6BA 01A9 CLRF 0x29
6BB 24D4 CALL 0x4d4
182:
183: / / Display ON
184: RS = 0;
6BC 1005 BCF 0x5, 0
185: RW = 0;
6BD 1085 BCF 0x5, 0x1
186: DB4 = 0;
6BE 1086 BCF 0x6, 0x1
187: DB5 = 0;
6BF 1106 BCF 0x6, 0x2
188: DB6 = 0;
6C0 1186 BCF 0x6, 0x3
189: DB7 = 0;
6C1 1206 BCF 0x6, 0x4
190: DE = 1;
6C2 1505 BSF 0x5, 0x2
191: asm ( "nop");
6C3 0000 NOP
192: asm ( "nop");
6C4 0000 NOP
193: asm ( "nop");
6C5 0000 NOP
194: asm ( "nop");
6C6 0000 NOP
195: asm ( "nop");
6C7 0000 NOP
196: EN = 0;
6C8 1105 BCF 0x5, 0x2
197: DB4 = 0; / / B (Cursor blinkt ON = 1, OFF = 0)
6C9 1086 BCF 0x6, 0x1
198: DB5 = 0; / / C (Cursor auf = 1, OFF = 0)
6CA 1106 BCF 0x6, 0x2
199: DB6 = 1; / / D (Display ON = 1, OFF = 0)
6CB 1586 BSF 0x6, 0x3
200: DB7 = 1;
6CC 1606 BSF 0x6, 0x4
201: DE = 1;
6CD 1505 BSF 0x5, 0x2
202: asm ( "nop");
6CE 0000 NOP
203: asm ( "nop");
6CF 0000 NOP
204: asm ( "nop");
6D0 0000 NOP
205: asm ( "nop");
6D1 0000 NOP
206: asm ( "nop");
6D2 0000 NOP
207: EN = 0;
6D3 1105 BCF 0x5, 0x2
208: GenDelay (20); / / Warten Sie uns für 59 (Minimum gefordert uns von 37)
6D4 3014 MOVLW 0x14
6D5 00A8 MOVWF 0x28
6D6 01A9 CLRF 0x29
6D7 24D4 CALL 0x4d4
209:
210: / / Entry-Modus eingestellt
211: RS = 0;
6D8 1005 BCF 0x5, 0
212: RW = 0;
6D9 1085 BCF 0x5, 0x1
213: DB4 = 0;
6DA 1086 BCF 0x6, 0x1
214: DB5 = 0;
6dB 1106 BCF 0x6, 0x2
215: DB6 = 0;
6DC 1186 BCF 0x6, 0x3
216: DB7 = 0;
6DD 1206 BCF 0x6, 0x4
217: DE = 1;
6DE 1505 BSF 0x5, 0x2
218: asm ( "nop");
6DF 0000 NOP
219: asm ( "nop");
6E0 0000 NOP
220: asm ( "nop");
6E1 0000 NOP
221: asm ( "nop");
6E2 0000 NOP
222: asm ( "nop");
6E3 0000 NOP
223: EN = 0;
6E4 1105 BCF 0x5, 0x2
224: DB4 = 0; / / S = 0
6E5 1086 BCF 0x6, 0x1
225: DB5 = 1; / / ID = 1
6E6 1506 BSF 0x6, 0x2
226: DB6 = 1;
6E7 1586 BSF 0x6, 0x3
227: DB7 = 0;
6E8 1206 BCF 0x6, 0x4
228: DE = 1;
6E9 1505 BSF 0x5, 0x2
229: asm ( "nop");
6EA 0000 NOP
230: asm ( "nop");
6EB 0000 NOP
231: asm ( "nop");
6EC 0000 NOP
232: asm ( "nop");
6ED 0000 NOP
233: asm ( "nop");
6EE 0000 NOP
234: EN = 0;
6EF 1105 BCF 0x5, 0x2
235: GenDelay (20); / / Warten Sie uns für 59 (Minimum gefordert uns von 37)
6F0 3014 MOVLW 0x14
6F1 00A8 MOVWF 0x28
6F2 01A9 CLRF 0x29
6F3 24D4 CALL 0x4d4
236:
237: ClearDisplay ();
6F4 2CEB GOTO 0x4eb
238:
239: return;
240:)
241:
242: / / ---------------------------------------------- -------------------------
243: / / Zweck: Absage il contenuto dedl Anzeige
244: / / Autor: Powermos
245: / / creazione Date: 25/09/2008
246: / / ---------------------------------------------- -------------------------
247: void ClearDisplay (void)
248: (
4EB 0183 CLRF 0x3
249: char i;
250:
251: / / Clear Display
252: RS = 0;
4EC 1005 BCF 0x5, 0
253: RW = 0;
4ED 1085 BCF 0x5, 0x1
254: DB4 = 0;
4EE 1086 BCF 0x6, 0x1
255: DB5 = 0;
4EF 1106 BCF 0x6, 0x2
256: DB6 = 0;
4F0 1186 BCF 0x6, 0x3
257: DB7 = 0;
4F1 1206 BCF 0x6, 0x4
258: DE = 1;
4F2 1505 BSF 0x5, 0x2
259: asm ( "nop");
4F3 0000 NOP
260: asm ( "nop");
4F4 0000 NOP
261: asm ( "nop");
4F5 0000 NOP
262: asm ( "nop");
4F6 0000 NOP
263: asm ( "nop");
4F7 0000 NOP
264: EN = 0;
4F8 1105 BCF 0x5, 0x2
265: DB4 = 1;
4F9 1486 BSF 0x6, 0x1
266: DB5 = 0;
4FA 1106 BCF 0x6, 0x2
267: DB6 = 0;
4FB 1186 BCF 0x6, 0x3
268: DB7 = 0;
4FC 1206 BCF 0x6, 0x4
269: DE = 1;
4FD 1505 BSF 0x5, 0x2
270: asm ( "nop");
4FE 0000 NOP
271: asm ( "nop");
4FF 0000 NOP
272: asm ( "nop");
500 0000 NOP
273: asm ( "nop");
501 0000 NOP
274: asm ( "nop");
502 0000 NOP
275: EN = 0;
503 1105 BCF 0x5, 0x2
276: for (i = 0; i <8; i )
504 01A4 CLRF 0x24
509 0AA4 INCF 0x24, F
50A 3008 MOVLW 0x8
50B 0224 SUBWF 0x24 W
50C 1803 BTFSC 0x3, 0
50D 0008 RETURN
50E 2D05 GOTO 0x505
277: (
278: GenDelay (255); / / Wait for 5 ms min
505 30ff MOVLW 0xff
279:)
280:
281: return;
282:)
283:
284: / / ---------------------------------------------- -------------------------
285: / / Zweck: die Cursor-Position zu Hause
286: / / Autor: Powermos
287: / / creazione Date: 25/09/2008
288: / / ---------------------------------------------- -------------------------
289: void CursorAtHome (void)
290: (
548 0183 CLRF 0x3
291: unsigned char Position = 0;
549 01A3 CLRF 0x23
292:
293: Position = Position | 0b10000000; / / Set DB7 bis 1
54A 17A3 BSF 0x23, 0x7
294: RS = 0;
54B 1005 BCF 0x5, 0
295: RW = 0;
54C 1085 BCF 0x5, 0x1
296: DB4 = ((Position & 0b00010000) == 16)? 1: 0;
54D 1E23 BTFSS 0x23, 0x4
54E 2D51 GOTO 0x551
54f 1486 BSF 0x6, 0x1
550 2D52 GOTO 0x552
551 1086 BCF 0x6, 0x1
297: DB5 = ((Position & 0b00100000) == 32)? 1: 0;
552 1283 BCF 0x3, 0x5
553 1303 BCF 0x3, 0x6
554 1EA3 BTFSS 0x23, 0x5
555 2D58 GOTO 0x558
556 1506 BSF 0x6, 0x2
557 2D59 GOTO 0x559
558 1106 BCF 0x6, 0x2
298: DB6 = ((Position & 0b01000000) == 64)? 1: 0;
559 1F23 BTFSS 0x23, 0x6
55A 2D5D GOTO 0x55d
55B 1586 BSF 0x6, 0x3
55C 2D5E GOTO 0x55e
55D 1186 BCF 0x6, 0x3
299: DB7 = ((Position & 0b10000000) == 128)? 1: 0;
55E 1FA3 BTFSS 0x23, 0x7
55F 2D62 GOTO 0x562
560 1606 BSF 0x6, 0x4
561 2D63 GOTO 0x563
562 1206 BCF 0x6, 0x4
300: DE = 1;
563 1505 BSF 0x5, 0x2
301: asm ( "nop");
564 0000 NOP
302: asm ( "nop");
565 0000 NOP
303: asm ( "nop");
566 0000 NOP
304: asm ( "nop");
567 0000 NOP
305: asm ( "nop");
568 0000 NOP
306: EN = 0;
569 1105 BCF 0x5, 0x2
307: DB4 = ((Position & 0b00000001) == 1)? 1: 0;
56A 1C23 BTFSS 0x23, 0
56B 2D6E GOTO 0x56e
56C 1486 BSF 0x6, 0x1
56D 2D6F GOTO 0x56f
56E 1086 BCF 0x6, 0x1
308: DB5 = ((Position & 0b00000010) == 2)? 1: 0;
56F 1CA3 BTFSS 0x23, 0x1
570 2D73 GOTO 0x573
571 1506 BSF 0x6, 0x2
572 2D74 GOTO 0x574
573 1106 BCF 0x6, 0x2
309: DB6 = ((Position & 0b00000100) == 4)? 1: 0;
574 1D23 BTFSS 0x23, 0x2
575 2D78 GOTO 0x578
576 1586 BSF 0x6, 0x3
577 2D79 GOTO 0x579
578 1186 BCF 0x6, 0x3
310: DB7 = ((Position & 0b00001000) == 8)? 1: 0;
579 1DA3 BTFSS 0x23, 0x3
57A 2D7D GOTO 0x57d
57B 1606 BSF 0x6, 0x4
57c 2D7E GOTO 0x57e
57D 1206 BCF 0x6, 0x4
311: DE = 1;
57E 1505 BSF 0x5, 0x2
312: asm ( "nop");
57F 0000 NOP
313: asm ( "nop");
580 0000 NOP
314: asm ( "nop");
581 0000 NOP
315: asm ( "nop");
582 0000 NOP
316: asm ( "nop");
583 0000 NOP
317: EN = 0;
584 1105 BCF 0x5, 0x2
318: GenDelay (20); / / Warten Sie, bis ca. 59 uns (Minimum gefordert ist 37 us)
585 3014 MOVLW 0x14
319:
320: return;
321:)
322:
323: / / ---------------------------------------------- -------------------------
324: / / Zweck: ein Zeichen auf dem LCD -
325: / / Input: X-Position, Y-Position, char-Code zu zeigen,
326: / / Output: --
327: / / Autor: Powermos
328: / / creazione Date: 25/09/2008
329: / / ---------------------------------------------- -------------------------
330:
331: void Printxy (unsigned char xpos, unsigned char ypos, unsigned char CharToDisp)
332: (
589 0183 CLRF 0x3
58A 00A5 MOVWF 0x25
333: int position = 0;
58B 01A6 CLRF 0x26
58C 01A7 CLRF 0x27
334: unsigned char Charlo;
335: unsigned char CharHi;
336:
337:                // Check if X and Y are valid for the current display
338:                if (Xpos > MAXPOSX)
58D    3011     MOVLW 0x11
58E    0225     SUBWF 0x25, W
58F    1C03     BTFSS 0x3, 0
590    2D93     GOTO 0x593
339:                  Xpos = MAXPOSX;
591    3010     MOVLW 0x10
592    00A5     MOVWF 0x25
340:                if (Ypos > MAXPOSY)
593    3003     MOVLW 0x3
594    0223     SUBWF 0x23, W
595    1C03     BTFSS 0x3, 0
596    2DA9     GOTO 0x5a9
341:                  Ypos = MAXPOSY;
597    3002     MOVLW 0x2
598    00A3     MOVWF 0x23
342:
343:                // Calculate the DDRAM address
344:                switch (Ypos)
599    2DA9     GOTO 0x5a9
5A9    0823     MOVF 0x23, W
5AA    3A01     XORLW 0x1
5AB    1903     BTFSC 0x3, 0x2
5AC    2DB6     GOTO 0x5b6
5AD    3A03     XORLW 0x3
5AE    1903     BTFSC 0x3, 0x2
5AF    2D9A     GOTO 0x59a
5B0    3A01     XORLW 0x1
5B1    1903     BTFSC 0x3, 0x2
5B2    2D9C     GOTO 0x59c
5B3    3A07     XORLW 0x7
5B4    1903     BTFSC 0x3, 0x2
5B5    2D9E     GOTO 0x59e
345:                 {
346:                   case 1 : Position =  0 Xpos;
347:                       break;
348:                   case 2 : Position = 64 Xpos;
59A    3040     MOVLW 0x40
59B    2D9F     GOTO 0x59f
349:                       break;
350:                   case 3 : Position = 20 Xpos;
59C    3014     MOVLW 0x14
59D    2D9F     GOTO 0x59f
351:                       break;
352:                   case 4 : Position = 84 Xpos;
59E    3054     MOVLW 0x54
59F    00F0     MOVWF 0x70
5A0    01F1     CLRF 0x71
5A1    0825     MOVF 0x25, W
5A2    0770     ADDWF 0x70, W
5A3    00A6     MOVWF 0x26
5A4    0871     MOVF 0x71, W
5A5    1803     BTFSC 0x3, 0
5A6    0A71     INCF 0x71, W
5A7    00A7     MOVWF 0x27
353:                       break;
5A8    2DB9     GOTO 0x5b9
354:                   default: Position =  0 Xpos;
5B6    0825     MOVF 0x25, W
5B7    00A6     MOVWF 0x26
5B8    01A7     CLRF 0x27
355:                       break;
356:                 }
357:
358:                // Set the cursor position (DDRAM address)
359:                Position = Position | 0b10000000;   // Set DB7 to 1
5B9    17A6     BSF 0x26, 0x7
360:                RS    = 0;
5BA    1005     BCF 0x5, 0
361:                RW    = 0;
5BB    1085     BCF 0x5, 0x1
362:                DB4   = ((Position & 0b00010000) == 16) ? 1: 0;
5BC    1E26     BTFSS 0x26, 0x4
5BD    2DC0     GOTO 0x5c0
5BE    1486     BSF 0x6, 0x1
5BF    2DC1     GOTO 0x5c1
5C0    1086     BCF 0x6, 0x1
363:                DB5   = ((Position & 0b00100000) == 32) ? 1: 0;
5C1    1283     BCF 0x3, 0x5
5C2    1303     BCF 0x3, 0x6
5C3    1EA6     BTFSS 0x26, 0x5
5C4    2DC7     GOTO 0x5c7
5C5    1506     BSF 0x6, 0x2
5C6    2DC8     GOTO 0x5c8
5C7    1106     BCF 0x6, 0x2
364:                DB6   = ((Position & 0b01000000) == 64) ? 1: 0;
5C8    1F26     BTFSS 0x26, 0x6
5C9    2DCC     GOTO 0x5cc
5CA    1586     BSF 0x6, 0x3
5CB    2DCD     GOTO 0x5cd
5CC    1186     BCF 0x6, 0x3
365:                DB7   = ((Position & 0b10000000) == 128) ? 1: 0;
5CD    1FA6     BTFSS 0x26, 0x7
5CE    2DD1     GOTO 0x5d1
5CF    1606     BSF 0x6, 0x4
5D0    2DD2     GOTO 0x5d2
5D1    1206     BCF 0x6, 0x4
366:                EN    = 1;
5D2    1505     BSF 0x5, 0x2
367:                asm("nop");
5D3    0000     NOP
368:                asm("nop");
5D4    0000     NOP
369:                asm("nop");
5D5    0000     NOP
370:                asm("nop");
5D6    0000     NOP
371:                asm("nop");
5D7    0000     NOP
372:                EN    = 0;
5D8    1105     BCF 0x5, 0x2
373:                DB4   = ((Position & 0b00000001) == 1) ? 1: 0;
5D9    1C26     BTFSS 0x26, 0
5DA    2DDD     GOTO 0x5dd
5DB    1486     BSF 0x6, 0x1
5DC    2DDE     GOTO 0x5de
5DD    1086     BCF 0x6, 0x1
374:                DB5   = ((Position & 0b00000010) == 2) ? 1: 0;
5DE    1CA6     BTFSS 0x26, 0x1
5DF    2DE2     GOTO 0x5e2
5E0    1506     BSF 0x6, 0x2
5E1    2DE3     GOTO 0x5e3
5E2    1106     BCF 0x6, 0x2
375:                DB6   = ((Position & 0b00000100) == 4) ? 1: 0;
5E3    1D26     BTFSS 0x26, 0x2
5E4    2DE7     GOTO 0x5e7
5E5    1586     BSF 0x6, 0x3
5E6    2DE8     GOTO 0x5e8
5E7    1186     BCF 0x6, 0x3
376:                DB7   = ((Position & 0b00001000) == 8) ? 1: 0;
5E8    1DA6     BTFSS 0x26, 0x3
5E9    2DEC     GOTO 0x5ec
5EA    1606     BSF 0x6, 0x4
5EB    2DED     GOTO 0x5ed
5EC    1206     BCF 0x6, 0x4
377:                EN    = 1;
5ED    1505     BSF 0x5, 0x2
378:                asm("nop");
5EE    0000     NOP
379:                asm("nop");
5EF    0000     NOP
380:                asm("nop");
5F0    0000     NOP
381:                asm("nop");
5F1    0000     NOP
382:                asm("nop");
5F2    0000     NOP
383:                EN    = 0;
5F3    1105     BCF 0x5, 0x2
384:                GenDelay(20); // Wait approx 59 us (minimum requested is 37 us)
5F4    3014     MOVLW 0x14
5F5    00A8     MOVWF 0x28
5F6    01A9     CLRF 0x29
5F7    24D4     CALL 0x4d4
385:
386:                // Show the char on the LCD
387:                RS    = 1;
5F8    1405     BSF 0x5, 0
388:                RW    = 0;
5F9    1085     BCF 0x5, 0x1
389:                DB4   = ((CharToDisp & 0b00010000) == 16) ? 1: 0;
5FA    1E24     BTFSS 0x24, 0x4
5FB    2DFE     GOTO 0x5fe
5FC    1486     BSF 0x6, 0x1
5FD    2DFF     GOTO 0x5ff
5FE    1086     BCF 0x6, 0x1
390:                DB5   = ((CharToDisp & 0b00100000) == 32) ? 1: 0;
5FF    1283     BCF 0x3, 0x5
600    1303     BCF 0x3, 0x6
601    1EA4     BTFSS 0x24, 0x5
602    2E05     GOTO 0x605
603    1506     BSF 0x6, 0x2
604    2E06     GOTO 0x606
605    1106     BCF 0x6, 0x2
391:                DB6   = ((CharToDisp & 0b01000000) == 64) ? 1: 0;
606    1F24     BTFSS 0x24, 0x6
607    2E0A     GOTO 0x60a
608    1586     BSF 0x6, 0x3
609    2E0B     GOTO 0x60b
60A    1186     BCF 0x6, 0x3
392:                DB7   = ((CharToDisp & 0b10000000) == 128) ? 1: 0;
60B    1FA4     BTFSS 0x24, 0x7
60C    2E0F     GOTO 0x60f
60D    1606     BSF 0x6, 0x4
60E    2E10     GOTO 0x610
60F    1206     BCF 0x6, 0x4
393:                EN    = 1;
610    1505     BSF 0x5, 0x2
394:                asm("nop");
611    0000     NOP
395:                asm("nop");
612    0000     NOP
396:                asm("nop");
613    0000     NOP
397:                asm("nop");
614    0000     NOP
398:                asm("nop");
615    0000     NOP
399:                EN    = 0;
616    1105     BCF 0x5, 0x2
400:                DB4   = ((CharToDisp & 0b00000001) == 1) ? 1: 0;
617    1C24     BTFSS 0x24, 0
618    2E1B     GOTO 0x61b
619    1486     BSF 0x6, 0x1
61A    2E1C     GOTO 0x61c
61B    1086     BCF 0x6, 0x1
401:                DB5   = ((CharToDisp & 0b00000010) == 2) ? 1: 0;
61C    1CA4     BTFSS 0x24, 0x1
61D    2E20     GOTO 0x620
61E    1506     BSF 0x6, 0x2
61F    2E21     GOTO 0x621
620    1106     BCF 0x6, 0x2
402:                DB6   = ((CharToDisp & 0b00000100) == 4) ? 1: 0;
621    1D24     BTFSS 0x24, 0x2
622    2E25     GOTO 0x625
623    1586     BSF 0x6, 0x3
624    2E26     GOTO 0x626
625    1186     BCF 0x6, 0x3
403:                DB7   = ((CharToDisp & 0b00001000) == 8) ? 1: 0;
626    1DA4     BTFSS 0x24, 0x3
627    2E2A     GOTO 0x62a
628    1606     BSF 0x6, 0x4
629    2E2B     GOTO 0x62b
62A    1206     BCF 0x6, 0x4
404:                EN    = 1;
62B    1505     BSF 0x5, 0x2
405:                asm("nop");
62C    0000     NOP
406:                asm("nop");
62D    0000     NOP
407:                asm("nop");
62E    0000     NOP
408:                asm("nop");
62F    0000     NOP
409:                asm("nop");
630    0000     NOP
410:                EN    = 0;
631    1105     BCF 0x5, 0x2
411:                GenDelay(20); // Wait approx 59 us (minimum requested is 37 us)
632    3014     MOVLW 0x14
633    00A8     MOVWF 0x28
634    01A9     CLRF 0x29
635    24D4     CALL 0x4d4
412:                RS    = 0;
636    1005     BCF 0x5, 0
413:                RW    = 0;
637    1085     BCF 0x5, 0x1
414:
415:                return;
416:               }
638    0008     RETURN
---  C:\Temp\PIC_LCD\lcddisp.c  ------------------------------------------------------------------
1:                 #include <pic.h>
2:                 #include <stdio.h>
3:
4:                 #include "lcd-lib.h"      // Pin definition file for the LCD
5:
6:                 // ---------------------------------------------------------------------------
7:                 // Design  : LCDDISP.PJT
8:                 // Purpose : LCD display with PIC16F870 (LCD 2x16) 4 bit interface
9:                 // Author  : Powermos
10:                // Date    : 25/09/2008
11:                // Rev     : 0
12:                // General : Fosc = 20.000 MHz, C1=C2=33 pF, Rosc2 = 10 Ohm, Hi-Tech compiler
13:                // ---------------------------------------------------------------------------
14:                //
15:                //   PORTA
16:                //      0 = RS (Data / Instruction register select)
17:                //      1 = RW (Read / Write )
18:                //      2 = EN (Enable signal, start data read / write)
19:                //      3 = NOT USED (Input)
20:                //      4 = NOT USED (Input)
21:                //      5 = NOT USED (Input)
22:                //
23:                //   PORTB (4 bit data bus display LCD)
24:                //      0 = NOT USED (Input)
25:                //      1 = NOT USED (Input)
26:                //      2 = NOT USED (Input)
27:                //      3 = NOT USED (Input)
28:                //      4 = DB4
29:                //      5 = DB5
30:                //      6 = DB6
31:                //      7 = DB7
32:                //
33:                //   PORTC
34:                //      0 = NOT USED (Input)
35:                //      1 = NOT USED (Input)
36:                //      2 = NOT USED (Input)
37:                //      3 = NOT USED (Input)
38:                //      4 = NOT USED (Input)
39:                //      5 = NOT USED (Input)
40:                //      6 = NOT USED (Input)
41:                //      7 = NOT USED (Input)
42:                //
43:                // ---------------------------------------------------------------------------
44:
45:                 __CONFIG(0x3F72);
46:                 __IDLOC(FFFF); // ID0 = 0F, ID1 = 0F, ID2 = 0F, ID3 = 0F
47:
48:                // ===========================================================================
49:                // GLOBAL VARIABLE DEFINITION
50:                // ===========================================================================
51:                unsigned char SWVersion[] = "Ver. 1.0";
52:                unsigned char SWDate[]    = "25/09/2008";
53:
54:                // ===========================================================================
55:                // FUNCTIONS DECLARATION
56:                // ===========================================================================
57:                void HardwareInit(void);                                         // Inizializzazione periferiche hardware
58:                void interrupt InterruptServiceRoutine(void);                     // Funzione per gestione interrupt
59:
60:                // ===========================================================================
61:                // FUNCTIONS DEFINITION
62:                // ===========================================================================
63:
64:                void  HardwareInit(void)
65:                {
66:                 // -----------------------------------------------------------------------
67:                 // uP hardware initialization
68:                 // -----------------------------------------------------------------------
69:
70:                 // ADC off, all digital I/O
71:                 ADON = 0;
4DE    0183     CLRF 0x3
4DF    101F     BCF 0x1f, 0
72:                 ADCON1 = 0b00000110;
4E0    3006     MOVLW 0x6
4E1    1683     BSF 0x3, 0x5
4E2    009F     MOVWF 0x1f
73:
74:                 // PORT direction register
75:                 TRISA = 0b11111000;
4E3    30F8     MOVLW 0xf8
4E4    0085     MOVWF 0x5
76:                 TRISB = 0b11100001;
4E5    30E1     MOVLW 0xe1
4E6    0086     MOVWF 0x6
77:                 TRISC = 0b11111111;
4E7    30FF     MOVLW 0xff
4E8    0087     MOVWF 0x7
78:
79:                 return;
80:                }
4E9    1283     BCF 0x3, 0x5
81:
82:                // -----------------------------------------------------------------------
83:                // Interrupt handler
84:                // -----------------------------------------------------------------------
85:
86:                void interrupt InterruptServiceRoutine(void)
87:                 {
88:                   GIE = 0;
008    138B     BCF 0xb, 0x7
89:
90:                   // ...........
91:
92:                   GIE = 1;
009    178B     BSF 0xb, 0x7
93:                   return;
94:                }
00A    1303     BCF 0x3, 0x6
95:
96:                // -----------------------------------------------------------------------
97:                // Include the LCD source code
98:                // -----------------------------------------------------------------------
99:                #include "lcd-lib.c"
100:
101:               // ===========================================================================
102:               // MAIN
103:               // ===========================================================================
104:               void main(void)
105:               {
6F5    1283     BCF 0x3, 0x5
106:                 unsigned char i = 0;
6F6    1303     BCF 0x3, 0x6
6F7    01A2     CLRF 0x22
107:                 unsigned char Xpos = 0;
6F8    01A0     CLRF 0x20
108:                 unsigned char Ypos = 0;
6F9    01A1     CLRF 0x21
109:
110:                 // Init the uP hardware
111:                 HardwareInit();
6FA    24DE     CALL 0x4de
112:
113:                 // Power-up time (almeno 50 ms)
114:                 LongDelay(10);
6FB    300A     MOVLW 0xa
6FC    00A3     MOVWF 0x23
6FD    01A4     CLRF 0x24
6FE    01A5     CLRF 0x25
6FF    01A6     CLRF 0x26
700    250F     CALL 0x50f
115:
116:                 // Must be the first function called!!!!
117:                 LCDInit();
701    2639     CALL 0x639
118:
119:                 // Show the software release version
120:                 Xpos = 4;
702    3004     MOVLW 0x4
703    00A0     MOVWF 0x20
121:                 Ypos = 1;
704    01A1     CLRF 0x21
705    0AA1     INCF 0x21, F
122:                 for(i = 0; i <= 7; i )
706    01A2     CLRF 0x22
712    0AA2     INCF 0x22, F
713    3008     MOVLW 0x8
714    0222     SUBWF 0x22, W
715    1C03     BTFSS 0x3, 0
716    2F07     GOTO 0x707
123:                   Printxy(Xpos i, Ypos, *(SWVersion i));
707    0821     MOVF 0x21, W
708    00A3     MOVWF 0x23
709    0822     MOVF 0x22, W
70A    3E2B     ADDLW 0x2b
70B    0084     MOVWF 0x4
70C    1383     BCF 0x3, 0x7
70D    0800     MOVF 0, W
70E    00A4     MOVWF 0x24
70F    0820     MOVF 0x20, W
710    0722     ADDWF 0x22, W
711    2589     CALL 0x589
124:
125:                 // Show the data release
126:                 Xpos = 3;
717    3003     MOVLW 0x3
718    00A0     MOVWF 0x20
127:                 Ypos = 2;
719    3002     MOVLW 0x2
71A    00A1     MOVWF 0x21
128:                 for(i = 0; i <= 9; i )
71B    01A2     CLRF 0x22
727    0AA2     INCF 0x22, F
728    300A     MOVLW 0xa
729    0222     SUBWF 0x22, W
72A    1C03     BTFSS 0x3, 0
72B    2F1C     GOTO 0x71c
129:                   Printxy(Xpos i, Ypos, *(SWDate i));
71C    0821     MOVF 0x21, W
71D    00A3     MOVWF 0x23
71E    0822     MOVF 0x22, W
71F    3E34     ADDLW 0x34
720    0084     MOVWF 0x4
721    1383     BCF 0x3, 0x7
722    0800     MOVF 0, W
723    00A4     MOVWF 0x24
724    0820     MOVF 0x20, W
725    0722     ADDWF 0x22, W
726    2589     CALL 0x589
130:
131:                 // Wait for 2s
132:                 LongDelay(400);
72C    3090     MOVLW 0x90
72D    00A3     MOVWF 0x23
72E    3001     MOVLW 0x1
72F    00A4     MOVWF 0x24
730    3000     MOVLW 0
731    01A5     CLRF 0x25
732    01A6     CLRF 0x26
733    250F     CALL 0x50f
133:
134:                 ClearDisplay();
734    24EB     CALL 0x4eb
135:
136:                 // Write char at the specified location
137:                 Printxy(0 , 1, 'H');
735    01A3     CLRF 0x23
736    0AA3     INCF 0x23, F
737    3048     MOVLW 0x48
738    00A4     MOVWF 0x24
739    3000     MOVLW 0
73A    2589     CALL 0x589
138:                 Printxy(1 , 1, 'E');
73B    01A3     CLRF 0x23
73C    0AA3     INCF 0x23, F
73D    3045     MOVLW 0x45
73E    00A4     MOVWF 0x24
73F    3001     MOVLW 0x1
740    2589     CALL 0x589
139:                 Printxy(2 , 1, 'L');
741    01A3     CLRF 0x23
742    0AA3     INCF 0x23, F
743    304C     MOVLW 0x4c
744    00A4     MOVWF 0x24
745    3002     MOVLW 0x2
746    2589     CALL 0x589
140:                 Printxy(3 , 1, 'L');
747    01A3     CLRF 0x23
748    0AA3     INCF 0x23, F
749    304C     MOVLW 0x4c
74A    00A4     MOVWF 0x24
74B    3003     MOVLW 0x3
74C    2589     CALL 0x589
141:                 Printxy(4 , 1, 'O');
74D    01A3     CLRF 0x23
74E    0AA3     INCF 0x23, F
74F    304F     MOVLW 0x4f
750    00A4     MOVWF 0x24
751    3004     MOVLW 0x4
752    2589     CALL 0x589
142:                 Printxy(5 , 1, ' ');
753    01A3     CLRF 0x23
754    0AA3     INCF 0x23, F
755    3020     MOVLW 0x20
756    00A4     MOVWF 0x24
757    3005     MOVLW 0x5
758    2589     CALL 0x589
143:                 Printxy(6 , 1, 'W');
759    01A3     CLRF 0x23
75A    0AA3     INCF 0x23, F
75B    3057     MOVLW 0x57
75C    00A4     MOVWF 0x24
75D    3006     MOVLW 0x6
75E    2589     CALL 0x589
144:                 Printxy(7 , 1, 'O');
75F    01A3     CLRF 0x23
760    0AA3     INCF 0x23, F
761    304F     MOVLW 0x4f
762    00A4     MOVWF 0x24
763    3007     MOVLW 0x7
764    2589     CALL 0x589
145:                 Printxy(8 , 1, 'R');
765    01A3     CLRF 0x23
766    0AA3     INCF 0x23, F
767    3052     MOVLW 0x52
768    00A4     MOVWF 0x24
769    3008     MOVLW 0x8
76A    2589     CALL 0x589
146:                 Printxy(9, 1, 'L');
76B    01A3     CLRF 0x23
76C    0AA3     INCF 0x23, F
76D    304C     MOVLW 0x4c
76E    00A4     MOVWF 0x24
76F    3009     MOVLW 0x9
770    2589     CALL 0x589
147:                 Printxy(10, 1, 'D');
771    01A3     CLRF 0x23
772    0AA3     INCF 0x23, F
773    3044     MOVLW 0x44
774    00A4     MOVWF 0x24
775    300A     MOVLW 0xa
776    2589     CALL 0x589
148:                 Printxy(11, 1, '!');
777    01A3     CLRF 0x23
778    0AA3     INCF 0x23, F
779    3021     MOVLW 0x21
77A    00A4     MOVWF 0x24
77B    300B     MOVLW 0xb
77C    2589     CALL 0x589
149:
150:                 Printxy(0 , 2, 'L');
77D    3002     MOVLW 0x2
77E    00A3     MOVWF 0x23
77F    304C     MOVLW 0x4c
780    00A4     MOVWF 0x24
781    3000     MOVLW 0
782    2589     CALL 0x589
151:                 Printxy(1 , 2, 'C');
783    3002     MOVLW 0x2
784    00A3     MOVWF 0x23
785    3043     MOVLW 0x43
786    00A4     MOVWF 0x24
787    3001     MOVLW 0x1
788    2589     CALL 0x589
152:                 Printxy(2 , 2, 'D');
789    3002     MOVLW 0x2
78A    00A3     MOVWF 0x23
78B    3044     MOVLW 0x44
78C    00A4     MOVWF 0x24
78D    3002     MOVLW 0x2
78E    2589     CALL 0x589
153:                 Printxy(3 , 2, ' ');
78F    3002     MOVLW 0x2
790    00A3     MOVWF 0x23
791    3020     MOVLW 0x20
792    00A4     MOVWF 0x24
793    3003     MOVLW 0x3
794    2589     CALL 0x589
154:                 Printxy(4 , 2, 'T');
795    3002     MOVLW 0x2
796    00A3     MOVWF 0x23
797    3054     MOVLW 0x54
798    00A4     MOVWF 0x24
799    3004     MOVLW 0x4
79A    2589     CALL 0x589
155:                 Printxy(5 , 2, 'E');
79B    3002     MOVLW 0x2
79C    00A3     MOVWF 0x23
79D    3045     MOVLW 0x45
79E    00A4     MOVWF 0x24
79F    3005     MOVLW 0x5
7A0    2589     CALL 0x589
156:                 Printxy(6 , 2, 'S');
7A1    3002     MOVLW 0x2
7A2    00A3     MOVWF 0x23
7A3    3053     MOVLW 0x53
7A4    00A4     MOVWF 0x24
7A5    3006     MOVLW 0x6
7A6    2589     CALL 0x589
157:                 Printxy(7 , 2, 'T');
7A7    3002     MOVLW 0x2
7A8    00A3     MOVWF 0x23
7A9    3054     MOVLW 0x54
7AA    00A4     MOVWF 0x24
7AB    3007     MOVLW 0x7
7AC    2589     CALL 0x589
158:
159:                 CursorAtHome();
7AD    2548     CALL 0x548
160:
161:                 // Wait for 2s
162:                 LongDelay(400);
7AE    3090     MOVLW 0x90
7AF    00A3     MOVWF 0x23
7B0    3001     MOVLW 0x1
7B1    00A4     MOVWF 0x24
7B2    3000     MOVLW 0
7B3    01A5     CLRF 0x25
7B4    01A6     CLRF 0x26
7B5    250F     CALL 0x50f
163:
164:                 // -----------------------------
165:                 // Main loop
166:                 // -----------------------------
167:                 while (1)
168:                  {
169:                     asm("clrwdt");
7B6    0064     CLRWDT
170:
171:                     for (i=0; i<=MAXPOSX; i )
7B7    01A2     CLRF 0x22
7CC    0AA2     INCF 0x22, F
7CD    3011     MOVLW 0x11
7CE    0222     SUBWF 0x22, W
7CF    1C03     BTFSS 0x3, 0
7D0    2FB8     GOTO 0x7b8
172:                        {
173:                           ClearDisplay();
7B8    24EB     CALL 0x4eb
174:                           Printxy(i , 1, '*');
7B9    01A3     CLRF 0x23
7BA    0AA3     INCF 0x23, F
7BB    302A     MOVLW 0x2a
7BC    00A4     MOVWF 0x24
7BD    0822     MOVF 0x22, W
7BE    2589     CALL 0x589
175:                           Printxy(MAXPOSX-i, 2, '*');
7BF    3002     MOVLW 0x2
7C0    00A3     MOVWF 0x23
7C1    302A     MOVLW 0x2a
7C2    00A4     MOVWF 0x24
7C3    0822     MOVF 0x22, W
7C4    3C10     SUBLW 0x10
7C5    2589     CALL 0x589
176:                           LongDelay(10);
7C6    300A     MOVLW 0xa
7C7    00A3     MOVWF 0x23
7C8    01A4     CLRF 0x24
7C9    01A5     CLRF 0x25
7CA    01A6     CLRF 0x26
7CB    250F     CALL 0x50f
177:                        }
178:
179:                     for (i=0; i<=MAXPOSX; i )
7D1    01A2     CLRF 0x22
7E6    0AA2     INCF 0x22, F
180:                        {
181:                           ClearDisplay();
7D2    24EB     CALL 0x4eb
182:                           Printxy(MAXPOSX-i , 1, '*');
7D3    01A3     CLRF 0x23
7D4    0AA3     INCF 0x23, F
7D5    302A     MOVLW 0x2a
7D6    00A4     MOVWF 0x24
7D7    0822     MOVF 0x22, W
7D8    3C10     SUBLW 0x10
7D9    2589     CALL 0x589
183:                               Printxy(i , 2, '*');
7DA    3002     MOVLW 0x2
7DB    00A3     MOVWF 0x23
7DC    302A     MOVLW 0x2a
7DD    00A4     MOVWF 0x24
7DE    0822     MOVF 0x22, W
7DF    2589     CALL 0x589
184:                           LongDelay(10);
7E0    300A     MOVLW 0xa


Tschüss
Pow
Zurück zum Anfang
View user's profile
TekUT



Joined: 17 Jun 2008
Beiträge: 413
Geholfen: 23


Post 03 Oct 2008 17:13 Re: LCD interfacing with a PIC - TUTORIAL -

Let me know if you need some help.

Tschüss
Pow
Zurück zum Anfang
View user's profile
Post new topic Reply to topic EDAboard.com Forum Index -> Microcontrollers -> LCD interfacing with a PIC - TUTORIAL -
Seite 1 von 1 Alle Zeiten sind GMT 2 Stunden


Missbrauch | | Administrator | | Moderatoren | | Unterstützen Sie uns | | sitemap
Thema RSS