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