10. Πληκτρολόγιο matrix 4x4

Σχετικά έγγραφα
10. Πληκτρολόγιο matrix 4x4

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

Οδηγώντας μια οθόνη υγρών κρυστάλλων Liquid Crystal Display

1. Περιβάλλον εργασίας παραδείγματα σύνταξης

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

15. Seven Segment Display. Πολυπλεγμένη λειτουργία

12. Διακοπές Interrupts (IRQ)

ΕΝΟΤΗΤΑ 6 LCD ΟΘΟΝΕΣ

Αυτή η άσκηση έχει σαν σκοπό, να δείξει τον τρόπο με τον οποίο τίθεται σε λειτουργία η οθόνη LCD του αναπτυξιακού.

ΕΡΓΑΣΤΗΡΙΟ 6 ΟΔΗΓΗΣΗ ΑΠΕΙΚΟΝΙΣΕΩΝ SSD ΚΑΙ LCD

14. Timers/Counters prescaler Timer/Counter0 2 Timer/Counter0 Timer/Counter2 Timer/Counter1 Timer/Counter0 Timer/Counter1 Timer/Counter2

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Keyboard. Ασσιούρας Ιωάννης 5593 Βούκας Ιωάννης 5001 Πρωτονοτάριος Ιωάννης 6072

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Οδηγίες χρήσεως για τον ηλεκτρονικό συνδυασμό Selo-B της SECU

Διαδικασιακός Προγραμματισμός

Εφαρμογές Σειριακής Επικοινωνίας

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

8051 Interrupt Ports. Name Alternate Function

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Χ. Βέργος Καθηγητής

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Πανεπιστήμιο Θεσσαλίας- Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΗΥ430- Εργαστήριο Ψηφιακών Κυκλωμάτων

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

9. ΚΑΤΑΧΩΡΗΤΕΣ (REGISTERS)

Ψηφιακά Συστήματα. 8. Καταχωρητές

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

ΤΗΛΕΦΩΝΗΤΗΣ AG-GD20 GSM & PSTN

15 ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Οδηγίες EQL Desktop (rev ) ΣΥΝ ΕΣΗ S-710 ΜΕ ΚΑΛΩ ΙΟ USB ΠΡΟΚΑΤΑΡΚΤΙΚΕΣ ΕΡΓΑΣΙΕΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Οδηγίες Προγραμματισμού- Λειτουργίας για το Ολοκληρωμένο WiFi Σύστημα Συναγερμού YL- WΜ2FX

Οδηγίες Προγραμματισμού- Λειτουργίας για το Ολοκληρωμένο WiFi Σύστημα Συναγερμού YL- WP1 Προετοιμασία- Εκκίνηση συσκευής

WDT και Power Up timer

ΕΙΣΑΓΩΓΗ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ Microsoft WINDOWS (95-98-NT-2000-XP)

PBI-192. Οδηγίες Χρήσης. Paradox to KNX-BUS Interface

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

UTECO ABEE ΒΙΟΜΗΧΑΝΙΚΟΣ & ΝΑΥΤΙΛΙΑΚΟΣ ΑΥΤΟΜΑΤΙΣΜΟΣ

Περιεχόµενα. I Βασικές Γνώσεις 1

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 4: Ρουτίνες καθυστέρησης. [Συγγραφή ρουτίνας καθυστέρησης]

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΕΦΑΡΜΟΓΕΣ ΚΑΤΑΧΩΡΗΤΩΝ ΟΛΙΣΘΗΣΗΣ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΠΕΜΠΤΗ 21 ΙΟΥΝΙΟΥ 2018

ΠΛΗΚΤΡΟΛΟΓΙΟ. Η ελληνική διάταξη πλήκτρων είναι η παρακάτω (δεν υπάρχουν άλλες διατάξεις για το ελληνικό αλφάβητο):

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΠΙΣΤΟΠΟΙΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΠΟΙΟΤΗΤΑΣ ISO 9001 :

