ΑΠΕΙΚΟΝΙΣΕΙΣ ΜΕ LCD DISPLAY ΣΚΟΠΟΣ Αυτή η άσκηση έχει σαν σκοπό, να δείξει τον τρόπο με τον οποίο τίθεται σε λειτουργία η οθόνη LCD του αναπτυξιακού. Οδηγώντας μια οθόνη υγρών κρυστάλλων Liquid Crystal Display Οι οθόνες LCD χρησιμοποιούνται ευρέως. Απαιτούν χαμηλή κατανάλωση και πίνακα χαρακτήρων που δίνει πολύ καλύτερη ευκρίνεια σε σχέση με αυτή που δίνουν οι οθόνες χαρακτήρων (seven segment). Συνήθως οδηγούνται από ένα δικό τους ενσωματωμένο μικροελεγκτή γεγονός που κάνει την απεικόνιση των ASCII χαρακτήρων τους πολύ πιο εύκολη. Το κύριο σημείο που πρέπει να τονιστεί είναι ότι οι οθόνες lcds είναι πολύ πιο αργές από τους μικροελεγκτές και είναι σημαντικό όταν τις προγραμματίζουμε να επιτρέπουμε κάποιους χρόνους που καθορίζει ο κατασκευαστής προκειμένου να δέχονται και να αντιλαμβάνονται τις εντολές ή τα δεδομένα που τους στέλνονται. Γενικά οι οθόνες LCDs έχουν 14 ακίδες (pins) όπως φαίνεται στον πίνακα που ακολουθεί. Αριθμός pin Σύμβολο Λειτουργία 1 Vss 0V 2 Vdd 5V 3 Vo contrast adjustment voltage 4 RS [P2.0] L(0):instruction code input [command] H(1):Char Data input [data] Εάν RS=0 (clr rs) στέλνουμε εντολές όπως για καθαρισμό οθόνης, μετατόπιση του κέρσορα, αλλαγή γραμμής κτλ. Εάν RS=1 (setb rs) στέλνουμε δεδομένα για εμφάνιση στην οθόνη του LCD. 5 R/W [P2.1] H(1):data read L(0):data write Εάν R_W=1 (setb R_W) ανάγνωση δεδομένων από το LCD Εάν R_W=0 (clr R_W) εγγραφή δεδομένων στο LCD 6 EN [P2.2] Enable signal Το enable pin χρησιμοποιείται για να πάρει τα δεδομένα που υπάρχουν στη θύρα P0. Όταν τα δεδομένα προωθούνται σε αυτά τα pins ένας παλμός από high σε low πρέπει εφαρμοστεί στο enable pin ώστε να αναγνωρίσει το lcd αυτά τα δεδομένα και να τα εμφανίσει. (setb en clr en). Αυτός ο παλμός πρέπει να έχει διάρκεια τουλάχιστον 450ns. 7-14 P0.0 έως P0.7 8-bit data bus line (ακίδες δεδομένων) Εφαρμογές Μικροϋπολογιστών στις Τηλεπικοινωνίες Σελ. 1
Ακολουθεί ένα παράδειγμα οδήγησης μιας οθόνης LCD στο οποίο χρησιμοποιείται η πόρτα P0 για τα δεδομένα ενώ το P2.0 συνδέεται με το RS και το P2.2 με το EN Στην αριστερή στήλη είναι ο κώδικας ενώ στην δεξιά στήλη δίνονται κάποιες επεξηγήσεις ;******************************* ; lcd.asm ;emfanisi enos minimatos sto lcd ;stelnontas to xaraktira xaraktira ;******************************* $nomod51 #include <REG420.h> org ljmp org 0000h main 0030h rs equ p2.0 r_w equ p2.1 en equ p2.2 ;Με την εντολή equ γίνεται αντιστοίχηση του στοιχείου από τα δεξιά της εντολής με το όνομα που δίνουμε αριστερά. Δηλαδή για παράδειγμα όπου στο πρόγραμμα εμφανίζεται το rs εννοούμε το P2.0 Αυτό γίνεται μόνο για διευκόλυνση στην ονοματολογία και για πιο εύκολη χρησιμοποίηση μέσα στο πρόγραμμα. main: acall INIT_LCD acall AUTHORS sjmp $ ;*******DELAYS SECTION ******* DELAY: MOV R6,#28H DEL6: MOV R7,#0FFH DEL7: DJNZ R7,DEL7 DJNZ R6,DEL6 DELAYA: MOV R5,#0AH DEL8: MOV R6,#28H DEL9: MOV R7,#0FFH DEL0: DJNZ R7,DEL0 DJNZ R6,DEL9 DJNZ R5,DEL8 Εφαρμογές Μικροϋπολογιστών στις Τηλεπικοινωνίες Σελ. 2
;*****CONTROL SECTION******** ;αποστολή εντολών σε LCD CONTROL:clr rs MOV P0,A SΕΤΒ en ACALL DELAY CLR en ;αποστολή δεδομένων σε LCD DATUM: setb rs MOV P0,A SETB en ACALL DELAYA CLR en ;ρουτίνα για αλλαγή γραμμής chline: mov a,#0c0h ;ρουτίνα για καθαρισμό της οθόνης clrscr: clr rs mov a,#01h ;ρουτίνα για να μεταφερθεί ο κέρσορας στην αρχική του θέση crshm: clr rs mov a,#02h ;****LCD INITIALIZATION****** INIT_LCD:CLR r_w ACALL DELAY MOV A,#38H MOV A,#06H MOV A,#0EH MOV A,#01H MOV A,#80H ;Κάνουμε clr το RS (P2.0) όποτε θέλουμε να στείλουμε εντολές στην οθόνη LCD μέσω της P0 Μεταφορά περιεχομένου του Αccumulator στην θύρα P0 ;Με την εντολή setb en δημιουργούμε την μετάβαση (low- >high) του παλμού και μετά από μια χρονοκαθυστέρηση (DELAY) δημιουργούμε την εντολή clr en την μετάβαση (high-> low) ώστε να λάβει η οθόνη LCD τα δεδομένα ή τις εντολές. ;Κάνουμε setb το RS (p2.0) όποτε θέλουμε να στείλουμε δεδομένα στην οθόνη LCD μέσω της P0 ;Εντολή για αλλαγή γραμμής ;Εντολή για καθαρισμό οθόνης ;Εντολή για μεταφορά κέρσορα στην αρχική θέση ;Εντολές για αρχικοποίηση του LCD. Αυτή η ρουτίνα είναι για την αρχικοποίηση του LCD και την χρησιμοποιούμε κάθε φορά που πρόκειται να χρησιμοποιήσουμε την οθόνη. Εφαρμογές Μικροϋπολογιστών στις Τηλεπικοινωνίες Σελ. 3
AUTHORS: MOV A,#80H CLR r_w MOV A,#'8' MOV A,#'0' MOV A,#'5' MOV A,#'1' ACALL chline MOV A,#'P' MOV A,#'R' MOV A,#'O' MOV A,#'C' MOV A,#'E' MOV A,#'S' MOV A,#'S' MOV A,#'O' MOV A,#'R' Ret END ;Μετακίνηση κέρσορα στην 1 η γραμμή και 1 η θέση ;Θέτουμε την οθόνη LCD σε κατάσταση εγγραφής (αποστολής δεδομένων) ;Χρησιμοποιούμε την DATUM όταν θέλουμε να στείλουμε δεδομένα που θα εμφανιστούν στο LCD (πχ χαρακτήρες, λέξεις) και την CONTROL όταν θέλουμε να στείλουμε εντολές (πχ αλλαγή γραμμής, μετακίνηση κέρσορα) ;Αλλαγή γραμμής Το πρόγραμμα δείχνει τον τρόπο αρχικοποίησης της οθόνης LCD καθώς και την διαδικασία εμφάνισης χαρακτήρων σε αυτή. Χρήσιμες εντολές, ορισμένες από τις οποίες χρησιμοποιήθηκαν στο παραπάνω πρόγραμμα και μπορούν να χρησιμοποιηθούν και στο μέλλον για έλεγχο του LCD. MOV A, #01h MOV A, #02h MOV A, #04h MOV A, #06h MOV A, #05h MOV A, #07h MOV A, #08h MOV A, #0Αh ;Καθαρισμός της οθόνης LCD ;Μεταφορά του κέρσορα στην 1 η γραμμή και 1 η στήλη ;Μετατόπιση του κέρσορα προς τα αριστερά ;Μετατόπιση του κέρσορα προς τα δεξιά ;Μετατόπιση μηνύματος δεξιά ;Μετατόπιση μηνύματος αριστερά ;Απενεργοποίηση (σβήσιμο) οθόνης και εξαφάνιση του κέρσορα ;Απενεργοποίηση (σβήσιμο) οθόνης και εμφάνιση του κέρσορα Εφαρμογές Μικροϋπολογιστών στις Τηλεπικοινωνίες Σελ. 4
MOV A, #0Ch MOV A, #0Εh MOV A, #0Fh MOV A, #10h MOV A, #14h MOV A, #18h MOV A, #1Ch MOV A, #0C0h MOV A, #80h MOV A, #81h ;Ενεργοποίηση (άναμμα) οθόνης και εξαφάνιση του κέρσορα ;Ενεργοποίηση (άναμμα) οθόνης και ο κέρσορας αναβοσβήνει ;Ενεργοποίηση (άναμμα) οθόνης και ο κέρσορας αναβοσβήνει ;Μετατόπιση θέσης κέρσορα προς τα αριστερά ;Μετατόπιση θέσης κέρσορα προς τα δεξιά ;Μετατόπιση ολόκληρης της οθόνης προς τα αριστερά ;Μετατόπιση ολόκληρης της οθόνης προς τα δεξιά ;Μεταφορά του κέρσορα στην 2 η γραμμή 1 η στήλη ;Μεταφορά του κέρσορα στην 1 η γραμμή και 1 η στήλη ;Μεταφορά του κέρσορα στην 1 η γραμμή και 2 η στήλη Εργασίες 1 Δίνεται ο ακόλουθος κώδικας σε μορφή ρουτίνας: DELAY: MOV R7,#28H MOV R6,#14H MOV R5,#46H MOV R4,#82H DJNZ R4,LOOP1 DJNZ R5,LOOP2 DJNZ R6,LOOP3 DJNZ R7,LOOP4 Συμπληρώστε τις ετικέτες (labels) στις θέσεις που πιστεύετε ότι πρέπει να μπουν και υπολογίστε τους κύκλους μηχανής του 8051 που απαιτούνται για την εκτέλεση της ρουτίνας. Εάν η συχνότητα του ταλαντωτή είναι fosc=11,0592mhz, τότε υπολογίστε και τον χρόνο σε msec. 2 Να γίνει πρόγραμμα που να εμφανίζει στην οθόνη LCD τους αριθμούς στο δεκαεξαδικό από το 0 μέχρι το F διαδοχικά. 3 Να γίνει πρόγραμμα που να εμφανίζει στην οθόνη LCD τα μηνύματα TEI ELECTRONICS DEPARTMENT 4 Να γίνει πρόγραμμα που να τυπώνει ένα μονοψήφιο δεκαεξαδικό αριθμό στην οθόνη LCD και όταν γεμίζει η πρώτη γραμμή να αλλάζει γραμμή. Όταν γεμίζει και η δεύτερη να καθαρίζει την οθόνη και πάλι από την αρχή. Εφαρμογές Μικροϋπολογιστών στις Τηλεπικοινωνίες Σελ. 5