Sir, ich brauche Hilfe, wie man Zeit in LCD mit Interrupt (mit 89s52 Mikrocontroller) zurückgesetzt

M

manoharagn

Guest
Sir, ich bekam Ausgang zu Zeit in LCD mit 89s52.but ich die Hilfe, wann immer ich den Schalter in der Bord der Zeit von Anfang mit externen Interrupt startet drücken müssen angezeigt werden. hier ist der Code, wie man den Code zu modifizieren.
Code:
 # include # define cont_port P3 # define # define-Port P1 P2 Dataport / / Data-Port für LCD # define m_sec 10 sbit rs = cont_port ^ 0; sbit rw = cont_port ^ 1; sbit en = cont_port ^ 6; sbit dig_hr1 Port = ^ 0; sbit dig_min1 Port = ^ 1; sbit start = ^ 2-Port; sbit am_pm Port = ^ 3; int h, HR1 = 0; int min, min1 = 0; int sec, sec1 = 0, dig_am_pm = 0 void delay (unsigned int ms) / / Zeitverzögerung funtion {int i, j; for (i = 0; I59) min1 = 0; lcd_cmd (0xC6); lcd_data_int (min1);} void main () {int k; start = 1; dig_hr1 = 1; dig_min1 = 1; lcd_cmd (0x01); lcd_cmd (0x83), LCD ("SET TIMING"); lcd_cmd (0xC3); lcd_data_int (HR1); lcd_data (':'); lcd_data_int (min1 ), während (Start == 0) {Delay (10); if (dig_hr1 == 0) set_hr1 (); if (dig_min1 == 0) set_min1 ();} if (am_pm == 0) {lcd_cmd (0xC8) ; lcd_data_string ("AM"); dig_am_pm = 0;} if (am_pm == 1) {lcd_cmd (0xC8); lcd_data_string ("pm"); dig_am_pm = 1;} Verzögerung (200); lcd_cmd (0x01); while ( 1) {für (k = 0, k
 
machen Sie einfach eine Funktion und lassen Sie es von Ihrem Interrupt-Handler (für externen Interrupt) aufgerufen werden und in dieser Funktion weisen Sie Ihre Variablen, dh das Zählen Uhr, Uhr, Std., Min., Sek. .... etc. werden. auf Null ..
 
Sir, ich habe mein Niveau ... Ich habe den Code wie dieser Leere Timer0 () {min1 Interrupt 1 = 0; hr1 = 0; sec1 = 0;} und i initialisiert IE = 0x84; für externe Hardware-Interrupt INT1 im Hauptprogramm aber nicht ausgegeben habe.
 
suchen, können Sie überprüfen, ob Ihre externen Interrupt arbeitet oder nicht, einfach durch ein Putting führte zu einer gewissen Ausgangs-Pin der Controller, und in der Interrupt-Funktion blinkt es .. so dass es Ihnen helfen, in Debugging .. erhalten Sie möglicherweise wissen, dass Ihre Funktion am Anfang ist, wird als atleast .. wenn es nicht immer genannt dann aus den Gründen, wegen denen es geschieht denken ... überprüfen Sie die schematische, wenn Sie richtig die Drähte an externen Interrupt gelötet haben 1 nicht 0 .. dh Pin13 (soweit ich mich erinnere) .. (wie zB = 84h) ...
 
Danke für deine Antwort Sir. Schließlich bekam Ausgang am Pin INT0 (P3.2) weiß nicht, warum am Pin P3.3 Ausgang nicht bekam. sowieso thank u very much.
 
Arey keine Notwendigkeit für Dank .. its all Ihre Bemühungen ...
 
..... Sir, wenn ich jetzt die Umsetzung Drücken der Taste (Erde), wird der Zähler auf 1 Inkrement. (sir i think externe H / W-Interrupts sind niedrige Interrupt so seine funktioniert, wenn ich auf GND statt Schalter). zum Zählen Ich änderte den Code wie dieser Leere Timer0 () {hr1-Interrupt 0 = 0; hr = 0; min = 0; min1 = 0; sec = 0; sec1 = 0; if (cont_port ^ 2 == 0) {count = count +1; lcd_cmd (0xC8); lcd_data_string ("count =");}} ist das richtig? Ich wißt nicht, ob ich ....... Ausgang HV zu verwenden Zähler hier?
 
Zunächst einmal müssen Sie werden das Auslesen des Interrupt-Pins Struktur und ihre Arbeitsbedingungen bro,,, lesen Sie bitte Mazidi für 8051 tun .. Es ist klar heraus dort geschrieben, dass diese externe Interrupts aktiv niedrig sind! diese beiden Interrupts sind in der Regel hoch ist, müssen Sie liefern Logik niedrig, um mit ihnen zu arbeiten ..... nun, sagen Sie mir zwei Dinge .. was Sie wollen, um mit dem Zähler Inkrement zu tun? Was ist lcd_cmd Funktion (0xC8); tun? Senden Sie 0c8 an den LCD als cmd .. um den Cursor zu bewegen .. c8 irgendwo Mitte der zweiten Zeile??? (für 16 * 2 LCD)
 
Sir, ich brauche den Zähler zu zählen, wie oft ich die Zeit zurückgesetzt. i verwendet lcd_cmd (0xC8) (ich denke, dass "Kokos =" ll 6 oder 7 Positionen in LCD-nehmen nach, dass meine Zählwert abgebildet erhältlich sein), um Zählerwert an dieser Position, aber ich weiß nicht, wie man diesen Wert auf diese Position zu bekommen ....... Sir, ich bin der Anfänger lernen, damit ich jede einzelne Zeile des Programms und Konzepte. lcd_cmd (0xC0) Dieser Befehl ist in Ordnung angezeigt werden ab 2 Linie.
 
es ist ok, zaehler = zaehler +1; lcd_cmd (0xC8); lcd_data_string ("count ="); aus diesen Zeilen, wird es erscheinen, dass Sie aufwärtszählend jedesmal die Funktion aufgerufen wird .. dann, dann fahren Sie das LCD-Cursor auf die Position C8 (fast bis zur Mitte des Bildschirms in der zweiten Zeile). Dann sind Sie die Zeichenfolge "count =" auf dem LCD-Bildschirm eingeblendet werden .. Aber Sie sind ja nichts zu tun, dh Sie stellen nicht die nötige Zählwert um auf dem Bildschirm erscheint .. zeigen den Zählerstand auf dem LCD auch .. n Was ist cont_port ^ 2? I dont sehen es in dem oben genannten Programm .. n, sobald Sie den Schalter (externer Interrupt aufgerufen wird) drücken .. dann für welchen Zweck Sie verwenden, wenn die Bedingung wieder ...? machen den Zähler Inkrement es nur .. initiallise alle anderen Dinge auf Null. und rufen Sie die LCD-Funktionen, um die "Zählwert"-Display (auch die "count =" string wenn Sie wollen)
 
hai Herr bekam Ausgang i modifiziert den Code als ungültig Timer0 () Interrupt 0 {/ / lcd_cmd (0x01) ;/ / HR1 = 0; hr = 0; min = 0; min1 = 0; sec = 0; sec1 = 0; Graf = count + +; lcd_cmd (0xC0); lcd_data_string ("count =:"); Wert = (count/10) ;/ / / / / / / / / / / / für ASCII-Konvertierung. Wert = (count% 10);; lcd_data (Wert 48), es werde bis zu 99 lcd_data (Wert 48) count}
 
Ja, es funktionierte wie gesagt ich Sie mit dem if-Bedingung für unbekannte Zwecke ..
 

Welcome to EDABoard.com

Sponsor

Back
Top