Κύρια μνήμη. Μοντέλο λειτουργίας μνήμης. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (ΙI)

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΥΠΟΣΥΣΤΗΜΑΤΟΣ ΑΓΡΟΠΕΡΙΒΑΛΛΟΝΤΙΚΩΝ ΕΝΙΣΧΥΣΕΩΝ. Μέτρο 2.2.1

COBRA MRF 300BT MRF 300BT 1. Άγκιστρο στερέωσης. Φωτισµός οθόνηςκλείδωµα. λειτουργιών. Κουµπί ενεργοποίησης. Επιλογή τρόπου λειτουργίας Μικρόφωνο

Συστήματα Μικροϋπολογιστών

Το εσωτερικό ενός PC. Τεχνολογία Η/Υ & Πληροφοριών - 05 Κεντρική μονάδα Χουρδάκης Μανόλης

Πρακτικές οδηγίες για την Επεξεργασία Κειμένου

Οργάνωση Υπολογιστών (ΙI)

ΣΗΜΕΙΩΣΕΙΣ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Οδηγίες Χρήσεως. Κάτοψη Συσκευής. SOS 100 Elderly Care System. Κύρια χαρακτηριστικά SOS 100

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

Καταχωρητής STATUS. IRP: Bit επιλογής περιοχής μνήμης (Bank) για την έμμεση διευθυνσιοδότηση 1= Bank2, Bank3 0= Bank0, Bank1

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Ενσωματωμένα Συστήματα

Copyright 2017 HP Development Company, L.P.

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΠΕΝΤΕ (5)

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Οργάνωση Υπολογιστών (IΙI)

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΑΠΑΝΤΗΣΕΙΣ

Microcomputer Automatic Alarm device CCTV SECURITY AUTOMATIC ALARM SYSTEΜ

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

AG-GD20 Ο ΗΓΙΕΣ ΧΡΗΣΕΩΣ ΤΗΛΕΦΩΝΗΤΗ GSM & PSTN

Συσκευές δείκτη και πληκτρολόγιο Οδηγός χρήσης

ΑΝΑLOG TO DIGITAL CONVERTER (ADC)

Σας προτείνουμε να εγκαταστήσετε στο κινητό σας τηλέφωνο την εφαρμογή Senior Helper"

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Αρχιτεκτονική υπολογιστών

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Hunter ΠΡΟΓΡΑΜΜΑΤΙΣΤΗΣ ΑΡΔΕΥΣΗΣ ΓΙΑ ΟΙΚΙΑΚΕΣ & ΜΙΚΡΕΣ ΔΗΜΟΣΙΕΣ ΕΦΑΡΜΟΓΕΣ ΟΔΗΓΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μοντέλα 2,4,6,8 στάσεων INDOOR & OUTDOOR.

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 5ο Οργάνωση υπολογιστών

KARAGIANNIS-SECURITY.GR

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ CD-PLUS/4+N

Transcript:

10. Πληκτρολόγιο matrix 4x4 Το πληκτρολόγιο matrix 4x4 αποτελείται από 16 πλήκτρα διακόπτες τα οποία είναι συνδεδεμένα μεταξύ τους ανά 4 σε τέτοια διάταξη ώστε, με το ένα άκρο τους να σχηματίζουν 4 σειρές και με το άλλο 4 στήλες. Στο θεωρητικό κύκλωμα του σχήματος παρουσιάζεται η σύνδεση ενός πληκτρολογίου matrix 4x4 στο port ενός μικροελεγκτή. Οι 4 σειρές συνδέονται στη μισή θύρα του μικροελεγκτή P0 P3, η οποία λειτουργεί ως έξοδος με αρχική κατάσταση 1111 και οι 4 στήλες στην άλλη μισή θύρα P4 P7, η οποία λειτουργεί ως είσοδος με ενεργοποιημένες τις pull up αντιστάσεις σε κάθε pin. Οι έξοδοι P0 έως P3 περνούν μια μια διαδοχικά σε λογικό 0 για ένα χρονικό διάστημα της τάξεως ms σαρώνοντας τις σειρές. Οι είσοδοι P4 P7 ανιχνεύουν τη χαμηλή λογική σε περίπτωση που πατηθεί κάποιο πλήκτρο από τις στήλες. Ο συνδιασμός στήλης σειράς καθορίζει το πλήκτρο που έχει πατηθεί. Αν για παράδειγμα πατηθεί το πλήκτρο 6, η είσοδος P6 θα δεχτεί λογικό 0 όταν η έξοδος P1 περάσει σε λογικό 0. O καταχωρητής κατάστασης της θύρας τη στιγμή εκείνη θα γίνει 10111101. Το byte αυτό αντιστοιχίζεται στη συνέχεια στο νούμερο 6 ή σε κάποια άλλη λειτουργία. Η αντιστοίχιση μπορεί να γίνει με μια εντολή switch. 1

