mit Buttons/PWM als einzelne cpp und init in main
Dependencies: mbed mbed-rtos X_NUCLEO_IHM02A1
Display.cpp@31:4bb6d2cedad2, 2019-04-17 (annotated)
- Committer:
- scherfa2
- Date:
- Wed Apr 17 07:55:47 2019 +0000
- Revision:
- 31:4bb6d2cedad2
- Parent:
- 30:e464b2bb2376
Update 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 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 23 | |
scherfa2 | 31:4bb6d2cedad2 | 24 | DigitalOut RS(PC_3); |
scherfa2 | 31:4bb6d2cedad2 | 25 | DigitalOut RW(PC_2); |
scherfa2 | 31:4bb6d2cedad2 | 26 | DigitalOut E(PB_7); |
scherfa2 | 31:4bb6d2cedad2 | 27 | DigitalOut bit0(PA_15); |
scherfa2 | 31:4bb6d2cedad2 | 28 | DigitalOut bit1(PA_14); |
scherfa2 | 31:4bb6d2cedad2 | 29 | DigitalOut bit2(PA_13); |
scherfa2 | 31:4bb6d2cedad2 | 30 | DigitalOut bit3(PC_12); |
scherfa2 | 31:4bb6d2cedad2 | 31 | DigitalOut bit4(PC_10); |
scherfa2 | 31:4bb6d2cedad2 | 32 | DigitalOut bit5(PC_8); |
scherfa2 | 31:4bb6d2cedad2 | 33 | DigitalOut bit6(PC_6); |
scherfa2 | 31:4bb6d2cedad2 | 34 | DigitalOut bit7(PC_5); |
scherfa2 | 30:e464b2bb2376 | 35 | |
scherfa2 | 30:e464b2bb2376 | 36 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 37 | Sendebefehls-Funktion für das Display MIDAS |
scherfa2 | 30:e464b2bb2376 | 38 | E=Enable, RS= Register Select Signal, RW= Data Read/Wirte |
scherfa2 | 30:e464b2bb2376 | 39 | Siehe MIDAS Datasheet 6.3.1 Write Mode Timing Diagramm |
scherfa2 | 30:e464b2bb2376 | 40 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 41 | void DisplaySendeBefehl(unsigned char befehl) |
scherfa2 | 30:e464b2bb2376 | 42 | { |
scherfa2 | 30:e464b2bb2376 | 43 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 44 | E=0; |
scherfa2 | 30:e464b2bb2376 | 45 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 46 | wait_us(1); //delay>0 |
scherfa2 | 30:e464b2bb2376 | 47 | E=1; |
scherfa2 | 30:e464b2bb2376 | 48 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 49 | bit0= (befehl>>0)&0x01; |
scherfa2 | 30:e464b2bb2376 | 50 | bit1= (befehl>>1)&0x01; |
scherfa2 | 30:e464b2bb2376 | 51 | bit2= (befehl>>2)&0x01; |
scherfa2 | 30:e464b2bb2376 | 52 | bit3= (befehl>>3)&0x01; |
scherfa2 | 30:e464b2bb2376 | 53 | bit4= (befehl>>4)&0x01; |
scherfa2 | 30:e464b2bb2376 | 54 | bit5= (befehl>>5)&0x01; |
scherfa2 | 30:e464b2bb2376 | 55 | bit6= (befehl>>6)&0x01; |
scherfa2 | 30:e464b2bb2376 | 56 | bit7= (befehl>>7)&0x01; |
scherfa2 | 30:e464b2bb2376 | 57 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 58 | E=0; |
scherfa2 | 30:e464b2bb2376 | 59 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 60 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 61 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 62 | bit0=0; |
scherfa2 | 30:e464b2bb2376 | 63 | bit1=0; |
scherfa2 | 30:e464b2bb2376 | 64 | bit2=0; |
scherfa2 | 30:e464b2bb2376 | 65 | bit3=0; |
scherfa2 | 30:e464b2bb2376 | 66 | bit4=0; |
scherfa2 | 30:e464b2bb2376 | 67 | bit5=0; |
scherfa2 | 30:e464b2bb2376 | 68 | bit6=0; |
scherfa2 | 30:e464b2bb2376 | 69 | bit7=0; |
scherfa2 | 30:e464b2bb2376 | 70 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 71 | /* |
scherfa2 | 30:e464b2bb2376 | 72 | PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 73 | _delay_ms(1); // delay>40ns tAS |
scherfa2 | 30:e464b2bb2376 | 74 | PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 75 | _delay_ms(1); // delay>460ns tpw |
scherfa2 | 30:e464b2bb2376 | 76 | PORTA = Befehl; // Daten für Befehl |
scherfa2 | 30:e464b2bb2376 | 77 | _delay_ms(1); // delay>80ns tsp2 |
scherfa2 | 30:e464b2bb2376 | 78 | PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 79 | _delay_ms(1); // delay>10ns thd1 &(5ns thd2) |
scherfa2 | 30:e464b2bb2376 | 80 | PORTB= PORTB & 0b11111100; // RW=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 81 | PORTA= 0; // Port A löschen (gesendete Daten) |
scherfa2 | 30:e464b2bb2376 | 82 | _delay_ms(1); // alle delays ab E=1 >500ns tc |
scherfa2 | 30:e464b2bb2376 | 83 | |
scherfa2 | 30:e464b2bb2376 | 84 | */ |
scherfa2 | 30:e464b2bb2376 | 85 | } |
scherfa2 | 30:e464b2bb2376 | 86 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 87 | Sende-Zeichen-Funktion für das Display Midas |
scherfa2 | 30:e464b2bb2376 | 88 | Es können ASCI basierende Zeichen gesendet werden wie 'A' etc. |
scherfa2 | 30:e464b2bb2376 | 89 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 90 | void DisplaySendeZeichen(unsigned char Zeichen) |
scherfa2 | 30:e464b2bb2376 | 91 | { |
scherfa2 | 30:e464b2bb2376 | 92 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 93 | E=0; |
scherfa2 | 30:e464b2bb2376 | 94 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 95 | RS=1; |
scherfa2 | 30:e464b2bb2376 | 96 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 97 | E=1; |
scherfa2 | 30:e464b2bb2376 | 98 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 99 | bit0= (Zeichen>>0)&0x01; |
scherfa2 | 30:e464b2bb2376 | 100 | bit1= (Zeichen>>1)&0x01; |
scherfa2 | 30:e464b2bb2376 | 101 | bit2= (Zeichen>>2)&0x01; |
scherfa2 | 30:e464b2bb2376 | 102 | bit3= (Zeichen>>3)&0x01; |
scherfa2 | 30:e464b2bb2376 | 103 | bit4= (Zeichen>>4)&0x01; |
scherfa2 | 30:e464b2bb2376 | 104 | bit5= (Zeichen>>5)&0x01; |
scherfa2 | 30:e464b2bb2376 | 105 | bit6= (Zeichen>>6)&0x01; |
scherfa2 | 30:e464b2bb2376 | 106 | bit7= (Zeichen>>7)&0x01; |
scherfa2 | 30:e464b2bb2376 | 107 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 108 | E=0; |
scherfa2 | 30:e464b2bb2376 | 109 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 110 | RS=0; |
scherfa2 | 30:e464b2bb2376 | 111 | RW=0; |
scherfa2 | 30:e464b2bb2376 | 112 | bit0=0; |
scherfa2 | 30:e464b2bb2376 | 113 | bit1=0; |
scherfa2 | 30:e464b2bb2376 | 114 | bit2=0; |
scherfa2 | 30:e464b2bb2376 | 115 | bit3=0; |
scherfa2 | 30:e464b2bb2376 | 116 | bit4=0; |
scherfa2 | 30:e464b2bb2376 | 117 | bit5=0; |
scherfa2 | 30:e464b2bb2376 | 118 | bit6=0; |
scherfa2 | 30:e464b2bb2376 | 119 | bit7=0; |
scherfa2 | 30:e464b2bb2376 | 120 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 121 | |
scherfa2 | 30:e464b2bb2376 | 122 | |
scherfa2 | 30:e464b2bb2376 | 123 | /*PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 124 | PORTB= PORTB | 0b00000001; // RS=1 |
scherfa2 | 30:e464b2bb2376 | 125 | _delay_ms(1); // delay>40ns tsp1 |
scherfa2 | 30:e464b2bb2376 | 126 | PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 127 | _delay_ms(1); // delay>230ns tpw |
scherfa2 | 30:e464b2bb2376 | 128 | PORTA = Zeichen; // Daten für Zeichen |
scherfa2 | 30:e464b2bb2376 | 129 | _delay_ms(1); // delay>80ns tsp2 |
scherfa2 | 30:e464b2bb2376 | 130 | PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin |
scherfa2 | 30:e464b2bb2376 | 131 | _delay_ms(1); // delay>10ns thd1 &(5ns thd2) |
scherfa2 | 30:e464b2bb2376 | 132 | PORTB= PORTB & 0b11111100; // RW=0,RS=0 |
scherfa2 | 30:e464b2bb2376 | 133 | PORTA= 0; // Port A löschen (gesendete Daten) |
scherfa2 | 30:e464b2bb2376 | 134 | _delay_ms(1); // alle delays ab E=1 >500ns tc*/ |
scherfa2 | 30:e464b2bb2376 | 135 | |
scherfa2 | 30:e464b2bb2376 | 136 | } |
scherfa2 | 30:e464b2bb2376 | 137 | |
scherfa2 | 30:e464b2bb2376 | 138 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 139 | Sende-String-Funktion für das Display Midas |
scherfa2 | 30:e464b2bb2376 | 140 | Es können ASCI basierende Strings gesendet werden wie "ABC" etc. |
scherfa2 | 30:e464b2bb2376 | 141 | Der Sendestring ist auf 20 Zeichen beschränkt, da eine Display- |
scherfa2 | 30:e464b2bb2376 | 142 | Lein ebenfalls nur 20 Felder besitzt. |
scherfa2 | 30:e464b2bb2376 | 143 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 144 | void DisplaySendeString(char *String) |
scherfa2 | 30:e464b2bb2376 | 145 | { |
scherfa2 | 30:e464b2bb2376 | 146 | int x; |
scherfa2 | 30:e464b2bb2376 | 147 | for(x = 0; (x < 20) && (*String != 0); x++) // solange ein Zeichen=0 ist |
scherfa2 | 30:e464b2bb2376 | 148 | { |
scherfa2 | 30:e464b2bb2376 | 149 | DisplaySendeZeichen(*String); // Zeichen durch Pointer |
scherfa2 | 30:e464b2bb2376 | 150 | String++; // Pointer auf nächstes Zeichen |
scherfa2 | 30:e464b2bb2376 | 151 | } |
scherfa2 | 30:e464b2bb2376 | 152 | } |
scherfa2 | 30:e464b2bb2376 | 153 | |
scherfa2 | 30:e464b2bb2376 | 154 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 155 | Midas Display Initalisierungs-Fuktion |
scherfa2 | 30:e464b2bb2376 | 156 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 157 | void DisplayInit() |
scherfa2 | 30:e464b2bb2376 | 158 | { |
scherfa2 | 30:e464b2bb2376 | 159 | wait_ms(40); |
scherfa2 | 30:e464b2bb2376 | 160 | DisplaySendeBefehl(0b00111100); // |
scherfa2 | 30:e464b2bb2376 | 161 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 162 | DisplaySendeBefehl(0b00111100); |
scherfa2 | 30:e464b2bb2376 | 163 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 164 | DisplaySendeBefehl(0b00001000); |
scherfa2 | 30:e464b2bb2376 | 165 | wait_ms(1); |
scherfa2 | 30:e464b2bb2376 | 166 | DisplaySendeBefehl(0b00000001); |
scherfa2 | 30:e464b2bb2376 | 167 | wait_ms(3); |
scherfa2 | 30:e464b2bb2376 | 168 | DisplaySendeBefehl(0b00000110); |
scherfa2 | 30:e464b2bb2376 | 169 | |
scherfa2 | 30:e464b2bb2376 | 170 | |
scherfa2 | 30:e464b2bb2376 | 171 | |
scherfa2 | 30:e464b2bb2376 | 172 | |
scherfa2 | 30:e464b2bb2376 | 173 | |
scherfa2 | 30:e464b2bb2376 | 174 | |
scherfa2 | 30:e464b2bb2376 | 175 | /*_delay_ms(20); // delay>15ms |
scherfa2 | 30:e464b2bb2376 | 176 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 177 | _delay_ms(5); // delay>4.1ms |
scherfa2 | 30:e464b2bb2376 | 178 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 179 | _delay_ms(5); // delay>100us |
scherfa2 | 30:e464b2bb2376 | 180 | DisplaySendeBefehl(0b00110000); // Instruktion |
scherfa2 | 30:e464b2bb2376 | 181 | DisplaySendeBefehl(0b00111100); // 8bit-,2line-,5x11dots mode |
scherfa2 | 30:e464b2bb2376 | 182 | DisplaySendeBefehl(0b00001000); // Display off |
scherfa2 | 30:e464b2bb2376 | 183 | DisplaySendeBefehl(0b00000001); // Display clear |
scherfa2 | 30:e464b2bb2376 | 184 | DisplaySendeBefehl(0b00000110); // Entry mode set*/ |
scherfa2 | 30:e464b2bb2376 | 185 | } |
scherfa2 | 30:e464b2bb2376 | 186 | |
scherfa2 | 30:e464b2bb2376 | 187 | /************************************************************** |
scherfa2 | 30:e464b2bb2376 | 188 | Gehe zu X, Y -Funktion für das Display. |
scherfa2 | 30:e464b2bb2376 | 189 | X ist die Horizontale, Y die Vertikale |
scherfa2 | 30:e464b2bb2376 | 190 | X muss 20<=x>0 sein / Y muss 4<=y>0 sein |
scherfa2 | 30:e464b2bb2376 | 191 | |
scherfa2 | 30:e464b2bb2376 | 192 | Zeilen des Displays wie folgt: |
scherfa2 | 30:e464b2bb2376 | 193 | y |
scherfa2 | 30:e464b2bb2376 | 194 | 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 | 195 | 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 | 196 | 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 | 197 | 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 | 198 | **************************************************************/ |
scherfa2 | 30:e464b2bb2376 | 199 | void gotoxy(unsigned char x, unsigned char y) |
scherfa2 | 30:e464b2bb2376 | 200 | { |
scherfa2 | 30:e464b2bb2376 | 201 | unsigned char data = 0; |
scherfa2 | 30:e464b2bb2376 | 202 | |
scherfa2 | 30:e464b2bb2376 | 203 | switch (y) |
scherfa2 | 30:e464b2bb2376 | 204 | { |
scherfa2 | 30:e464b2bb2376 | 205 | case 1: |
scherfa2 | 30:e464b2bb2376 | 206 | data = 0b10000000 | (0x00+x-1); // +0 (0x00) |
scherfa2 | 30:e464b2bb2376 | 207 | break; |
scherfa2 | 30:e464b2bb2376 | 208 | |
scherfa2 | 30:e464b2bb2376 | 209 | case 2: // |
scherfa2 | 30:e464b2bb2376 | 210 | data = 0b10000000 | (0x14+x-1); // +20 (0x14) |
scherfa2 | 30:e464b2bb2376 | 211 | break; |
scherfa2 | 30:e464b2bb2376 | 212 | |
scherfa2 | 30:e464b2bb2376 | 213 | case 3: |
scherfa2 | 30:e464b2bb2376 | 214 | data = 0b10000000 | (0x40+x-1); // +64 (0x40) |
scherfa2 | 30:e464b2bb2376 | 215 | break; |
scherfa2 | 30:e464b2bb2376 | 216 | |
scherfa2 | 30:e464b2bb2376 | 217 | case 4: |
scherfa2 | 30:e464b2bb2376 | 218 | data = 0b10000000 | (0x54+x-1); // +84 (0x54) |
scherfa2 | 30:e464b2bb2376 | 219 | break; |
scherfa2 | 30:e464b2bb2376 | 220 | |
scherfa2 | 30:e464b2bb2376 | 221 | } |
scherfa2 | 30:e464b2bb2376 | 222 | DisplaySendeBefehl(data); // Berechneter Übergabeparameter data |
scherfa2 | 30:e464b2bb2376 | 223 | } |
scherfa2 | 30:e464b2bb2376 | 224 | |
scherfa2 | 30:e464b2bb2376 | 225 | |
scherfa2 | 30:e464b2bb2376 | 226 |