1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <pic16f887.h>
|
4 | #include <xc.h>
|
5 |
|
6 | #define _XTAL_FREQ 4000000
|
7 |
|
8 | // CONFIG1
|
9 | #pragma config FOSC = INTRC_NOCLKOUT// Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
|
10 | #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
|
11 | #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
|
12 | #pragma config MCLRE = ON // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)
|
13 | #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
|
14 | #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
|
15 | #pragma config BOREN = ON // Brown Out Reset Selection bits (BOR enabled)
|
16 | #pragma config IESO = ON // Internal External Switchover bit (Internal/External Switchover mode is enabled)
|
17 | #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
|
18 | #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)
|
19 |
|
20 | // CONFIG2
|
21 | #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
|
22 | #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off)
|
23 |
|
24 | #define D7 RD3
|
25 | #define D6 RD2
|
26 | #define D5 RD1
|
27 | #define D4 RD0
|
28 |
|
29 | #define RS RC4
|
30 | #define EN RC6
|
31 |
|
32 | #define datenport PORTD
|
33 | #define RS RC4
|
34 | #define EN RC6
|
35 |
|
36 | int Durchlauf = 0;
|
37 |
|
38 | void STROBE(void)
|
39 | {
|
40 | EN = 1;
|
41 | __delay_us(2);
|
42 | EN = 0;
|
43 | }
|
44 |
|
45 | void main(void)
|
46 | {
|
47 | __delay_ms(20);
|
48 | TRISC = 0;
|
49 | TRISD = 0b00000000;
|
50 | EN = 0;
|
51 | RS = 0;
|
52 | datenport = 0;
|
53 |
|
54 | while(1)
|
55 | {
|
56 | while(Durchlauf == 0)
|
57 | {
|
58 |
|
59 | RS = 0; // Steuerbefehl
|
60 | __delay_us(50); // Wartezeit
|
61 | datenport = 0b00110000; // Interface auf 8 Bit setzen
|
62 | STROBE(); // Datenport einlesen
|
63 |
|
64 | __delay_ms(5); // Wartezeit
|
65 |
|
66 | RS = 0; // Steuerbefehl
|
67 | __delay_us(50); // Wartezeit
|
68 | datenport = 0b00110000; // Interface auf 8 Bit setzen
|
69 | STROBE(); // Datenport einlesen
|
70 |
|
71 | __delay_us(150); // Wartezeit
|
72 |
|
73 | RS = 0; // Steuerbefehl
|
74 | __delay_us(50); // Wartezeit
|
75 | datenport = 0b00110000; // Interface auf 8 Bit setzen
|
76 | STROBE(); // Datenport einlesen
|
77 |
|
78 | RS = 0; // Steuerbefehl
|
79 | __delay_us(50); // Wartezeit
|
80 | datenport = 0b00100000; // Interface auf 4 Bit setzen
|
81 | STROBE(); // Datenport einlesen
|
82 |
|
83 | RS = 0; // Steuerbefehl
|
84 | __delay_us(50); // Wartezeit
|
85 | datenport = 0b00100000; // 1. 2-Zeilen und 5x8 Punktmatrix
|
86 | STROBE(); // Datenport einlesen
|
87 |
|
88 | RS = 0; // Steuerbefehl
|
89 | __delay_us(50); // Wartezeit
|
90 | datenport = 0b10000000; // 2. 2-Zeilen und 5x8 Punktmatrix
|
91 | STROBE(); // Datenport einlesen
|
92 |
|
93 | RS = 0; // Steuerbefehl
|
94 | __delay_us(50); // Wartezeit
|
95 | datenport = 0b00000000; // 1. Display ausschalten
|
96 | STROBE(); // Datenport einlesen
|
97 |
|
98 | RS = 0; // Steuerbefehl
|
99 | __delay_us(50); // Wartezeit
|
100 | datenport = 0b10000000; // 2. Display ausschalten
|
101 | STROBE(); // Datenport einlesen
|
102 |
|
103 | RS = 0; // Steuerbefehl
|
104 | __delay_us(50); // Wartezeit
|
105 | datenport = 0b00000000; // 1. Textpuffer löschen
|
106 | STROBE(); // Datenport einlesen
|
107 |
|
108 | RS = 0; // Steuerbefehl
|
109 | __delay_us(50); // Wartezeit
|
110 | datenport = 0b00010000; // 2. Textpuffer löschen
|
111 | STROBE(); // Datenport einlesen
|
112 |
|
113 | RS = 0; // Steuerbefehl
|
114 | __delay_us(50); // Wartezeit
|
115 | datenport = 0b00000000; // 1.Cursorlaufrichtung rechts, kein Shift
|
116 | STROBE(); // Datenport einlesen
|
117 |
|
118 | RS = 0; // Steuerbefehl
|
119 | __delay_us(50); // Wartezeit
|
120 | datenport = 0b01100000; // 1.Cursorlaufrichtung rechts, kein Shift
|
121 | STROBE(); // Datenport einlesen
|
122 |
|
123 | RS = 0; // Steuerbefehl
|
124 | __delay_us(50); // Wartezeit
|
125 | datenport = 0b00000000; // 1. Cursor auf Startposition
|
126 | STROBE(); // Datenport einlesen
|
127 |
|
128 | RS = 0; // Steuerbefehl
|
129 | __delay_us(50); // Wartezeit
|
130 | datenport = 0b00100000; // 1. Cursor auf Startposition
|
131 | STROBE(); // Datenport einlesen
|
132 |
|
133 | RS = 0; // Steuerbefehl
|
134 | __delay_us(50); // Wartezeit
|
135 | datenport = 0b00000000; // 1.Display einschalten
|
136 | STROBE(); // Datenport einlesen
|
137 |
|
138 | RS = 0; // Steuerbefehl
|
139 | __delay_us(50); // Wartezeit
|
140 | datenport = 0b11110000; // 2.Display einschalten
|
141 | STROBE(); // Datenport einlesen
|
142 |
|
143 | Durchlauf = 1;
|
144 | }
|
145 | }
|
146 | }
|