Επειδή κατά το κλείσιμο και κατά το άνοιγμα της επαφής του διακόπτη δημιουργούνται παρασιτικοί παλμοί, εισάγονται κάποιες καθυστερήσεις από το λογισμικό, ώστε να αποφεύγονται λανθασμένες πληροφορίες. Οι δίοδοι D1 έως D4 είναι απαραίτητες για προστασία από βραχυκύκλωμα σε περίπτωση που πατηθούν ταυτόχρονα δύο πλήκτρα που βρίσκονται στην ίδια στήλη. Αν συμβεί αυτό η έξοδος που είναι σε λογικό 0 θα κλείσει κύκλωμα με την άλλη έξοδο που είναι σε λογικό 1. Η δίοδος τότε που βρίσκεται στη δεύτερη έξοδο πολώνεται ανάστροφα και προστατεύεται το κύκλωμα. Στη συνέχεια παρουσιάζεται ένα παράδειγμα κώδικα σε γλώσσα C που μπορεί να χρησιμοποιηθεί για αναγνώριση πληκτρολογίου: #include <avr/io.h> #include <util/delay.h> uint8_t line; uint8_t data; void Keyb (void) line = 1; for (uint8_t i1 = 0; i1 < 4; i1++) PORTA = ~line; line = line << 1; //_delay_ms(1); while (PINA < 0b11101111) _delay_ms (5); switch (PINA) case 0b11101110: data = 1; while (PINA == 0b11101110); case 0b11101101: data = 4; while (PINA == 0b11101101); case 0b11101011: data = 7; while (PINA == 0b11101011); case 0b11100111: data = 14; while (PINA == 0b11100111); case 0b11011110: data = 2; while (PINA == 0b11011110); case 0b11011101: //Keyboard rutine //Button 1 pressed //Button still pressed //Button 4 pressed //Button 7 pressed //Button * pressed //Button 2 pressed //Button 5 pressed 2

data = 5; while (PINA == 0b11011101); case 0b11011011: data = 8; while (PINA == 0b11011011); //Button 8 pressed case 0b11010111: data = 0; while (PINA == 0b11010111); //Button 0 pressed case 0b10111110: data = 3; while (PINA == 0b10111110); //Button 3 pressed case 0b10111101: data = 6; while (PINA == 0b10111101); //Button 6 pressed case 0b10111011: data = 9; while (PINA == 0b10111011); //Button 9 pressed case 0b10110111: data = 15; while (PINA == 0b10110111); //Button # pressed case 0b01111110: data = 10; while (PINA == 0b01111110); //Button A pressed case 0b01111101: data = 11; while (PINA == 0b01111101); //Button B pressed case 0b01111011: data = 12; while (PINA == 0b01111011); //Button C pressed case 0b01110111: data = 13; while (PINA == 0b01110111); //Button D pressed int main(void) DDRA = 0b00001111; PORTA = 0b11111111; //Port A upper inputs, lower outputs //Enable pull up on inputs, send 1 to outputs 3

