Partage de technologie

[TB Works] 51 MCU Conception de simulation Proteus du système de calendrier perpétuel et de surveillance de la température LCD12864 basé sur MCU

2024-07-08

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

Insérer la description de l'image ici

Rapport d'expérience : Conception du calendrier perpétuel LCD12864 et du système de surveillance de la température basé sur un microcontrôleur

Introduction au contexte

Cette expérience vise à concevoir et à mettre en œuvre un système de calendrier perpétuel basé sur l'affichage LCD12864 du microcontrôleur STC89C52, et à intégrer un capteur de température pour réaliser la fonction de surveillance de la température. Le système dispose d'un carillon horaire et d'une fonction d'alarme, ainsi que d'un signal sonore. Cette conception peut non seulement réaliser un affichage de base de l'horloge et de la température, mais dispose également de certaines fonctions d'alarme, ce qui la rend adaptée aux scénarios de maison ou de bureau.

Présentation du matériel

  1. Microcontrôleur STC89C52: En tant que contrôleur principal du système, il est responsable de la mise en œuvre de diverses fonctions.
  2. Écran LCD12864: Utilisé pour afficher des informations telles que l’heure, la date et la température.
  3. Capteur de température DS18B20: Utilisé pour surveiller la température ambiante en temps réel.
  4. avertisseur sonore: Utilisé pour l’heure horaire et le rappel d’alarme.
  5. Module boutons: Utilisé par les utilisateurs pour régler l’heure et les fonctions d’alarme.
  6. Autres composants électroniques: Tels que les résistances, les condensateurs, etc., utilisés pour la construction de circuits et un fonctionnement stable.

Conception de circuits

Le circuit est principalement composé d'un microcontrôleur, d'un écran LCD, d'un capteur de température et d'un buzzer. L'écran d'affichage LCD12864 est connecté au microcontrôleur via une interface parallèle, le capteur de température DS18B20 est connecté au microcontrôleur via une interface monofilaire et le buzzer est contrôlé via le port e/s du microcontrôleur.

Principales instructions de connexion

  1. Écran LCD12864
    • Les ports de données D0-D7 sont connectés au port P0 du microcontrôleur.
    • Les signaux de commande RS, RW et E sont connectés respectivement à P2.0, P2.1 et P2.2 du microcontrôleur.
  2. Capteur de température DS18B20
    • Le port de données DQ est connecté au port P3.7 du microcontrôleur.
  3. avertisseur sonore
    • Connectez-vous au port P2.0 du microcontrôleur.
  4. Module boutons
    • Chaque bouton est connecté au port P1 du microcontrôleur, qui est utilisé pour scanner et détecter l'état du bouton.

conception de logiciels

initialisation du système

Une fois le système mis sous tension, il est d'abord initialisé, y compris l'initialisation de l'écran LCD, l'initialisation de l'horloge, l'initialisation des interruptions, etc. Le code d'initialisation est le suivant :

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 */
}

Affichage et mise à jour de l'heure

Le système actualise en permanence l'heure dans la boucle principale et l'affiche via l'écran LCD. En même temps, la valeur de température est lue via le capteur DS18B20 et affichée sur l'écran LCD.

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

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

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