PES_4_Spleisser / Mbed 2 deprecated SpleisserProgramm_v2

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Display.cpp Source File

Display.cpp

00001 #include "SETUP.h"
00002 
00003 
00004 DigitalOut RS(DISP_RS);
00005 DigitalOut RW(DISP_RW);
00006 DigitalOut E(DISP_E);
00007 DigitalOut bit0(DISP_B0);
00008 DigitalOut bit1(DISP_B1);
00009 DigitalOut bit2(DISP_B2);
00010 DigitalOut bit3(DISP_B3);
00011 DigitalOut bit4(DISP_B4);
00012 DigitalOut bit5(DISP_B5);
00013 DigitalOut bit6(DISP_B6);
00014 DigitalOut bit7(DISP_B7);
00015 
00016 /**************************************************************
00017 Sendebefehls-Funktion für das Display MIDAS
00018 E=Enable, RS= Register Select Signal, RW= Data Read/Wirte
00019 Siehe MIDAS Datasheet 6.3.1 Write Mode Timing Diagramm
00020 **************************************************************/
00021 void DisplaySendeBefehl(unsigned char befehl)
00022 {
00023     RW=0;
00024     E=0;
00025     RS=0;
00026     wait_us(1);                     //delay>0
00027     E=1;
00028     wait_ms(1);  
00029     bit0= (befehl>>0)&0x01;                 
00030     bit1= (befehl>>1)&0x01;
00031     bit2= (befehl>>2)&0x01;
00032     bit3= (befehl>>3)&0x01;
00033     bit4= (befehl>>4)&0x01;
00034     bit5= (befehl>>5)&0x01;
00035     bit6= (befehl>>6)&0x01;
00036     bit7= (befehl>>7)&0x01;
00037     wait_ms(1);
00038     E=0;
00039     wait_ms(1);
00040     RS=0;
00041     RW=0;
00042     bit0=0;
00043     bit1=0;
00044     bit2=0;
00045     bit3=0;
00046     bit4=0;
00047     bit5=0;
00048     bit6=0;
00049     bit7=0;
00050     wait_ms(1); 
00051     /*
00052     PORTB= PORTB & 0b11111000;      // RW=0,E=0,RS=0    
00053     _delay_ms(1);                   // delay>40ns tAS
00054     PORTB= PORTB | 0b00000100;      // E=1, Rest wie bis anhin  
00055     _delay_ms(1);                   // delay>460ns tpw
00056     PORTA = Befehl;                 // Daten für Befehl
00057     _delay_ms(1);                   // delay>80ns tsp2          
00058     PORTB= PORTB & 0b11111011;      // E=0, Rest wie bis anhin
00059     _delay_ms(1);                   // delay>10ns thd1 &(5ns thd2)
00060     PORTB= PORTB & 0b11111100;      // RW=0,RS=0
00061     PORTA= 0;                       // Port A löschen (gesendete Daten)
00062     _delay_ms(1);                   // alle delays ab E=1 >500ns tc
00063     
00064     */
00065 }
00066 /**************************************************************
00067 Sende-Zeichen-Funktion für das Display Midas
00068 Es können ASCI basierende Zeichen gesendet werden wie 'A' etc.
00069 **************************************************************/
00070 void DisplaySendeZeichen(unsigned char Zeichen)
00071 {
00072     RW=0;
00073     E=0;
00074     RS=0;
00075     RS=1;
00076     wait_ms(1);
00077     E=1;
00078     wait_ms(1);
00079     bit0= (Zeichen>>0)&0x01;                 
00080     bit1= (Zeichen>>1)&0x01;
00081     bit2= (Zeichen>>2)&0x01;
00082     bit3= (Zeichen>>3)&0x01;
00083     bit4= (Zeichen>>4)&0x01;
00084     bit5= (Zeichen>>5)&0x01;
00085     bit6= (Zeichen>>6)&0x01;
00086     bit7= (Zeichen>>7)&0x01;
00087     wait_ms(1);
00088     E=0;
00089     wait_ms(1);
00090     RS=0;
00091     RW=0;
00092     bit0=0;
00093     bit1=0;
00094     bit2=0;
00095     bit3=0;
00096     bit4=0;
00097     bit5=0;
00098     bit6=0;
00099     bit7=0;
00100     wait_ms(1);
00101     
00102     
00103     /*PORTB= PORTB & 0b11111000;      // RW=0,E=0,RS=0
00104     PORTB= PORTB | 0b00000001;      // RS=1
00105     _delay_ms(1);                   // delay>40ns tsp1
00106     PORTB= PORTB | 0b00000100;      // E=1, Rest wie bis anhin
00107     _delay_ms(1);                   // delay>230ns tpw
00108     PORTA = Zeichen;                // Daten für Zeichen
00109     _delay_ms(1);                   // delay>80ns tsp2      
00110     PORTB= PORTB & 0b11111011;      // E=0, Rest wie bis anhin
00111     _delay_ms(1);                   // delay>10ns thd1 &(5ns thd2)
00112     PORTB= PORTB & 0b11111100;      // RW=0,RS=0    
00113     PORTA= 0;                       // Port A löschen (gesendete Daten)                 
00114     _delay_ms(1);                   // alle delays ab E=1 >500ns tc*/
00115     
00116 }
00117 
00118 /**************************************************************
00119 Sende-String-Funktion für das Display Midas
00120 Es können ASCI basierende Strings gesendet werden wie "ABC" etc.
00121 Der Sendestring ist auf 20 Zeichen beschränkt, da eine Display-
00122 Lein ebenfalls nur 20 Felder besitzt. 
00123 **************************************************************/
00124 void DisplaySendeString(char *String)
00125 {
00126     int x;
00127     for(x = 0; (x < 20) && (*String != 0); x++) // solange ein Zeichen=0 ist
00128     {
00129         DisplaySendeZeichen(*String);   // Zeichen durch Pointer
00130         String++;                       // Pointer auf nächstes Zeichen
00131     }
00132 }
00133 
00134 /**************************************************************
00135 Midas Display Initalisierungs-Fuktion
00136 **************************************************************/
00137 void DisplayInit()
00138 {
00139     wait_ms(40);
00140     DisplaySendeBefehl(0b00111100); //
00141     wait_ms(1);
00142     DisplaySendeBefehl(0b00111100);
00143     wait_ms(1);
00144     DisplaySendeBefehl(0b00001000);  
00145     wait_ms(1);
00146     DisplaySendeBefehl(0b00000001);
00147     wait_ms(3);
00148     DisplaySendeBefehl(0b00000110);
00149      
00150     
00151          
00152        
00153         
00154 
00155     /*_delay_ms(20);                     // delay>15ms
00156     DisplaySendeBefehl(0b00110000);     // Instruktion
00157     _delay_ms(5);                       // delay>4.1ms  
00158     DisplaySendeBefehl(0b00110000);     // Instruktion
00159     _delay_ms(5);                       // delay>100us 
00160     DisplaySendeBefehl(0b00110000);     // Instruktion
00161     DisplaySendeBefehl(0b00111100);     // 8bit-,2line-,5x11dots mode
00162     DisplaySendeBefehl(0b00001000);     // Display off
00163     DisplaySendeBefehl(0b00000001);     // Display clear
00164     DisplaySendeBefehl(0b00000110);     // Entry mode set*/
00165 }
00166 
00167 /**************************************************************
00168  Gehe zu X, Y -Funktion für das Display.
00169  X ist die Horizontale, Y die Vertikale 
00170  X muss 20<=x>0 sein / Y muss 4<=y>0 sein
00171  
00172  Zeilen des Displays wie folgt:
00173  y
00174  1. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
00175  3. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
00176  2. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
00177  4. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
00178 **************************************************************/
00179 void gotoxy(unsigned char x, unsigned char y)
00180 {
00181     unsigned char data = 0; 
00182         
00183     switch (y)      
00184     {
00185         case 1:
00186         data = 0b10000000 | (0x00+x-1); // +0 (0x00)
00187         break;
00188         
00189         case 2: //
00190         data = 0b10000000 | (0x14+x-1); // +20 (0x14)
00191         break;
00192         
00193         case 3:
00194         data = 0b10000000 | (0x40+x-1); // +64 (0x40)
00195         break;
00196         
00197         case 4:
00198         data = 0b10000000 | (0x54+x-1); // +84 (0x54)
00199         break;
00200         
00201     }
00202     DisplaySendeBefehl(data); // Berechneter Übergabeparameter data
00203 }
00204 
00205 
00206