while (1) /* Your code here */ Keyb (); //Check keyboard /* Your code here */ Η ρουτίνα του πληκτρολογίου Keyb() καλείται μέσα από το κυρίως πρόγραμμα και αποθηκεύει στη μεταβλητή data την πληροφορία από το πλήκτρο που πατήθηκε. Στον κώδικα που παρουσιάστηκε αποθηκεύεται η αριθμητική τιμή του πλήκτρου. Συνήθως το πάτημα ενός πλήκτρου διαρκεί 100 200ms, συνεπώς θα πρέπει στο διάστημα αυτό να έχει ολοκληρωθεί ο βρόχος του κυρίως προγράμματος ώστε να γίνει η κλήση της ρουτίνας του πληκτρολογίου στο χρόνο που διαρκεί το πάτημα του πλήκτρου, διαφορετικά δε θα αναγνωριστεί. Αν ο βρόχος του κυρίως προγράμματος διαρκεί αρκετό χρόνο θα πρέπει η ρουτίνα του πληκτρολογίου να καλείται με διακοπή από έναν Timer του μικροελεγκτή ή να καλείται η ρουτίνα σε διάφορα σημεία του προγράμματος. Σε αυτές τις περιπτώσεις χρειάζεται προσοχή στη χρήση των δεδομένων της data ώστε να είναι ενημερωμένη όταν διαβάζεται. Όταν γίνει η κλήση της ρουτίνας Keyb() δίνεται αρχική τιμή 0b00000001 στη μεταβλητή line και στη συνέχεια ξεκινάει ένας βρόχος με μια for που επαναλαμβάνεται 4 φορές για τη σάρωση των γραμμών του πληκτρολογίου. Ξεκινώντας ο βρόχος δίνεται τιμή στο PORTA το συμπλήρωμα της line δηλαδή 0b11111110, ώστε να ελεγχθεί η πρώτη γραμμή και γίνεται αριστερή ολίσθηση στην line για να προετοιμαστεί για τον επόμενο κύκλο. Σε αυτό το σημείο μπορεί να εισαχθεί μια καθυστέρηση της τάξεως του ms αν η συχνότητα λειτουργίας του μικροελεγκτή είναι υψηλή (στο παράδειγμα υπάρχει ως σχόλιο). Ακολουθεί ένας βρόχος με μια while όπου η συνθήκη της ικανοποιείται μόνο όταν υπάρχει πατημένο πλήκτρο σε αυτή τη γραμμή. Αν δεν υπάρχει πατημένο πλήκτρο το πρόγραμμα συνεχίζει με τον επόμενο κύκλο της for. Δίνεται ξανά τιμή στο PORTA το συμπλήρωμα της line, ώστε να ελεγχθεί αυτή τη φορά η δεύτερη γραμμή 1 και γίνεται αριστερή ολίσθηση στην line για να προετοιμαστεί για τον επόμενο κύκλο. Αν υπάρχει πατημένο πλήκτρο το πρόγραμμα εισέρχεται στην while. Στην while εκτελείται αρχικά μια εντολή καθυστέρησης για τους παρασιτικούς παλμούς και στη συνέχεια με την switch γίνεται αναγνώριση του πλήκτρου και αποθήκευση της πληροφορίας στην data. Πριν την έξοδο από την switch με την break σε κάθε case υπάρχει μια while η οποία έχει ως συνθήκη ισότητα του PINA με τη σταθερά της αντίστοιχης case που βρίσκεται. Ο ρόλος της while είναι να σταματάει το πρόγραμμα εκεί για όσο χρόνο είναι 1 Η line έχει ολισθήσει κατά αριστερά στον προηγούμενο κύκλο και συνεπώς το συμπλήρωμά της είναι 0b11111101. 4

πατημένο το πλήκτρο, ώστε να μην καταχωρείται ως νέο πάτημα κάθε φορά που καλείται η ρουτίνα. Το πρόγραμμα συνεχίζει τη λειτουργία του με την απελευθέρωση του πλήκτρου. Αν είναι δύο πλήκτρα πατημένα στην ίδια γραμμή δεν ικανοποιείται καμιά case και συνεπώς βγαίνει το πρόγραμμα από τη switch χωρίς να κάνει καμία ενέργεια. Αν είναι πατημένα δύο πλήκτρα στην ίδια στήλη θα αναγνωριστεί το πλήκτρο που η γραμμή του είναι σε χαμηλή λογική κατά τη σάρωση. Όταν ολοκληρωθεί η σάρωση και των τεσσάρων γραμμών το πρόγραμμα εξέρχεται από τη ρουτίνα του πληκτρολογίου. 2016 Πορλιδάς Δημήτριος 5

