技术共享

【TB作品】51单片机 Proteus仿真 基于单片机的LCD12864万年历及温度监测系统设计

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)