Heim Der Blog Blog Details

Entwurf eines Taxameters basierend auf dem AT89C52-Mikrocontroller

March 03 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Der Entwurf eines Taxameters mit dem AT89C52-Mikrocontroller umfasst mehrere Schritte, darunter Hardware-Design, Software-Programmierung und Integration.

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.

Entwurf eines Taxameters basierend auf dem AT89C52-Mikrocontroller - Blog - Ampheo

Hardware-Komponenten:

  1. AT89C52-Mikrocontroller: Die zentrale Steuereinheit.

  2. LCD-Display: Zur Anzeige des Fahrpreises, der zurückgelegten Strecke und anderer Informationen.

  3. Tastatur: Zur Eingabe von Anfangsparametern wie Grundpreis, Rate pro Kilometer usw.

  4. Entfernungssensor: Zur Messung der zurückgelegten Strecke (z. B. mit einem Drehgeber, der am Rad befestigt ist).

  5. Echtzeituhr (RTC): Zur Zeitmessung für die Berechnung von Wartegebühren.

  6. Summer: Zur Benachrichtigung des Fahrers oder Passagiers bei einer Änderung des Fahrpreises.

  7. Stromversorgung: Zur Stromversorgung des Mikrocontrollers und anderer Komponenten.

  8. EEPROM: Zur Speicherung von Fahrpreisdaten und anderen Einstellungen.

Hardware-Verbindungen:

  1. LCD-Display:

    • Datenpins (D0–D7) an Port 2 des AT89C52.

    • RS-, RW- und E-Pins an Port 1.

  2. Tastatur:

    • Zeilen und Spalten an Port 3.

  3. Entfernungssensor:

    • Ausgang an einen externen Interrupt-Pin (z. B. INT0) des AT89C52.

  4. Echtzeituhr (RTC):

    • SDA- und SCL-Pins an Port 0 mit Pull-up-Widerständen.

  5. Summer:

    • Verbunden mit einem GPIO-Pin (z. B. P1.0).

  6. 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:

  1. Initialisierung:

    • Initialisierung des LCDs, der Tastatur, der RTC und des EEPROMs.

    • Festlegen von Anfangsparametern wie Grundpreis, Rate pro Kilometer und Wartegebühren.

  2. Entfernungsberechnung:

    • Verwenden des Entfernungssensors zur Messung der zurückgelegten Strecke.

    • Inkrementieren des Entfernungszählers basierend auf dem Sensor-Eingang.

  3. Fahrpreisberechnung:

    • Berechnung des Fahrpreises basierend auf der zurückgelegten Strecke und der Wartezeit.

    • Fahrpreis = Grundpreis + (Strecke * Rate pro Kilometer) + (Wartezeit * Wartegebühr pro Minute).

  4. Anzeige aktualisieren:

    • Kontinuierliche Aktualisierung des LCDs mit dem aktuellen Fahrpreis, der Strecke und der Wartezeit.

  5. Tastatureingabe:

    • Ermöglichen der Eingabe von Anfangsparametern und Zurücksetzen des Taxameters durch den Fahrer.

  6. EEPROM-Speicherung:

    • Speichern von Fahrpreisdaten und Einstellungen im EEPROM zur dauerhaften Speicherung.

  7. Summersteuerung:

    • Aktivieren des Summers bei einer Änderung des Fahrpreises oder am Ende der Fahrt.

Beispielcode-Ausschnitt:

c
 
#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.

Ampheo