11. Οθόνη LCD 2x16 (4x20) Οι οθόνες LCD 2x16 ή 4x20 είναι πολύ εύκολες στη σύνδεση και στη χρήση τους σε μικροελεγκτές. Χρειάζονται ελάχιστες γραμμές κώδικα για την προετοιμασία τους (initialize) και για τις εντολές λειτουργίας τους. Στο θεωρητικό κύκλωμα του σχήματος παρουσιάζεται η σύνδεση μιας οθόνης στο port ενός μικροελεγκτή. Διαθέτουν 8 bit data bus αλλά είναι δυνατό να προγραμματιστούν για λειτουργία με 4 bit, ώστε μαζί με τα 3 σήματα ελέγχου να μπορούν να συνδεθούν σε ένα port. Όταν είναι προγραμματισμένες για λειτουργία 4 bit στέλνεται πρώτα το ανώτερο μέρος του byte (upper) και στη συνέχεια το κατώτερο (lower). Έχουν έναν καταχωρητή 80 byte (DD RAM) για αποθήκευση των δεδομένων που εμφανίζονται, ο οποίος είναι εγγραφής ανάγνωσης. Στις οθόνες με 2 σειρές, τα 40 πρώτα byte αφορούν την πρώτη σειρά με διευθύνσεις στην DD RAM 0x00 έως 0x27 και τα επόμενα 40 τη δεύτερη με διευθύνσεις 0x40 έως 0x67. Στις οθόνες με 4 σειρές, τα 20 πρώτα αφορούν την πρώτη σειρά με διευθύνσεις στην DD RAM 0x00 έως 0x13, τα επόμενα 20 (21 40) την τρίτη σειρά με διευθύνσεις 0x14 έως 0x27, τα επόμενα (41 60) τη δεύτερη σειρά με διευθύνσεις 0x40 έως 0x53 και τα τελευταία 20 (61 80) την τέταρτη με διευθύνσεις 0x54 έως 0x67. Αν κάθε σειρά 6

