ρουτίνας κουμπί στην HT-Picc

A

arash_micro

Guest
Γεια σου.
Θέλω να κάνω ρουτίνα κουμπί στην ελ-Picc.
Γράφω αυτό το κώδικα (δεν debounce ρουτίνας), αλλά δεν work.What είναι λάθος μου.

εάν (RB4 = 0) (
DelayMs (50)?
chanal ?
)

Ευχαριστώ.

 
Γεια σου,
Δεν έχω ιδέα για τον κωδικό σας.Αλλά μπορώ να δω το συντακτικό λάθος σε αυτό το μέρος που αναφέρονται ανωτέρω.αν (RB4 = 0), θα πρέπει να αντικατασταθεί από το αν (RB4 == 0).

Ξέρεις ενιαίο είναι ίση με την απόδοση αξίας και διπλό ίση είναι να ελέγχει

Με τις καλύτερες ευχές.

 
Ήμουν σωστή η error.It έργων pruteuse αλλά δεν είναι πραγματική.
Γιατί;

 
Γεια σου,

Είναι depands όλα τα σχετικά με το πώς το υλικό σας είναι συνδεδεμένος!Είναι το κουμπί σας συνδέεται με Vcc ή GND;δηλαδή όταν πιέζετε το κουμπί, τι έχετε για σας PIN 1 ή 0?
Ας πούμε να πάρω ένα 0, έτσι ώστε να είναι connectet κουμπί από τη μία πλευρά να GND, και το άλλο για να RB4 σας με ένα Τραβήξτε προς τα πάνω (πρέπει να έχετε ότι).
Στη συνέχεια, μπορείτε κώδικας θα είναι κάπως έτσι:
Κωδικός:εάν (RB4 == 0)

(

DelayMs (50)?

εάν (RB4 == 0) / / Σε περίπτωση που εξακολουθεί να της σχετικά

chanal ?

)

 
Γεια!
Η ιδέα που πήρα από ur κώδικα είναι ότι η καρφίτσα τραβιέται κανονικά και κατά την κα πατήστε το κουμπί κάνει το χαμηλό PIN, ο κωδικός θα πρέπει να είναι κάπως έτσι

if (! rb0) / / αν rb0 δεν είναι υψηλή εκτελέσει τότε ο κωδικός
(
YOUR_CODE?
)
έτσι ο κώδικας θα εκτελεστεί όταν το pin είναι χαμηλή.
Ομοίως, αν και θέλουν να εκτελέσει ένα συγκεκριμένο κώδικα όταν μια καρφίτσα είναι υψηλή ας πούμε rb0 τότε ο κώδικας θα πρέπει να είναι κάπως έτσι
αν (rb0)
(
YOUR_CODE?
)
Ελπίζω ότι αυτό καθιστά σαφές ur σημεία.
Χαιρετισμοί

 
Hi Waseem,

Υπάρχει ένα πρόβλημα με τον κωδικό που σας έχουν στείλει.Θα πρέπει να κάνετε σε κατάσταση αναμονής και στη συνέχεια ελέγξτε το pin και πάλι.Υπάρχουν και άλλοι τρόποι, αλλά αυτό είναι το πιο απλό.Η Reson για αυτό είναι επειδή θέλετε να είστε σίγουροι ότι ο κωδικός θα λειτουργήσει μόνο εάν πατήσετε το κουμπί, και δεν είναι μόνο από οποιοδήποτε chnage στην τάση που μπορεί να προκαλέσουν από άλλο λόγο.Επίσης, με τον κωδικό σας, ο κώδικας θα exacuted όσο είστε πατώντας το κουμπί.
Έτσι αφήνει πούμε ότι θέλετε να αλλάξετε ένα LED και να σβήνουν, με τον κωδικό σας, θα ενεργοποιούν ή απενεργοποιούν την ηγεσία όσο χρόνο πατάτε το κουμπί.και στο τέλος το αποτέλεσμα θα μπορούσε να είναι ανοικτά.
Έτσι, στο τέλος της ημέρας, καλό του να θέσει κάποια καθυστέρηση ή οποιαδήποτε άλλα καθήκοντα που θα κάνουν το πάτημα ενός πλήκτρου πιο αξιόπιστη.

Καλή τύχη.

 
Hi Gidimiz!
Ευχαριστώ για την ανάλυση.Έχω ήδη γνώριζε τι u ανέφερα, αλλά αυτό που προσπαθούσα να τονίσω στον κωδικό μου είναι ότι δεν υπάρχει ανάγκη να γράψω "αν (rb0 == 1)"
u μπορεί απλά να γράψετε "αν (rb0)" και, ομοίως, αντί του "αν (rb0 == 0)" u μπορεί να γράψει
"if (! rb0).
του courese πρέπει να προσθέσετε κάποια καθυστέρηση να καταστεί η λειτουργία διακόπτη αξιόπιστα.
Άλλη μια φορά τις ευχαριστίες για την ανάλυση.
Χαιρετισμοί

 
Hi Waseem,
Waseem έγραψε:

...
αλλά αυτό που προσπαθούσα να τονίσω στον κωδικό μου είναι ότι δεν υπάρχει ανάγκη να γράψω "αν (rb0 == 1)"

u μπορεί απλά να γράψετε "αν (rb0)" και, ομοίως, αντί του "αν (rb0 == 0)" u μπορεί να γράψει

"if (! rb0) ...

 
gidimiz έγραψε:

Hi Waseem,Υπάρχει ένα πρόβλημα με τον κωδικό που σας έχουν στείλει.
Θα πρέπει να κάνετε σε κατάσταση αναμονής και στη συνέχεια ελέγξτε το pin και πάλι.
Υπάρχουν και άλλοι τρόποι, αλλά αυτό είναι το πιο απλό.
 
Hi SP,

Για μια μακρά διάρκεια υπάρχει ένας άλλος τρόπος να γίνει αυτό δεν καταστεί το πρόγραμμα κολλήσει!
Θα χρειαστεί να εφαρμόσει ένα χρονόμετρο με διακοπή (μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις TMR) και να τους στο ελάχιστο που θα χρειαστείτε.Για παράδειγμα, αν το πράγμα νηστείες που θα χρειαστείτε είναι να αναβοσβήνει ένα LED κάθε 0,5 sec, τότε η TMR πρέπει να οριστεί να διακόψει κάθε 0,5.Εάν μόνο το κουμπί του, η μπορείτε να διακόπτουν κάθε 1sec.
Ok, Δεν έχετε κάποιες χρονόμετρο ότι διακόπτει κάθε 1 δευτερόλεπτο, ναι, ποιο.Στην διακοπή, θα δημιουργήσει μια σημαία κάθε φορά που αυτό θα συμβεί διακοπή.(Dont ξεχάστε να καταργήσετε την σημαία TMRIF).Στη συνέχεια, στο πλαίσιο της κύριας κώδικα που θα ελέγχει ότι η σημαία που ήταν και ότι το κουμπί πατήθηκε.Αν όλα ήταν σωστή για 4 φορές (δηλαδή 4 δευτερόλεπτα είχε περάσει), στη συνέχεια, κάνετε ...
Εδώ είναι ο κώδικας σε γενικές γραμμές, όπως εγώ δεν ξέρω τι compiler που χρησιμοποιείτε.
Κωδικός:void διακοπής (void)

(

Εάν (TMR0IF) / / Χρησιμοποίησα το 0 έως το χρονόμετρο σημαία

(

TMR0IF = 0?

SecFlag = 1?

TMR0 = 0x80? / / Ανανέωση αξία TMR0

)

)Void main (void)

(

SetIO ()? / / Σκηνικά όλα τα IO και περιφερικήWhile (1)

(

αν (SecFlag) / / 1 sec έχει περάσει

(

SecFlag = 0? / / Επαναφορά τη σημαία του δευτερολέπτου

αν (rb0) / / αν εξακολουθεί να πατηθεί το κουμπί

Κουμπί ?

if (! rb0 & & Button> = 1) / / Αν το κουμπί απελευθέρωσης ήταν σε κάποιο σημείο ή στο τέλος.
Μπορείτε να βάλετε αυτή τη λειτουργία, ή καλύτερα εδώ έξω από αυτή τη λειτουργία.

(

Button = 0?

)

εάν (Button> = 4)

RA0 =! RA0? / / Θα εναλλαγή των Led.

)

If (! Rb0 & & Button> = 1) / / Η ίδια λειτουργία όπως και πριν, αλλά εδώ.

Κωδικός σου ...

) / / Τέλος while (1)) / / End main

 
Hi Gidimiz!
Παρακαλώ.Θα εκτιμούσα πάντα τα σχόλιά σας, γιατί μόλις αρχίσετε να σκέφτεστε ότι u έχω μάθει τα πάντα στη συνέχεια πτώση σας αρχίζει.
Έτσι εκτιμώ πραγματικά ur παρατηρήσεις, δεδομένου ότι είναι πάντα χρήσιμο να συζητήσουμε τα πράγματα με άλλα poeple.
Χαιρετισμοί.

 
Hi Waseem,

Ευχαριστώ ...
Donload το "ΔΩΡΕΑΝ, ΕΥΚΟΛΗ ΚΩΔΙΚΟΣ εγγράφως MPLAB χρήστες. (Another Νέα Ver.)" Που έχω αφίσα.Θα ήθελα πραγματικά, αν χρησιμοποιείτε C κώδικα.
Απολαμβάνω.

 

Welcome to EDABoard.com

Sponsor

Back
Top