//----------------------------------------------------------------------------- // Sprache : C // Version : 1.0 // Autor : Christian Müller - www.myAVR.de // Prozessor : ATmega640 // Takt : 16 MHz // Programmer : mySmartUSB MK3 //----------------------------------------------------------------------------- // Titel : LCD-Basics // Sample W03 - myAVR Beispiel für MK3 Board // (mehr und ausfühlicher im SiSy-Projekt im Download unter www.myAVR.de) // title : 7-Segment-display // sample W03 - myAVR sample for the MK3 board // (more details in the SiSy-project at download on www.myAVR.de) //----------------------------------------------------------------------------- // Funktion : Zeigt anhand verschiedener Beispiele auf dem Grafik-LCD // function : Shows different samples for a output on the grafic-LCD // Schaltung : Quick-Connect "LCD on Port C+A" und "LED on Port-L" auf dem MK3 Board // circuit : Quick-Connect "LCD on Port C+A" and "LED on Port-L" at the MK3 Board //----------------------------------------------------------------------------- // LCD-Informationen // // PortC = LCD-Data // PortA = LCD-Control // A7 = PS (std=High=parallel Mode) // A6 = C86 (std=High=6800 Mode) // A5 = unbenutzt // A4 = /RD = E (Schreibflanke H->L) // A3 = /WR = R/W (Low=Schreiben) // A2 = A0 (Low=ControlData; High=DisplayData) // A1 = /RES (Low=activ; std=High) // A0 = CS1 (ChipSelect=muss Low sein; std=High) // // LCD-information // // PortC = LCD-data // PortA = LCD-control // A7 = PS (std=high=parallel mode) // A6 = C86 (std=high=6800 mode) // A5 = unused // A4 = /RD = E (writing edge H->L) // A3 = /WR = R/W (low=write) // A2 = A0 (low=controldata; high=displaydata) // A1 = /RES (low=activ; std=high) // A0 = CS1 (chipselect=must be low; std=high) //-------------------------------------------------------------------------- #define F_CPU 16000000 #include #include #include #include #include #include #include #include //#define __AVR_ATmega640__ void uartPutString(char *buffer); //-------------------------------------------------------------------------- //void init(void); //de: initalisieren der Ports //en: initialise the ports void init(void) { //en: config port-L as output (for the LEDs) PortLedDDR=0xff; //en: config port-C as input whitout pullup (for LCD-Data) //en: port-C must be config as input while reading and output while writing PortLcdDataDDR=0x00; PortLcdData=0; //en: config port-A as output (for LCD-Control) //en: bit0 = CS = chip-select low-activ //en: bit1 = R/W = low=write //en: bit2 = RS = low=control, high=data //en: bit3 = E = writing edge H->L //en: bit4 = Reset = low-aktiv PortLcdCtrlDDR=0xff; PortLcdCtrl=0b1100011; } //---------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------- // Fonctions internes - affiche le logo AVR à partir du coin supérieur gauche //---------------------------------------------------------------------- void PrintAVR(uint8_t X, uint8_t Y){ //-- "A" du logo AVR MYAVRGRAPHIC_PrintLine(15-5+X,40-40+Y,20-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(20-5+X,40-40+Y,30-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(30-5+X,60-40+Y,25-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(25-5+X,60-40+Y,23-5+X,56-40+Y); MYAVRGRAPHIC_PrintLine(22-5+X,56-40+Y,13-5+X,56-40+Y); MYAVRGRAPHIC_PrintLine(12-5+X,56-40+Y,10-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(5-5+X,60-40+Y,10-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(5-5+X,60-40+Y,15-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(18-5+X,45-40+Y,22-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(17-5+X,45-40+Y,13-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(13-5+X,52-40+Y,22-5+X,52-40+Y); //-- "V" du logo AVR MYAVRGRAPHIC_PrintLine(23-5+X,40-40+Y,28-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(23-5+X,40-40+Y,34-5+X,62-40+Y); MYAVRGRAPHIC_PrintLine(34-5+X,62-40+Y,45-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(45-5+X,40-40+Y,40-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(40-5+X,40-40+Y,34-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(34-5+X,52-40+Y,28-5+X,40-40+Y); //-- "R" du logo AVR MYAVRGRAPHIC_PrintLine(38-5+X,60-40+Y,48-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(38-5+X,60-40+Y,43-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(43-5+X,60-40+Y,47-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(47-5+X,52-40+Y,50-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(50-5+X,52-40+Y,54-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(54-5+X,60-40+Y,59-5+X,60-40+Y); MYAVRGRAPHIC_PrintLine(59-5+X,60-40+Y,55-5+X,52-40+Y); MYAVRGRAPHIC_PrintLine(48-5+X,40-40+Y,55-5+X,40-40+Y); MYAVRGRAPHIC_PrintLine(49-5+X,48-40+Y,51-5+X,44-40+Y); MYAVRGRAPHIC_lcdSetPixel(50-5+X,48-40+Y); MYAVRGRAPHIC_lcdSetPixel(51-5+X,48-40+Y); MYAVRGRAPHIC_lcdSetPixel(52-5+X,48-40+Y); MYAVRGRAPHIC_lcdSetPixel(53-5+X,48-40+Y); MYAVRGRAPHIC_lcdSetPixel(54-5+X,47-40+Y); MYAVRGRAPHIC_lcdSetPixel(55-5+X,46-40+Y); MYAVRGRAPHIC_lcdSetPixel(55-5+X,45-40+Y); MYAVRGRAPHIC_lcdSetPixel(54-5+X,44-40+Y); MYAVRGRAPHIC_lcdSetPixel(53-5+X,44-40+Y); MYAVRGRAPHIC_lcdSetPixel(52-5+X,44-40+Y); MYAVRGRAPHIC_lcdSetPixel(55-5+X,51-40+Y); MYAVRGRAPHIC_lcdSetPixel(56-5+X,50-40+Y); MYAVRGRAPHIC_lcdSetPixel(57-5+X,49-40+Y); MYAVRGRAPHIC_lcdSetPixel(58-5+X,48-40+Y); MYAVRGRAPHIC_lcdSetPixel(59-5+X,47-40+Y); MYAVRGRAPHIC_lcdSetPixel(60-5+X,46-40+Y); MYAVRGRAPHIC_lcdSetPixel(60-5+X,45-40+Y); MYAVRGRAPHIC_lcdSetPixel(60-5+X,44-40+Y); MYAVRGRAPHIC_lcdSetPixel(60-5+X,43-40+Y); MYAVRGRAPHIC_lcdSetPixel(59-5+X,42-40+Y); MYAVRGRAPHIC_lcdSetPixel(58-5+X,41-40+Y); MYAVRGRAPHIC_lcdSetPixel(57-5+X,40-40+Y); MYAVRGRAPHIC_lcdSetPixel(56-5+X,40-40+Y); } int main(void) { // Init init(); PortLed=0x00; PortLed=1; //wait(100000000); MYAVRGRAPHIC_lcdInit(); MYAVRGRAPHIC_lcdClear(); // set the backlight PortLcdCtrl|=0b00100000; // Licht an //en: wait 1sec //wait(100000000); _delay_ms(500); //-------------------- //en: draw a full triangle on position 0,0 //en: set the position MYAVRGRAPHIC_lcdSetPos(0,0); //en: send the data MYAVRGRAPHIC_lcdSendData(0x80); MYAVRGRAPHIC_lcdSendData(0xC0); MYAVRGRAPHIC_lcdSendData(0xE0); MYAVRGRAPHIC_lcdSendData(0xF0); MYAVRGRAPHIC_lcdSendData(0xF8); MYAVRGRAPHIC_lcdSendData(0xFC); MYAVRGRAPHIC_lcdSendData(0xFE); MYAVRGRAPHIC_lcdSendData(0xFF); //-------------------- //en: wait _delay_ms(500); // write welcome text on line 20 MYAVRGRAPHIC_lcdSetPos(0,20); MYAVRGRAPHIC_printChain("BONJOUR ATmega640!",18); _delay_ms(2000); // clear screen MYAVRGRAPHIC_lcdClear(); //-------------------- //Affiche tous les caractères ASCII de la table int i; //print ASCII 0 to 9 MYAVRGRAPHIC_lcdSetPos(0,0); for (i = 48; i<58;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII A to M MYAVRGRAPHIC_lcdSetPos(0,8); for (i = 65; i<78;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII N to Z MYAVRGRAPHIC_lcdSetPos(0,16); for (i = 78; i<91;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII a to m MYAVRGRAPHIC_lcdSetPos(0,24); for (i = 97; i<110;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII n to z MYAVRGRAPHIC_lcdSetPos(0,32); for (i = 110; i<123;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII [ to ` MYAVRGRAPHIC_lcdSetPos(0,40); for (i = 91; i<97;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII { to ~ for (i = 123; i<128;i++){ MYAVRGRAPHIC_printChar(i); } //print ASCII char from ! to / MYAVRGRAPHIC_lcdSetPos(0,48); for (i = 33; i<48;i++){ MYAVRGRAPHIC_printChar(i); } _delay_ms(5000); MYAVRGRAPHIC_lcdClear(); //-------------------- // exemples: ligne, cercle, rectangle entier et double // dessine une ligne entre le pixcel [5,30] et le pixcel [50,5] MYAVRGRAPHIC_PrintLine(5,30,50,5); //dessine un cercle de centre [60,30] et de rayon 25 pixcels MYAVRGRAPHIC_PrintCircle(60,30,25); //dessine un carré plein de coin supérieur gauche [110,50] et de largeur 12 pixcels MYAVRGRAPHIC_PrintFullSquare(110,50,12); // dessine un rectangle de coin supérieur gauche [0,40] et de coin inférieur droit [40,70] MYAVRGRAPHIC_PrintRectangle(0,40,30,60); _delay_ms(5000); // affiche maintenant un entier négatif en haut a gauche MYAVRGRAPHIC_lcdSetPos(0,0); MYAVRGRAPHIC_afficherEntier(-123); // affiche un double en haut a droite double p; p= sqrt(2); MYAVRGRAPHIC_lcdSetPos(84,0); MYAVRGRAPHIC_afficherDouble(p,2); _delay_ms(1000); //efface l'écran MYAVRGRAPHIC_lcdClear(); //-------------------- // Mainloop //en: scroll the Display int y =0; MYAVRGRAPHIC_lcdSetPos(15,30); MYAVRGRAPHIC_printChain("Merci myAVR.fr!",15); PrintAVR(30,40); _delay_ms(2000); while (true) // Mainloop-Begin { MYAVRGRAPHIC_lcdGotoLine(y); _delay_ms(80); y++; } } //---------------------------------------------------------------------------