έχει 16 θέσεις για εμφάνιση χαρακτήρων, εμφανίζονται τα δεδομένα που είναι αποθηκευμένα στις 16 πρώτες θέσεις του καταχωρητή, ενώ τα υπόλοιπα μπορούν να εμφανιστούν με ολίσθηση χρησιμοποιώντας την αντίστοιχη εντολή της οθόνης. Υπάρχει δυνατότητα να εμφανίζεται ή όχι ο κέρσορας ή να αναβοσβήνει, επίσης υπάρχει δυνατότητα να ολισθαίνει αυτόματα ο κέρσορας ή η οθόνη καθώς στέλνονται χαρακτήρες. Οι οθόνες διαθέτουν, ακόμα, οπίσθιο φωτισμό (back light) στα pin BL+, BL- και ρύθμιση αντίθεσης στο pin Vo. Τα δεδομένα στέλνονται στην οθόνη σε κωδικοποίηση χαρακτήρων ASCII και εμφανίζονται όλοι οι λατινικοί χαρακτήρες και τα σύμβολα που υπάρχουν στις 128 πρώτες θέσεις. Για τις επόμενες 128 θέσεις του ASCII η ROM της οθόνης περιέχει πληροφορίες για εμφάνιση ειδικών χαρακτήρων και ανάλογα με την έκδοση της ROM μπορούν να εμφανιστούν Ελληνικοί, Κυριλλικοί, Κινέζικοι ή Γιαπωνέζικοι χαρακτήρες και κάποια μαθηματικά σύμβολα 1. Επίσης υπάρχει η δυνατότητα να δημιουργηθούν pixel pixel 8 χαρακτήρες, οι οποίοι αποθηκεύονται σε έναν καταχωρητή (CG RAM) και μπορούν να εμφανιστούν, όμως διαγράφονται με απώλεια τροφοδοσίας. Η οθόνη δέχεται εντολές με 0 στο pin RS. Οι εντολές είναι για τη θέση του κέρσορα, τις ιδιότητες του κέρσορα, εντολές ολίσθησης, καθαρισμού της οθόνης, δημιουργίας χαρακτήρων και ανάγνωσης και έχει διαφορετικό χρόνο εκτέλεσης η κάθε μια. Η ανάγνωση χαρακτήρων γίνεται με 1 στο pin R/W. Οι πληροφορίες λαμβάνονται από την οθόνη με 1 στο pin E είτε αυτές είναι δεδομένα, είτε εντολές. Για την initialization της οθόνης πρέπει να εκτελεστεί αποστολή 3 φορές η πληροφορία 0b0011 στο D7:D4 της οθόνης με διαφορετικό ενδιάμεσο χρόνο και στη συνέχεια να σταλεί η εντολή για λειτουργία 4 bit (μετά την εκκίνησή της η οθόνη είναι σε λειτουργία 8 bit, επειδή όμως δεν έχουμε συνδεδεμένα τα 4 LSB τα pin βλέπουν 0). Στη συνέχεια παρουσιάζεται ένα παράδειγμα κώδικα σε γλώσσα C για initialization οθόνης: #define lcdport PORTA #define lcdddr DDRA #define En 0b00001000 void InitLCD (void) lcdddr = ~(1<<0); _delay_ms (20); out = 0b00110000; lcdport = (lcdport out); // Define LCD PORT // Define LCD DDR // E signal // Start up, initialization rutine // PORTx1:7 outputs (LCD) // Power on delay 20ms // Init 1 Η πιο συνηθισμένες ROM είναι οι PN, PS, PM με English Japanese Font. 7

_delay_ms (5); _delay_us (200); _delay_ms (5); out = 0b00100000; lcdport = (lcdport out); _delay_us (50); // Init // Init // 4 bit interface Για την αποστολή δεδομένων ή εντολών στην οθόνη μπορούμε να γράψουμε ρουτίνες ώστε να τις καλούμε στο κυρίως πρόγραμμα. Στη συνέχεια παρουσιάζεται ένα παράδειγμα ρουτίνας αποστολής εντολών και η κλήση της ρουτίνας για αποστολή εντολής: void WrIn (uint8_t tmp) out = tmp & 0b11110000; lcdport = (lcdport out); out = tmp << 4; lcdport = (lcdport out); _delay_us (50); // Write Instruction routine // Upper // Lower #define CDRC 0b00000001 WrIn (0b00101100); WrIn (0b00001111); WrIn (0b00000110); WrIn (CDRC); _delay_ms (2); // Clear Display and Reset Cursor (2ms delay) // 001, 4 bit, 2 lines 2x16, 5x11 dots, xx // 00001, Display on, cursor on, blinking on // 000001, Cursor increase, display not shift // Clear display, reset cursor (2ms delay) 8

Στη συνέχεια παρουσιάζεται ένα παράδειγμα ρουτίνας αποστολής δεδομένων και η κλήση της ρουτίνας για αποστολή του γράμματος C: #define Da 0b00000100 // RS, data signal (0 for instruction) void WrDa (uint8_t tmp) // Write Data routine out = tmp & 0b11110000; // Upper lcdport = (lcdport out Da); out = tmp << 4; // Lower lcdport = (lcdport out Da); _delay_us (50); WrDa ('C'); Με παρόμοιο τρόπο μπορούμε να γράψουμε ρουτίνα εντολής μετακίνησης του κέρσορα ώστε να αποθηκευτούν τα δεδομένα σε συγκεκριμένη θέση. Στη συνέχεια παρουσιάζεται ένα παράδειγμα ρουτίνας και η κλήση για μετακίνηση στη δεύτερη σειρά πρώτη θέση: void SeCu (uint8_t addr) WrIn (0b10000000 addr); // Send cursor to a specific address SeCu (0x40); 2016 Πορλιδάς Δημήτριος 9