Update
Dependencies: mbed mbed-rtos X_NUCLEO_IHM02A1
Display.cpp@30:e464b2bb2376, 2019-04-11 (annotated)
- Committer:
- scherfa2
- Date:
- Thu Apr 11 15:20:05 2019 +0000
- Revision:
- 30:e464b2bb2376
- Child:
- 31:4bb6d2cedad2
- Child:
- 33:de144094bdd1
mit Display;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scherfa2 | 30:e464b2bb2376 | 1 | #include "mbed.h" |
scherfa2 | 30:e464b2bb2376 | 2 | #include "Display.h" |
scherfa2 | 30:e464b2bb2376 | 3 | #include "main.h" |
scherfa2 | 30:e464b2bb2376 | 4 | |
scherfa2 | 30:e464b2bb2376 | 5 | /************************************************************* |
scherfa2 | 30:e464b2bb2376 | 6 | * PA10 (D2) (Select Steppmotor Treiber2) |
scherfa2 | 30:e464b2bb2376 | 7 | * PA7 (D11) (mosi Steppmotor Treiber1) |
scherfa2 | 30:e464b2bb2376 | 8 | * PA6 (D12) (miso Steppmotor Treiber1) |
scherfa2 | 30:e464b2bb2376 | 9 | * PA4 (A2) (Select Steppmotor Treiber1) |
scherfa2 | 30:e464b2bb2376 | 10 | * |
scherfa2 | 30:e464b2bb2376 | 11 | * PB15 (mosi Steppmotor Treiber2) |
scherfa2 | 30:e464b2bb2376 | 12 | * PB14 (miso Steppmotor Treiber2) |
scherfa2 | 30:e464b2bb2376 | 13 | * PB13 (slk Steppmotor Treiber2) |
scherfa2 | 30:e464b2bb2376 | 14 | * PB6 (D10)(pwm_io)(CN5-3) |
scherfa2 | 30:e464b2bb2376 | 15 | * PB5 (D4)(Standby_reset Steppmotor) |
scherfa2 | 30:e464b2bb2376 | 16 | * PB4 (D5)(pwm_io2)(CN9-6) |
scherfa2 | 30:e464b2bb2376 | 17 | * PB3 (D3)(Select Steppmotor Treiber1) |
scherfa2 | 30:e464b2bb2376 | 18 | |
scherfa2 | 30:e464b2bb2376 | 19 | * PC1 (A4)(Flag_irq Steppmotor) |
scherfa2 | 30:e464b2bb2376 | 20 | * PC0 (A5)(Busy_irq Steppmotor) |
scherfa2 | 30:e464b2bb2376 | 21 | |
scherfa2 | 30:e464b2bb2376 | 22 | PA0 (RS) |
scherfa2 | 30:e464b2bb2376 | 23 | PA1 (RW) |
scherfa2 | 30:e464b2bb2376 | 24 | PA8 (E) |
scherfa2 | 30:e464b2bb2376 | 25 | PB6 (Data0) |
scherfa2 | 30:e464b2bb2376 | 26 | PA5 (Data1) |
scherfa2 | 30:e464b2bb2376 | 27 | PA9 (Data2) |
scherfa2 | 30:e464b2bb2376 | 28 | PB10 (Data3) |
scherfa2 | 30:e464b2bb2376 | 29 | PB0 (Data4) |
scherfa2 | 30:e464b2bb2376 | 30 | PB7 (Data5) |
scherfa2 | 30:e464b2bb2376 | 31 | PB8 (Data6) |
scherfa2 | 30:e464b2bb2376 | 32 | PB9 (Data7) |
scherfa2 | 30:e464b2bb2376 | 33 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 34 | |
scherfa2 | 30:e464b2bb2376 | 35 | DigitalOut RS(PA_0); |
scherfa2 | 30:e464b2bb2376 | 36 | DigitalOut RW(PA_1); |
scherfa2 | 30:e464b2bb2376 | 37 | DigitalOut E(PA_8); |
scherfa2 | 30:e464b2bb2376 | 38 | DigitalOut bit0(PB_6); |
scherfa2 | 30:e464b2bb2376 | 39 | DigitalOut bit1(PA_5); |
scherfa2 | 30:e464b2bb2376 | 40 | DigitalOut bit2(PA_9); |
scherfa2 | 30:e464b2bb2376 | 41 | DigitalOut bit3(PB_10); |
scherfa2 | 30:e464b2bb2376 | 42 | DigitalOut bit4(PB_0); |
scherfa2 | 30:e464b2bb2376 | 43 | DigitalOut bit5(PC_7); |
scherfa2 | 30:e464b2bb2376 | 44 | DigitalOut bit6(PB_8); |
scherfa2 | 30:e464b2bb2376 | 45 | DigitalOut bit7(PB_9); |
scherfa2 | 30:e464b2bb2376 | 46 | |
scherfa2 | 30:e464b2bb2376 | 47 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 48 | Sendebefehls-Funktion für das Display MIDAS |
scherfa2 | 30:e464b2bb2376 | 49 | E=Enable, RS= Register Select Signal, RW= Data Read/Wirte |
scherfa2 | 30:e464b2bb2376 | 50 | Siehe MIDAS Datasheet 6.3.1 Write Mode Timing Diagramm |
scherfa2 | 30:e464b2bb2376 | 51 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 52 | void DisplaySendeBefehl(unsigned char befehl) |
scherfa2 | 30:e464b2bb2376 | 53 | { |
scherfa2 | 30:e464b2bb2376 | 54 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 55 | E=0; |
scherfa2 | 30:e464b2bb2376 | 56 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 57 | wait_us(1); //delay>0 |
scherfa2 | 30:e464b2bb2376 | 58 | E=1; |
scherfa2 | 30:e464b2bb2376 | 59 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 60 | bit0= (befehl>>0)&0x01; |
scherfa2 | 30:e464b2bb2376 | 61 | bit1= (befehl>>1)&0x01; |
scherfa2 | 30:e464b2bb2376 | 62 | bit2= (befehl>>2)&0x01; |
scherfa2 | 30:e464b2bb2376 | 63 | bit3= (befehl>>3)&0x01; |
scherfa2 | 30:e464b2bb2376 | 64 | bit4= (befehl>>4)&0x01; |
scherfa2 | 30:e464b2bb2376 | 65 | bit5= (befehl>>5)&0x01; |
scherfa2 | 30:e464b2bb2376 | 66 | bit6= (befehl>>6)&0x01; |
scherfa2 | 30:e464b2bb2376 | 67 | bit7= (befehl>>7)&0x01; |
scherfa2 | 30:e464b2bb2376 | 68 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 69 | E=0; |
scherfa2 | 30:e464b2bb2376 | 70 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 71 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 72 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 73 | bit0=0; |
scherfa2 | 30:e464b2bb2376 | 74 | bit1=0; |
scherfa2 | 30:e464b2bb2376 | 75 | bit2=0; |
scherfa2 | 30:e464b2bb2376 | 76 | bit3=0; |
scherfa2 | 30:e464b2bb2376 | 77 | bit4=0; |
scherfa2 | 30:e464b2bb2376 | 78 | bit5=0; |
scherfa2 | 30:e464b2bb2376 | 79 | bit6=0; |
scherfa2 | 30:e464b2bb2376 | 80 | bit7=0; |
scherfa2 | 30:e464b2bb2376 | 81 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 82 | /* |
scherfa2 | 30:e464b2bb2376 | 83 | PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 84 | _delay_ms(1); // delay>40ns tAS |
scherfa2 | 30:e464b2bb2376 | 85 | PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 86 | _delay_ms(1); // delay>460ns tpw |
scherfa2 | 30:e464b2bb2376 | 87 | PORTA = Befehl; // Daten für Befehl |
scherfa2 | 30:e464b2bb2376 | 88 | _delay_ms(1); // delay>80ns tsp2 |
scherfa2 | 30:e464b2bb2376 | 89 | PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 90 | _delay_ms(1); // delay>10ns thd1 &(5ns thd2) |
scherfa2 | 30:e464b2bb2376 | 91 | PORTB= PORTB & 0b11111100; // RW=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 92 | PORTA= 0; // Port A löschen (gesendete Daten) |
scherfa2 | 30:e464b2bb2376 | 93 | _delay_ms(1); // alle delays ab E=1 >500ns tc |
scherfa2 | 30:e464b2bb2376 | 94 | |
scherfa2 | 30:e464b2bb2376 | 95 | */ |
scherfa2 | 30:e464b2bb2376 | 96 | } |
scherfa2 | 30:e464b2bb2376 | 97 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 98 | Sende-Zeichen-Funktion für das Display Midas |
scherfa2 | 30:e464b2bb2376 | 99 | Es können ASCI basierende Zeichen gesendet werden wie 'A' etc. |
scherfa2 | 30:e464b2bb2376 | 100 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 101 | void DisplaySendeZeichen(unsigned char Zeichen) |
scherfa2 | 30:e464b2bb2376 | 102 | { |
scherfa2 | 30:e464b2bb2376 | 103 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 104 | E=0; |
scherfa2 | 30:e464b2bb2376 | 105 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 106 | RS=1; |
scherfa2 | 30:e464b2bb2376 | 107 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 108 | E=1; |
scherfa2 | 30:e464b2bb2376 | 109 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 110 | bit0= (Zeichen>>0)&0x01; |
scherfa2 | 30:e464b2bb2376 | 111 | bit1= (Zeichen>>1)&0x01; |
scherfa2 | 30:e464b2bb2376 | 112 | bit2= (Zeichen>>2)&0x01; |
scherfa2 | 30:e464b2bb2376 | 113 | bit3= (Zeichen>>3)&0x01; |
scherfa2 | 30:e464b2bb2376 | 114 | bit4= (Zeichen>>4)&0x01; |
scherfa2 | 30:e464b2bb2376 | 115 | bit5= (Zeichen>>5)&0x01; |
scherfa2 | 30:e464b2bb2376 | 116 | bit6= (Zeichen>>6)&0x01; |
scherfa2 | 30:e464b2bb2376 | 117 | bit7= (Zeichen>>7)&0x01; |
scherfa2 | 30:e464b2bb2376 | 118 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 119 | E=0; |
scherfa2 | 30:e464b2bb2376 | 120 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 121 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 122 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 123 | bit0=0; |
scherfa2 | 30:e464b2bb2376 | 124 | bit1=0; |
scherfa2 | 30:e464b2bb2376 | 125 | bit2=0; |
scherfa2 | 30:e464b2bb2376 | 126 | bit3=0; |
scherfa2 | 30:e464b2bb2376 | 127 | bit4=0; |
scherfa2 | 30:e464b2bb2376 | 128 | bit5=0; |
scherfa2 | 30:e464b2bb2376 | 129 | bit6=0; |
scherfa2 | 30:e464b2bb2376 | 130 | bit7=0; |
scherfa2 | 30:e464b2bb2376 | 131 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 132 | |
scherfa2 | 30:e464b2bb2376 | 133 | |
scherfa2 | 30:e464b2bb2376 | 134 | /*PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 135 | PORTB= PORTB | 0b00000001; // RS=1 |
scherfa2 | 30:e464b2bb2376 | 136 | _delay_ms(1); // delay>40ns tsp1 |
scherfa2 | 30:e464b2bb2376 | 137 | PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 138 | _delay_ms(1); // delay>230ns tpw |
scherfa2 | 30:e464b2bb2376 | 139 | PORTA = Zeichen; // Daten für Zeichen |
scherfa2 | 30:e464b2bb2376 | 140 | _delay_ms(1); // delay>80ns tsp2 |
scherfa2 | 30:e464b2bb2376 | 141 | PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 142 | _delay_ms(1); // delay>10ns thd1 &(5ns thd2) |
scherfa2 | 30:e464b2bb2376 | 143 | PORTB= PORTB & 0b11111100; // RW=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 144 | PORTA= 0; // Port A löschen (gesendete Daten) |
scherfa2 | 30:e464b2bb2376 | 145 | _delay_ms(1); // alle delays ab E=1 >500ns tc*/ |
scherfa2 | 30:e464b2bb2376 | 146 | |
scherfa2 | 30:e464b2bb2376 | 147 | } |
scherfa2 | 30:e464b2bb2376 | 148 | |
scherfa2 | 30:e464b2bb2376 | 149 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 150 | Sende-String-Funktion für das Display Midas |
scherfa2 | 30:e464b2bb2376 | 151 | Es können ASCI basierende Strings gesendet werden wie "ABC" etc. |
scherfa2 | 30:e464b2bb2376 | 152 | Der Sendestring ist auf 20 Zeichen beschränkt, da eine Display- |
scherfa2 | 30:e464b2bb2376 | 153 | Lein ebenfalls nur 20 Felder besitzt. |
scherfa2 | 30:e464b2bb2376 | 154 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 155 | void DisplaySendeString(char *String) |
scherfa2 | 30:e464b2bb2376 | 156 | { |
scherfa2 | 30:e464b2bb2376 | 157 | int x; |
scherfa2 | 30:e464b2bb2376 | 158 | for(x = 0; (x < 20) && (*String != 0); x++) // solange ein Zeichen=0 ist |
scherfa2 | 30:e464b2bb2376 | 159 | { |
scherfa2 | 30:e464b2bb2376 | 160 | DisplaySendeZeichen(*String); // Zeichen durch Pointer |
scherfa2 | 30:e464b2bb2376 | 161 | String++; // Pointer auf nächstes Zeichen |
scherfa2 | 30:e464b2bb2376 | 162 | } |
scherfa2 | 30:e464b2bb2376 | 163 | } |
scherfa2 | 30:e464b2bb2376 | 164 | |
scherfa2 | 30:e464b2bb2376 | 165 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 166 | Midas Display Initalisierungs-Fuktion |
scherfa2 | 30:e464b2bb2376 | 167 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 168 | void DisplayInit() |
scherfa2 | 30:e464b2bb2376 | 169 | { |
scherfa2 | 30:e464b2bb2376 | 170 | wait_ms(40); |
scherfa2 | 30:e464b2bb2376 | 171 | DisplaySendeBefehl(0b00111100); // |
scherfa2 | 30:e464b2bb2376 | 172 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 173 | DisplaySendeBefehl(0b00111100); |
scherfa2 | 30:e464b2bb2376 | 174 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 175 | DisplaySendeBefehl(0b00001000); |
scherfa2 | 30:e464b2bb2376 | 176 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 177 | DisplaySendeBefehl(0b00000001); |
scherfa2 | 30:e464b2bb2376 | 178 | wait_ms(3); |
scherfa2 | 30:e464b2bb2376 | 179 | DisplaySendeBefehl(0b00000110); |
scherfa2 | 30:e464b2bb2376 | 180 | |
scherfa2 | 30:e464b2bb2376 | 181 | |
scherfa2 | 30:e464b2bb2376 | 182 | |
scherfa2 | 30:e464b2bb2376 | 183 | |
scherfa2 | 30:e464b2bb2376 | 184 | |
scherfa2 | 30:e464b2bb2376 | 185 | |
scherfa2 | 30:e464b2bb2376 | 186 | /*_delay_ms(20); // delay>15ms |
scherfa2 | 30:e464b2bb2376 | 187 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 188 | _delay_ms(5); // delay>4.1ms |
scherfa2 | 30:e464b2bb2376 | 189 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 190 | _delay_ms(5); // delay>100us |
scherfa2 | 30:e464b2bb2376 | 191 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 192 | DisplaySendeBefehl(0b00111100); // 8bit-,2line-,5x11dots mode |
scherfa2 | 30:e464b2bb2376 | 193 | DisplaySendeBefehl(0b00001000); // Display off |
scherfa2 | 30:e464b2bb2376 | 194 | DisplaySendeBefehl(0b00000001); // Display clear |
scherfa2 | 30:e464b2bb2376 | 195 | DisplaySendeBefehl(0b00000110); // Entry mode set*/ |
scherfa2 | 30:e464b2bb2376 | 196 | } |
scherfa2 | 30:e464b2bb2376 | 197 | |
scherfa2 | 30:e464b2bb2376 | 198 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 199 | Gehe zu X, Y -Funktion für das Display. |
scherfa2 | 30:e464b2bb2376 | 200 | X ist die Horizontale, Y die Vertikale |
scherfa2 | 30:e464b2bb2376 | 201 | X muss 20<=x>0 sein / Y muss 4<=y>0 sein |
scherfa2 | 30:e464b2bb2376 | 202 | |
scherfa2 | 30:e464b2bb2376 | 203 | Zeilen des Displays wie folgt: |
scherfa2 | 30:e464b2bb2376 | 204 | y |
scherfa2 | 30:e464b2bb2376 | 205 | 1. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x |
scherfa2 | 30:e464b2bb2376 | 206 | 3. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x |
scherfa2 | 30:e464b2bb2376 | 207 | 2. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x |
scherfa2 | 30:e464b2bb2376 | 208 | 4. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x |
scherfa2 | 30:e464b2bb2376 | 209 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 210 | void gotoxy(unsigned char x, unsigned char y) |
scherfa2 | 30:e464b2bb2376 | 211 | { |
scherfa2 | 30:e464b2bb2376 | 212 | unsigned char data = 0; |
scherfa2 | 30:e464b2bb2376 | 213 | |
scherfa2 | 30:e464b2bb2376 | 214 | switch (y) |
scherfa2 | 30:e464b2bb2376 | 215 | { |
scherfa2 | 30:e464b2bb2376 | 216 | case 1: |
scherfa2 | 30:e464b2bb2376 | 217 | data = 0b10000000 | (0x00+x-1); // +0 (0x00) |
scherfa2 | 30:e464b2bb2376 | 218 | break; |
scherfa2 | 30:e464b2bb2376 | 219 | |
scherfa2 | 30:e464b2bb2376 | 220 | case 2: // |
scherfa2 | 30:e464b2bb2376 | 221 | data = 0b10000000 | (0x14+x-1); // +20 (0x14) |
scherfa2 | 30:e464b2bb2376 | 222 | break; |
scherfa2 | 30:e464b2bb2376 | 223 | |
scherfa2 | 30:e464b2bb2376 | 224 | case 3: |
scherfa2 | 30:e464b2bb2376 | 225 | data = 0b10000000 | (0x40+x-1); // +64 (0x40) |
scherfa2 | 30:e464b2bb2376 | 226 | break; |
scherfa2 | 30:e464b2bb2376 | 227 | |
scherfa2 | 30:e464b2bb2376 | 228 | case 4: |
scherfa2 | 30:e464b2bb2376 | 229 | data = 0b10000000 | (0x54+x-1); // +84 (0x54) |
scherfa2 | 30:e464b2bb2376 | 230 | break; |
scherfa2 | 30:e464b2bb2376 | 231 | |
scherfa2 | 30:e464b2bb2376 | 232 | } |
scherfa2 | 30:e464b2bb2376 | 233 | DisplaySendeBefehl(data); // Berechneter Übergabeparameter data |
scherfa2 | 30:e464b2bb2376 | 234 | } |
scherfa2 | 30:e464b2bb2376 | 235 | |
scherfa2 | 30:e464b2bb2376 | 236 | |
scherfa2 | 30:e464b2bb2376 | 237 |