Condivisione della tecnologia

[TB Works] 51 Progettazione della simulazione MCU Proteus del calendario perpetuo LCD12864 e del sistema di monitoraggio della temperatura basato su MCU

2024-07-08

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

Inserisci qui la descrizione dell'immagine

Rapporto sull'esperimento: progettazione del calendario perpetuo LCD12864 e del sistema di monitoraggio della temperatura basato su microcontrollore

Introduzione di fondo

Questo esperimento mira a progettare e implementare un sistema di calendario perpetuo basato sul display LCD12864 del microcontrollore STC89C52 e integrare un sensore di temperatura per realizzare la funzione di monitoraggio della temperatura. Il sistema è dotato di segnale acustico orario e funzione di allarme e avvisa tramite cicalino. Questo design non solo può realizzare la visualizzazione di base dell'orologio e della temperatura, ma ha anche alcune funzioni di allarme, che lo rendono adatto a scenari domestici o d'ufficio.

Introduzione all'hardware

  1. Microcontrollore STC89C52: In qualità di controller principale del sistema, è responsabile della gestione dell'implementazione di varie funzioni.
  2. Display LCD12864: Utilizzato per visualizzare informazioni quali ora, data e temperatura.
  3. Sensore di temperatura DS18B20: Utilizzato per monitorare la temperatura ambiente in tempo reale.
  4. cicalino: Utilizzato per l'ora oraria e il promemoria della sveglia.
  5. Modulo pulsanti: Utilizzato dagli utenti per impostare le funzioni di ora e sveglia.
  6. Altri componenti elettronici: Come resistori, condensatori, ecc., utilizzati per la costruzione di circuiti e il funzionamento stabile.

progettazione del circuito

Il circuito è composto principalmente da un microcontrollore, display LCD, sensore di temperatura e cicalino. Lo schermo LCD12864 è collegato al microcontrollore tramite un'interfaccia parallela, il sensore di temperatura DS18B20 è collegato al microcontrollore tramite un'interfaccia a filo singolo e il cicalino è controllato tramite la porta I/O del microcontrollore.

Principali istruzioni di collegamento

  1. Display LCD12864
    • Le porte dati D0-D7 sono collegate alla porta P0 del microcontrollore.
    • I segnali di controllo RS, RW ed E sono collegati rispettivamente a P2.0, P2.1 e P2.2 del microcontrollore.
  2. Sensore di temperatura DS18B20
    • La porta dati DQ è collegata alla porta P3.7 del microcontrollore.
  3. cicalino
    • Collegare alla porta P2.0 del microcontrollore.
  4. Modulo pulsanti
    • Ogni pulsante è collegato alla porta P1 del microcontrollore, che viene utilizzata per scansionare e rilevare lo stato del pulsante.

progettazione del software

inizializzazione del sistema

Dopo l'accensione, il sistema viene prima inizializzato, inclusa l'inizializzazione del display LCD, l'inizializzazione dell'orologio, l'inizializzazione dell'interruzione, ecc. Il codice di inizializzazione è il seguente:

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

Visualizzazione e aggiornamento dell'ora

Il sistema aggiorna continuamente l'ora nel ciclo principale e la visualizza attraverso il display LCD. Allo stesso tempo, il valore della temperatura viene letto attraverso il sensore DS18B20 e visualizzato sul display LCD.

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

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

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