Technologieaustausch

[TB Works] 51 MCU Proteus-Simulationsdesign des ewigen Kalenders LCD12864 und des Temperaturüberwachungssystems basierend auf MCU

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Fügen Sie hier eine Bildbeschreibung ein

Versuchsbericht: Entwurf des ewigen Kalenders und Temperaturüberwachungssystems LCD12864 auf Basis eines Mikrocontrollers

Hintergrundeinführung

Dieses Experiment zielt darauf ab, ein ewiges Kalendersystem basierend auf der LCD12864-Anzeige des STC89C52-Mikrocontrollers zu entwerfen und zu implementieren und einen Temperatursensor zu integrieren, um die Temperaturüberwachungsfunktion zu realisieren. Das System verfügt über eine stündliche Glocken- und Alarmfunktion sowie Hinweise durch einen Summer. Dieses Design kann nicht nur eine grundlegende Uhr- und Temperaturanzeige realisieren, sondern verfügt auch über bestimmte Alarmfunktionen, wodurch es für Heim- oder Büroszenarien geeignet ist.

Hardware-Einführung

  1. STC89C52 Mikrocontroller: Als zentraler Controller des Systems ist er für die Implementierung verschiedener Funktionen verantwortlich.
  2. LCD12864-Anzeige: Wird zur Anzeige von Informationen wie Uhrzeit, Datum und Temperatur verwendet.
  3. DS18B20 Temperatursensor: Wird zur Überwachung der Umgebungstemperatur in Echtzeit verwendet.
  4. Summer: Wird für stündliche Zeit- und Alarmerinnerungen verwendet.
  5. Tastenmodul: Wird für Benutzer zum Einstellen von Zeit- und Alarmfunktionen verwendet.
  6. Andere elektronische Komponenten: Wie Widerstände, Kondensatoren usw., die für den Schaltungsaufbau und den stabilen Betrieb verwendet werden.

Schaltungsdesign

Die Schaltung besteht hauptsächlich aus einem Mikrocontroller, einem LCD-Display, einem Temperatursensor und einem Summer. Der LCD12864-Anzeigebildschirm ist über eine parallele Schnittstelle mit dem Mikrocontroller verbunden, der Temperatursensor DS18B20 ist über eine Eindrahtschnittstelle mit dem Mikrocontroller verbunden und der Summer wird über den I/O-Port des Mikrocontrollers gesteuert.

Hauptverbindungsanweisungen

  1. LCD12864-Anzeige
    • Die Datenanschlüsse D0-D7 sind mit dem P0-Anschluss des Mikrocontrollers verbunden.
    • Die Steuersignale RS, RW und E sind jeweils mit P2.0, P2.1 und P2.2 des Mikrocontrollers verbunden.
  2. DS18B20 Temperatursensor
    • Der Datenport DQ ist mit dem P3.7-Port des Mikrocontrollers verbunden.
  3. Summer
    • Verbinden Sie sich mit dem P2.0-Port des Mikrocontrollers.
  4. Tastenmodul
    • Jede Taste ist mit dem P1-Port des Mikrocontrollers verbunden, der zum Scannen und Erkennen des Tastenstatus verwendet wird.

Software-Design

Systeminitialisierung

Nach dem Einschalten des Systems wird es zunächst initialisiert, einschließlich der Initialisierung des LCD-Displays, der Uhrinitialisierung, der Interrupt-Initialisierung usw. Der Initialisierungscode lautet wie folgt:

void main( void )
{
	uchar	clock_time[6]	= { 0X00, 0X59, 0X23, 0X09, 0X04, 0X11 };       /* 定义时间变量 秒  分 时 日 月 年 */
	uchar	alarm_time[2]	= { 10, 06 };                                   /* 闹钟设置  alarm_time[0]: 分钟  alarm_time[1] :小时 */
	uchar	temperature[2];                                                 /* 定义温度变量   temperature[0]  低8位   temperature[1]  高8位 */
	Lcd_Initial();                                                          /* LCD初始化 */
	Clock_Fresh( clock_time );                                              /* 刷新时间 */
	Clock_Initial( clock_time );                                            /* 时钟初始化 */

	/* 中断初始化 */
	EA	= 1;    /* 开总中断 */
	ET0	= 1;    /* Timer0 开中断 */
	ET2	= 1;    /* Timer2 开中断 */
	TMOD	= 0x01; /* Timer0 工作方式 1 */
	RCAP2H	= 0x3c;
	RCAP2L	= 0xb0; /* Timer2 延时 50 ms */
}

Zeitanzeige und Aktualisierung

Das System aktualisiert kontinuierlich die Zeit in der Hauptschleife und zeigt sie auf dem LCD-Display an. Gleichzeitig wird der Temperaturwert über den DS18B20-Sensor gelesen und auf dem LCD angezeigt.

while ( 1 )
{
	Clock_Fresh( clock_time );      /* 时间刷新 */
	Lcd_Clock( clock_time );        /* 时间显示 */

	Sensor_Fresh( temperature );    /* 温度更新 */
	Lcd_Temperture( temperature );  /* 温度显示 */

	/* 整点报时 */
	if ( (*clock_time == 0x59)