Compartir tecnología

[TB Works] Diseño de simulación 51 MCU Proteus del calendario perpetuo LCD12864 y sistema de monitoreo de temperatura basado en MCU

2024-07-08

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

Insertar descripción de la imagen aquí

Informe del experimento: Diseño del sistema de monitoreo de temperatura y calendario perpetuo LCD12864 basado en microcontrolador

Introducción a los antecedentes

Este experimento tiene como objetivo diseñar e implementar un sistema de calendario perpetuo basado en la pantalla LCD12864 del microcontrolador STC89C52 e integrar un sensor de temperatura para realizar la función de monitoreo de temperatura. El sistema tiene función de alarma y timbre cada hora, y avisa mediante un timbre. Este diseño no sólo puede realizar una visualización básica del reloj y la temperatura, sino que también tiene ciertas funciones de alarma, lo que lo hace adecuado para escenarios de hogar u oficina.

Introducción de hardware

  1. Microcontrolador STC89C52: Como controlador central del sistema, es responsable de manejar la implementación de varias funciones.
  2. Pantalla LCD12864: Se utiliza para mostrar información como hora, fecha y temperatura.
  3. Sensor de temperatura DS18B20: Se utiliza para monitorear la temperatura ambiente en tiempo real.
  4. zumbador: Se utiliza para hora por hora y recordatorio de alarma.
  5. Módulo de botones: Se utiliza para que los usuarios establezcan funciones de hora y alarma.
  6. Otros componentes electrónicos: Como resistencias, condensadores, etc., utilizados para la construcción de circuitos y funcionamiento estable.

diseño de circuito

El circuito se compone principalmente de un microcontrolador, una pantalla LCD, un sensor de temperatura y un zumbador. La pantalla LCD12864 está conectada al microcontrolador a través de una interfaz paralela, el sensor de temperatura DS18B20 está conectado al microcontrolador a través de una interfaz de un solo cable y el zumbador se controla a través del puerto de E/S del microcontrolador.

Instrucciones de conexión principales

  1. Pantalla LCD12864
    • Los puertos de datos D0-D7 están conectados al puerto P0 del microcontrolador.
    • Las señales de control RS, RW y E están conectadas a P2.0, P2.1 y P2.2 del microcontrolador respectivamente.
  2. Sensor de temperatura DS18B20
    • El puerto de datos DQ está conectado al puerto P3.7 del microcontrolador.
  3. zumbador
    • Conéctese al puerto P2.0 del microcontrolador.
  4. Módulo de botones
    • Cada botón está conectado al puerto P1 del microcontrolador, que se utiliza para escanear y detectar el estado del botón.

diseño de software

inicialización del sistema

Después de encender el sistema, primero se inicializa, incluida la inicialización de la pantalla LCD, la inicialización del reloj, la inicialización de interrupciones, etc. El código de inicialización es el siguiente:

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

Visualización y actualización de la hora.

El sistema actualiza continuamente la hora en el bucle principal y la muestra a través de la pantalla LCD. Al mismo tiempo, el valor de temperatura se lee a través del sensor DS18B20 y se muestra en la pantalla LCD.

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

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

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