/**********************************************************************************************/ // Bezeichner definieren /**********************************************************************************************/ #pragma code #define I_Temp LATAbits.LATA0 #define U_Bat LATAbits.LATA1 #define DCF_LED LATAbits.LATA2 #define DCF_Data LATAbits.LATA3 #define Piezo LATAbits.LATA4 #define DCF_PON LATAbits.LATA5 #define GLCD_RES LATBbits.LATB0 #define GLCD_RS LATCbits.LATC2 #define GLCD_RW LATCbits.LATC7 #define GLCD_E LATCbits.LATC6 #define GLCD_Data LATD #define Backlight LATEbits.LATE1 #define O_Temp LATEbits.LATE2 #define Oben LATEbits.LATE0 //(y+) #define Unten LATBbits.LATB3 //(y-) #define Rechts LATBbits.LATB4 //(x-) #define Links LATBbits.LATB5 //(x+) /**********************************************************************************************/ // Programme /**********************************************************************************************/ void DCF77(void); void Setup_ADC(); void BCD_Einer(void); void BCD_Zehner(void); void BCD_Hunderter(void); void BCD_Tausender(void); void CheckTime(void); void DCF_Bits(void); void low_isr( void ); void Position(void); void high_isr( void ); void GLCD_Busy(void); void GLCD_Clear(void); void GLCD_Enable(void); void CheckBattery(void); void Alarm(unsigned char cycle); void GLCD_write(unsigned char info); void Read_ADC(unsigned char Channel); void GLCD_writecom(unsigned char info); void GLCD_writebyte(unsigned char info); void GLCD_writedata(unsigned char info); void GLCD_Setpixel(unsigned char x, unsigned char y); void GLCD_SetAdress(unsigned char x, unsigned char y); void GLCD_Line (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2); /**********************************************************************************************/ // Initialisiert das Grafik LCD (Grafik Mode) /**********************************************************************************************/ void GLCD_Init_G(void) { GLCD_RES=0; Delay10KTCYx(1); GLCD_RES=1; GLCD_writecom(0x01); // Character Pitch GLCD_writedata(0x77); // Chars GLCD_writecom(0x02); // Number of Characters GLCD_writedata(19); // 20-1 (0-19) GLCD_writecom(0x08); // Start Adresse Low GLCD_writedata(0x00); // 0 GLCD_writecom(0x09); // Start Adresse High GLCD_writedata(0x00); // 0 // GLCD_writecom(0x0A); // Start Adresse Low // GLCD_writedata(0x00); // 0 // GLCD_writecom(0x0B); // Start Adresse High // GLCD_writedata(0x00); // 0 GLCD_writecom(0x03); // Set Duty GLCD_writedata(79); // 80-1 (0-79) GLCD_writecom(0x00); // Mode Con GLCD_writedata(0x32); // Grafik Mode GLCD_Clear(); // GLCD Inhalt löschen } /**********************************************************************************************/ // Initialisiert das Grafik LCD (Charakter Mode) /**********************************************************************************************/ void GLCD_Init_C(void) { GLCD_RES=0; Delay10KTCYx(1); GLCD_RES=1; GLCD_writecom(0x00); // Mode Con GLCD_writedata(0x30); // Character Mode, Cursor off GLCD_writecom(0x01); // Character Pitch GLCD_writedata(0x77); // 8x8 Chars GLCD_writecom(0x02); // Number of Characters GLCD_writedata(19); // 20-1 (0-19) GLCD_writecom(0x03); // Set Duty GLCD_writedata(79); // 80-1 (0-79) GLCD_writecom(0x04); // Cursor Position GLCD_writedata(0x07); // Line 1 GLCD_writecom(0x08); // Start Adresse Low GLCD_writedata(0x00); // 0 GLCD_writecom(0x09); // Start Adresse High GLCD_writedata(0x00); // 0 GLCD_writecom(0x0A); // Cursor lower adress GLCD_writedata(0x00); // 0 GLCD_writecom(0x0B); // Cursor upper adress GLCD_writedata(0x00); // 0 GLCD_Clear(); // GLCD Inhalt löschen } /**********************************************************************************************/ // Setzt die entsprechenden Bits zum Senden von Daten /**********************************************************************************************/ void GLCD_writedata(unsigned char info) { GLCD_RS=0; GLCD_write(info); } /**********************************************************************************************/ // Setzt die entsprechenden Bits zum Senden eines Befehls /**********************************************************************************************/ void GLCD_writecom(unsigned char info) { GLCD_Busy(); GLCD_RS=1; GLCD_write(info); } /**********************************************************************************************/ // Überträgt Daten/Befehle an das Grafik LCD /**********************************************************************************************/ void GLCD_write(unsigned char info) { GLCD_RW=0; GLCD_Data=info; Delay10TCYx(1); GLCD_Enable(); } /**********************************************************************************************/ // Kontrolliert ob das Display fertig ist /**********************************************************************************************/ void GLCD_Busy(void) { // GLCD_RW=1; // GLCD_RS=1; // GLCD_Enable(); // TRISD=0x80; // while(LATDbits.LATD7){} // TRISD=0x00; Delay10TCYx(1); } /**********************************************************************************************/ // Setzt die Enable Leitung auf: High|Pause|Low /**********************************************************************************************/ void GLCD_Enable(void) { GLCD_E=1; Delay10TCYx(1); GLCD_E=0; } /**********************************************************************************************/ // Löscht den gesamten Inhalt des Displays /**********************************************************************************************/ void GLCD_Clear(void) { unsigned int i; GLCD_SetAdress(0,0); for (i=0; i<160/8*80; i++) GLCD_writebyte(0); } /**********************************************************************************************/ // Stellt "die" Adresse ein /**********************************************************************************************/ void GLCD_SetAdress(unsigned char x, unsigned char y) { unsigned int adress; adress=y*20+x; GLCD_writecom(0x0A); // write adress low GLCD_writedata(adress&255); GLCD_writecom(0x0B); // write adress high GLCD_writedata(adress/256); } /**********************************************************************************************/ // Auf das Display schreiben /**********************************************************************************************/ void GLCD_writebyte(unsigned char info) { GLCD_writecom(0x0C); GLCD_writedata(info); } /**********************************************************************************************/ // GLCD Set Pixel /**********************************************************************************************/ void GLCD_Setpixel(unsigned char x, unsigned char y) { if ((x>=160)||(y>=80)) { return; } GLCD_SetAdress(x/8,y); GLCD_writecom(0x0F); GLCD_writedata(x&7); } /**********************************************************************************************/ // GLCD Line /**********************************************************************************************/ void GLCD_Line (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) { unsigned char temp; if (y1==y2) { if (x1>x2) { temp=x1; x1=x2; x2=temp; } for (temp=x1; temp<=x2; temp++) GLCD_Setpixel (temp,y1); } else if (x1==x2) { if (y1>y2) { temp=y1; y1=y2; y2=temp; } for (temp=y1; temp<=y2; temp++) GLCD_Setpixel (x1,temp); } }