기술나눔

[TB Works] MCU 기반 LCD12864 달력 및 온도 모니터링 시스템의 51 MCU Proteus 시뮬레이션 설계

2024-07-08

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

여기에 이미지 설명을 삽입하세요.

실험 보고서: 마이크로컨트롤러 기반 LCD12864 영구 달력 및 온도 모니터링 시스템 설계

배경 소개

이 실험의 목표는 STC89C52 마이크로 컨트롤러의 LCD12864 디스플레이를 기반으로 하는 영구 달력 시스템을 설계 및 구현하고 온도 센서를 통합하여 온도 모니터링 기능을 구현하는 것입니다. 시스템에는 매시간 차임벨과 알람 기능이 있으며 부저를 통해 알려줍니다. 이 디자인은 기본 시계 및 온도 표시를 실현할 수 있을 뿐만 아니라 특정 알람 기능도 갖추고 있어 가정이나 사무실 시나리오에 적합합니다.

하드웨어 소개

  1. STC89C52 마이크로컨트롤러: 시스템의 핵심 컨트롤러로서 다양한 기능의 구현을 담당합니다.
  2. LCD12864 디스플레이: 시간, 날짜, 온도 등의 정보를 표시하는데 사용됩니다.
  3. DS18B20 온도 센서: 주변온도를 실시간으로 모니터링하는데 사용됩니다.
  4. 부저: 시간별 시간 및 알람 알림에 사용됩니다.
  5. 버튼 모듈: 시간 및 알람 기능을 설정하는데 사용됩니다.
  6. 기타 전자 부품: 저항, 콘덴서 등 회로 구성 및 안정적인 동작을 위해 사용됩니다.

회로 설계

회로는 주로 마이크로 컨트롤러, LCD 디스플레이, 온도 센서 및 부저로 구성됩니다. LCD12864 디스플레이 화면은 병렬 인터페이스를 통해 마이크로컨트롤러에 연결되고, DS18B20 온도 센서는 단선 인터페이스를 통해 마이크로컨트롤러에 연결되며, 버저는 마이크로컨트롤러의 I/O 포트를 통해 제어됩니다.

주요 연결 지침

  1. LCD12864 디스플레이
    • 데이터 포트 D0-D7은 마이크로컨트롤러의 P0 포트에 연결됩니다.
    • 제어 신호 RS, RW 및 E는 각각 마이크로 컨트롤러의 P2.0, P2.1 및 P2.2에 연결됩니다.
  2. DS18B20 온도 센서
    • 데이터 포트 DQ는 마이크로 컨트롤러의 P3.7 포트에 연결됩니다.
  3. 부저
    • 마이크로컨트롤러의 P2.0 포트에 연결합니다.
  4. 버튼 모듈
    • 각 버튼은 버튼 상태를 스캔하고 감지하는 데 사용되는 마이크로 컨트롤러의 P1 포트에 연결됩니다.

소프트웨어 디자인

시스템 초기화

시스템 전원이 켜진 후 LCD 디스플레이 초기화, 시계 초기화, 인터럽트 초기화 등을 포함하여 먼저 초기화됩니다. 초기화 코드는 다음과 같습니다.

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

시간 표시 및 업데이트

시스템은 메인 루프의 시간을 지속적으로 새로 고치고 이를 LCD 디스플레이를 통해 표시합니다. 동시에 DS18B20 센서를 통해 온도 값을 읽고 LCD에 표시합니다.

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

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

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