Source code. #undef F_CPU. #define F_CPU 8000000UL. #include <avr/io.h> #include <avr/delay.h> #include <string.h> #include <avr/eeprom.

Relevanta dokument
EITF11 - Digitala Projekt

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Digitala Projekt(EITF40) - Larm

Digitala Projekt(EITF40) - Larm

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Växtviskaren EITF11 Digitala projekt VT15, I12

The Phenomenal Doorbell Bilaga 2. Källkod

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Källkod. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define green_diode PD5. #define RS PD4

Effektpedal för elgitarr

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

DIGITALA PROJEKT (EITF40) Fartmätare

Pulsmätare Digitala Projekt EITF11

Digitala Projekt (EITF11) Hemlarm

1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

Digitala projekt VT Myran

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

Thunder s Truck projektrapport

Digitala Projekt EITF11 Grupp 9 Projektarbete Hanna Bondesson Marcus Skog. Reaktionsspel EITF11

Modbus Seriell Kommunikation

Rapportsammanfattning. Optima Sous Vide

/* * dancing3.c * * Created: :53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.

Department of Information Technology Digitala Projekt Frysboxregulator. 10 december 2007

Väderstation. Digitala Projekt EITF11 Institutionen för Elektro- och Informationsteknik Lunds Tekniska Högskola

Microprocessor / Microcontroller

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Kontrollskrivning Mikrodatorteknik CDT S2-704

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

Digitala Projekt. Chip Quiz. Projektmedlemmar: Olov Nordenstam och Linus Hägerbrand. Grupp 9

HockeyMate Projektarbete i EITF40 - Digitala Projekt Institutionen för elektro- och informationsteknik

Digitala projekt HT 2007 PONG

LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

Aml Abbas, Ali Darwish, Ehsanolah Hafezi, Fatima Zahra Doussi Grupp 15

Att använda pekare i. C-kod

SIMON SAYS Projekt i EITF11 Digitala Projekt

Projektrapport Digitala System

Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

Rapport i Digitala Projekt (EDI021)

Digitala Projekt (EITF11) Larmanläggning

Kla ggvisarskylt. -med en underton av rassel. av Jonathan So nnerup & Gabriel Jo nsson

EIT. Digitala projekt EITF11. Larmanläggning. Handledare Bertil Lindvall Anna Lindberg I-11 Caroline Vitasp I-11 Eric Eliason I-10

Rörelse- och temperaturkänsligt larmsystem

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Referensguide för streckkoder

Lunds Tekniska Högskola. I-10 Grupp 11: David Sundström Max Schulz Albert Lundberg Handledare: Bertil Lindvall

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Projektrapport. Gadget ett övervakningssystem för hem och företag

Bilen som inte kan krocka

High Core Remote Car X8000 Cool

Programmeringsteknik med C och Matlab

Övning 7. Timer, serieport

Arduinokurs. Kurstillfälle 4

Vi har i kursen Digitala Projekt EITF11 byggt en spelkonsol på vilken man kan spela Snake. Mjukvaran programmerades i C på en AVR Mega32 processor.

Projektrapport - RoboWalter

Övning 6. Parallellport, timer

Lösningsförslag, tentamen FYTA11 Javaprogrammering

OOP Objekt-orienterad programmering

Digitala Projekt. Ljuskänslig riktningsautomatik. Rasmus Persson dt08rp9@student.lth.se Max Åkesson dt07ma4@student.lth.

Pulsmätare. EITF11 Digitala Projekt VT15. Grupp 9: Emma Albertz, Mathilde Hagander & Alexandra Mansner Handledare: Andreas Johansson & Bertil Lindvall

Hantering av textsträngar och talsträngar. William Sandqvist

Tentamen OOP

Tidsstyrd persiennöppnare

DIGITALA PROJEKT - EITF11

EITF11 - Digitala projekt. Hastighetsmätare. Hugo Backmyr Mattias Karlsson

A-del motsvarande KS1

Drivrutiner för att hantera teckenfönster.

Programmering A. Johan Eliasson

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

EITF11: Bandkanon Grp 05

Projektrapport Målgång

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Digitala Projekt: Digitala Projekt, EITF11 - VT17 Oscar Ahlgren, Patrik Lorentsson och Sten Hellberg Handledare: Bertil Lindvall

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen

KRYPTERING. 23 maj. Vilken jävla duart?

Skizz till en enkel databas

AVR 5. Styrning av trafikljus. Digitala system 15 p

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

THE VISUAL EGGTIMER. Skola: Lunds Tekniska Högskola Institution: Elektro- och informationsteknik Kurs: Digitala projekt (EITF11)

Introduktion till arv

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Musen. Författare: Joel Guedj e02jg Erik Dahlbäck e02ed. Handledare: Bertil Lindvall. Digitala Projekt SK 2005

Lektion 1 - Programmeringsteknik F1, ht 2003

Digitala projekt VT Väderstationen. Av: Andreas Cremon E04 grupp 15 26/2-2007

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

Programexempel: tärningsspel

Enkla datatyper minne

TDIU01 - Programmering i C++, grundkurs

EDI022. Digitala Projekt. Rapport. Björn Åkesson 5/20/2011

Projektrapport - Feststation

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Transkript:

Source code #undef F_CPU #define F_CPU 8000000UL #include <avr/io.h> #include <avr/delay.h> #include <string.h> #include <avr/eeprom.h> #define LCD_DATA_PORT #define LCD_DATA_DDR #define LCD_DATA_PIN PORTA DDRA PINA #define LCD_RS_PIN 1 #define LCD_RW_PIN 2 #define LCD_ENABLE_PIN 3 #define LCD_7_PIN 7 #define LCD_6_PIN 6 #define LCD_5_PIN 5 #define LCD_4_PIN 4 void LCD_goto(unsigned char y, unsigned char x); unsigned char hexbreaker(unsigned char c, int i); void LCD_print(char *string); double ReadDoubleFromEeprom(void); unsigned char bestmean; unsigned int random; double newround(void); double mean; double best;

double highscore; double EEMEM EEVar; void main(void){ setddr(); highscore = ReadDoubleFromEeprom(); LCDinit(); standby(); // Sätter spelet i vänteläge och printar welcome samt bästa tiden, som hämtas från eepromen void standby(void){ LCD_clear(); random = 0; LCD_goto(0,0); LCD_print("Welcome! Start->"); LCD_goto(1,0); LCD_print("Best:"); LCD_print(dtostrf(highscore)); led_standby(); unsigned char t = 0x11; while(t!= 0x00){ unsigned char u = PINA; t = u << 7; randomtick();

newgame(); // Sparar bästa tid (double) på eepromen void WriteDoubleToEeprom(double x){ eeprom_write_block((const void*)&x, (void*)&eevar, sizeof(double)); // Hämtar bästa tid (double) från eepromen double ReadDoubleFromEeprom(void){ double temp; eeprom_read_block((void*)&temp, (const void*)&eevar, sizeof(double)); return(temp); // Startar en ny omgång om 10 spelomgångar. Hålller även koll på // tiderna mean och best från spelomgången. void newgame(void){ mean = 0; best = 5000; led_allgreen();

LCD_clear(); LCD_goto(0,0); LCD_print("3 "); _delay_ms(1000); LCD_print("2 "); _delay_ms(1000); LCD_print("1 "); _delay_ms(1000); LCD_clear(); LCD_goto(0,0); LCD_print("Game on!"); for(int k = 0; k < 10; k++){ randomtick(); unsigned int temp = newround(); mean = mean + temp; if(temp < best) { best = temp; mean = mean/10; if(mean < highscore highscore == 0){ highscore = mean; gameover(); standby();

// Visar bästa tid och medelvärdestid från spelomgången. void gameover(void) { WriteDoubleToEeprom(highscore); LCD_clear(); led_standby(); LCD_goto(0,0); LCD_print("Fastest: "); LCD_print(dtostrf(best)); LCD_goto(1,0); LCD_print("Mean: "); LCD_print(dtostrf(mean)); while((pinb & (1<<4))){ // 0xE7 PINB!= 0xEF) { randomtick(); // Skapar en ny runda (anropas av newgame). Returnerar hur lång tid // rundan tog. double newround(void){ int time = 0; _delay_ms(random*1000 + 500);

randomtick(); if(random == 0) { led_northred(); while((pinb & (1<<4))) { time = time + 1; randomtick(); led_allgreen(); return time; if(random == 1) { led_westred(); while(pinb!= 0x7F) { time = time + 1; randomtick(); led_allgreen(); return time; if(random == 2) { led_eastred(); while(pinb!= 0xBF) {

time = time + 1; randomtick(); led_allgreen(); return time; if(random == 3) { led_southred(); while(pinb!= 0xDF) { time = time + 1; randomtick(); led_allgreen(); return time; // Genererar ett tal mellan 0 och 3. void randomtick(void){ if(random == 3){ random = 0;

else{ random ++; // Initialisering av LCD-displayen. void LCDinit(void){ _delay_ms(16); LCD_send_command8(0x30); // setup _delay_ms(5); LCD_send_command8(0x30); // setup _delay_us(100); LCD_send_command8(0x30); // setup LCD_send_command8(0x20); // setup LCD_send_command8(0x20); // LCD_send_command8(0x80); // 4bit interface, dual line // LCD_send_command8(0x00); // LCD_send_command8(0xC0); // Display on, cursor on, blink off E0 //

LCD_send_command8(0x00); // LCD_send_command8(0x10); // Display clear LCD_send_command8(0x00); // LCD_send_command8(0x60); //I/D, S // LCD_send_command8(0xF0); //DCB isch, Får den att skriva i rätt riktning LCD_send_command8(0x02); // DB7, DB6, RS. Write data to CG/DD RAM // Initialisering av DDR (sätter outputs). void setddr(void) { DDRA = 0xFE; DDRC = 0xC3; DDRD = 0xFF; DDRB = 0x00; PORTC = 0xC3; PORTD = 0xFF;

// Alla LED lyser blått. void led_standby(void){ PORTC = 0x83; PORTD = 0x6D; // Alla LED lyser grönt. void led_allgreen(void){ PORTC = 0xC1; PORTD = 0xB6; // Norra lampan lyser rött, resterande grönt. void led_northred(void){ PORTC = 0xC2; PORTD = 0xB6; // Västra lampan lyser rött, resterande grönt. void led_westred(void){ PORTC = 0xC1;

PORTD = 0xBA; // Östra lampan lyser rött, resterande grönt. void led_eastred(void){ PORTC = 0xC1; PORTD = 0xD6; // Södra lampan lyser rött, resterande grönt. void led_southred(void){ PORTC = 0x41; PORTD = 0xB7; // Bestämmer vart på LCD:n man ska skriva. // y = 0 -> rad 1 // y = 2 -> rad 2 // x anger kolonn, mellan 0-15 void LCD_goto(unsigned char y, unsigned char x) {

unsigned char firstaddress[] = {0x80,0xC0; //0x80 0xC0 LCD_send_command4(firstAddress[y] + x); // Skickar ett kommando till displayen. void LCD_send_command8(unsigned char cmnd){ LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); LCD_DATA_PORT = cmnd; LCD_DATA_PORT = (1<<LCD_ENABLE_PIN); _delay_us(5); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); // Skickar ett kommando till displayen, i två omgångar (fyra-bitars // kommunikation. void LCD_send_command4(unsigned char cmnd){ unsigned char cmnd1 = hexbreaker(cmnd,1);

unsigned char cmnd2 = hexbreaker(cmnd,0); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); LCD_DATA_PORT &= ~(1<<LCD_RW_PIN); LCD_DATA_PORT &= ~(1<<LCD_RS_PIN); unsigned char temp = 0x0F; unsigned char temp2 = LCD_DATA_PORT & temp; LCD_DATA_PORT = cmnd1 temp2; LCD_DATA_PORT = (1<<LCD_ENABLE_PIN); _delay_us(5); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); temp2 = LCD_DATA_PORT & temp; LCD_DATA_PORT = cmnd2 temp2; LCD_DATA_PORT = (1<<LCD_ENABLE_PIN); _delay_us(5); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); // Stödfunktion för fyra-bitars kommunikation med skärmen. unsigned char hexbreaker(unsigned char c, int i){ if(i == 1){ c = c & 0xF0; // ABCD EFGH --> ABCD 0000

return c; else{ c = (c<<4); //vänsterställer 4 steg ABCD EFGH --> EFGH 0000 return c; // Skriver ut en sträng på skärmen. void LCD_print(char *string){ unsigned char i; i = 0; while(string[i]!= 0) { LCD_send_data(string[i]); i++; // Skriver ut ett tecken på skärmen. void LCD_send_data(unsigned char c) { unsigned char data1 = hexbreaker(c,1); unsigned char data2 = hexbreaker(c,0); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); LCD_DATA_PORT &= ~(1<<LCD_RW_PIN); LCD_DATA_PORT = (1<<LCD_RS_PIN);

unsigned char temp = 0x0F; unsigned char temp2 = LCD_DATA_PORT & temp; LCD_DATA_PORT = data1 temp2; LCD_DATA_PORT = (1<<LCD_ENABLE_PIN); _delay_us(5); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); _delay_us(5); temp2 = LCD_DATA_PORT & temp; LCD_DATA_PORT = data2 temp2; LCD_DATA_PORT = (1<<LCD_ENABLE_PIN); _delay_us(5); LCD_DATA_PORT &= ~(1<<LCD_ENABLE_PIN); _delay_us(5); // Rensar skärmen, void LCD_clear(void) { LCD_goto(0,0);

LCD_print(" "); LCD_goto(1,0); LCD_print(" ");