2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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 */
}
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)