Entwurf eines Taxameters basierend auf dem AT89C52-Mikrocontroller
Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.
Der Entwurf eines Taxameters mit dem AT89C52-Mikrocontroller umfasst mehrere Schritte, darunter Hardware-Design, Software-Programmierung und Integration. Nachfolgend finden Sie eine grundlegende Übersicht, wie Sie ein Taxameter mit dem AT89C52-Mikrocontroller entwerfen können.
Hardware-Komponenten:
-
AT89C52-Mikrocontroller: Die zentrale Steuereinheit.
-
LCD-Display: Zur Anzeige des Fahrpreises, der zurückgelegten Strecke und anderer Informationen.
-
Tastatur: Zur Eingabe von Anfangsparametern wie Grundpreis, Rate pro Kilometer usw.
-
Entfernungssensor: Zur Messung der zurückgelegten Strecke (z. B. mit einem Drehgeber, der am Rad befestigt ist).
-
Echtzeituhr (RTC): Zur Zeitmessung für die Berechnung von Wartegebühren.
-
Summer: Zur Benachrichtigung des Fahrers oder Passagiers bei einer Änderung des Fahrpreises.
-
Stromversorgung: Zur Stromversorgung des Mikrocontrollers und anderer Komponenten.
-
EEPROM: Zur Speicherung von Fahrpreisdaten und anderen Einstellungen.
Hardware-Verbindungen:
-
LCD-Display:
-
Datenpins (D0–D7) an Port 2 des AT89C52.
-
RS-, RW- und E-Pins an Port 1.
-
-
Tastatur:
-
Zeilen und Spalten an Port 3.
-
-
Entfernungssensor:
-
Ausgang an einen externen Interrupt-Pin (z. B. INT0) des AT89C52.
-
-
Echtzeituhr (RTC):
-
SDA- und SCL-Pins an Port 0 mit Pull-up-Widerständen.
-
-
Summer:
-
Verbunden mit einem GPIO-Pin (z. B. P1.0).
-
-
EEPROM:
-
SDA- und SCL-Pins an Port 0 mit Pull-up-Widerständen.
-
Software-Design:
Die Software für das Taxameter wird in C geschrieben und mit einem Compiler wie Keil uVision kompiliert. Das Programm umfasst die folgenden Module:
-
Initialisierung:
-
Initialisierung des LCDs, der Tastatur, der RTC und des EEPROMs.
-
Festlegen von Anfangsparametern wie Grundpreis, Rate pro Kilometer und Wartegebühren.
-
-
Entfernungsberechnung:
-
Verwenden des Entfernungssensors zur Messung der zurückgelegten Strecke.
-
Inkrementieren des Entfernungszählers basierend auf dem Sensor-Eingang.
-
-
Fahrpreisberechnung:
-
Berechnung des Fahrpreises basierend auf der zurückgelegten Strecke und der Wartezeit.
-
Fahrpreis = Grundpreis + (Strecke * Rate pro Kilometer) + (Wartezeit * Wartegebühr pro Minute).
-
-
Anzeige aktualisieren:
-
Kontinuierliche Aktualisierung des LCDs mit dem aktuellen Fahrpreis, der Strecke und der Wartezeit.
-
-
Tastatureingabe:
-
Ermöglichen der Eingabe von Anfangsparametern und Zurücksetzen des Taxameters durch den Fahrer.
-
-
EEPROM-Speicherung:
-
Speichern von Fahrpreisdaten und Einstellungen im EEPROM zur dauerhaften Speicherung.
-
-
Summersteuerung:
-
Aktivieren des Summers bei einer Änderung des Fahrpreises oder am Ende der Fahrt.
-
Beispielcode-Ausschnitt:
#include <reg52.h> #include <stdio.h> #include <intrins.h> #define LCD_PORT P2 #define RS P1_0 #define RW P1_1 #define EN P1_2 void LCD_Command(unsigned char cmd); void LCD_Data(unsigned char data); void LCD_Init(); void LCD_String(char *str); void Delay(unsigned int ms); void main() { unsigned int distance = 0; float fare = 0.0; float base_fare = 50.0; // Beispiel-Grundpreis float rate_per_km = 10.0; // Beispiel-Rate pro Kilometer float waiting_charge = 1.0; // Beispiel-Wartegebühr pro Minute unsigned int waiting_time = 0; LCD_Init(); LCD_String("Taxameter"); while (1) { // Simulieren von Strecke und Wartezeit (ersetzen durch tatsächlichen Sensor-Eingang) distance++; waiting_time++; // Fahrpreis berechnen fare = base_fare + (distance * rate_per_km) + (waiting_time * waiting_charge); // Fahrpreis, Strecke und Wartezeit anzeigen LCD_Command(0xC0); // Cursor in die zweite Zeile bewegen LCD_String("Preis: "); LCD_Data((int)fare); LCD_String(" Strecke: "); LCD_Data(distance); LCD_String(" Warten: "); LCD_Data(waiting_time); Delay(1000); // Jede Sekunde aktualisieren } } void LCD_Command(unsigned char cmd) { LCD_PORT = cmd; RS = 0; RW = 0; EN = 1; _nop_(); EN = 0; Delay(2); } void LCD_Data(unsigned char data) { LCD_PORT = data; RS = 1; RW = 0; EN = 1; _nop_(); EN = 0; Delay(2); } void LCD_Init() { LCD_Command(0x38); // 8-Bit-Modus, 2 Zeilen, 5x7 Punkte LCD_Command(0x0C); // Display ein, Cursor aus LCD_Command(0x01); // Display löschen LCD_Command(0x06); // Cursor inkrementieren } void LCD_String(char *str) { while (*str) { LCD_Data(*str++); } } void Delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 123; j++); }
Erklärung:
-
LCD_Command: Sendet einen Befehl an das LCD.
-
LCD_Data: Sendet Daten an das LCD.
-
LCD_Init: Initialisiert das LCD.
-
LCD_String: Zeigt eine Zeichenkette auf dem LCD an.
-
Delay: Erzeugt eine Verzögerung in Millisekunden.
-
main: Die Hauptschleife, in der der Fahrpreis berechnet und angezeigt wird.
Fazit:
Dies ist ein grundlegender Entwurf für ein Taxameter mit dem AT89C52-Mikrocontroller. Die tatsächliche Implementierung kann zusätzliche Funktionen wie EEPROM-Speicherung für Fahrpreisdaten, eine anspruchsvollere Entfernungsmessung und die Handhabung verschiedener Tarifstrukturen erfordern. Der bereitgestellte Code ist ein Ausgangspunkt und kann je nach spezifischen Anforderungen erweitert werden.