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

实验报告:基于单片机的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显示屏初始化、时钟初始化和中断初始化等。初始化代码如下:

c 复制代码
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上。

c 复制代码
while ( 1 )
{
	Clock_Fresh( clock_time );      /* 时间刷新 */
	Lcd_Clock( clock_time );        /* 时间显示 */

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

	/* 整点报时 */
	if ( (*clock_time == 0x59) && (*(clock_time + 1) == 0x59) )
	{
		bell	= 0;
		TR2	= 1;    /* 启动Timer2 */
	}
	/* 闹钟报警 */
	if ( *alarm_time == HexNum_Convert( *(clock_time + 1) ) ) /* 分钟相吻合 */
		if ( *(alarm_time + 1) == HexNum_Convert( *(clock_time + 2) ) ) /* 小时相吻合 */
		{
			bell	= 0;
			TR2	= 1;    /* 启动Timer2 */
		}
}

中断服务程序

系统中断服务程序主要包括Timer0和Timer2的中断服务,用于整点报时和闹钟功能。Timer0用于整点报时,每小时响三声,Timer2用于每分钟的时间校准。

c 复制代码
void Timer0_Service() interrupt 1
{
	static uchar	count	= 0;
	static uchar	flag	= 0;    /* 记录鸣叫的次数 */
	count	= 0;
	TR0	= 0;    /* 关闭Timer0 */
	TH0	= 0x3c;
	TL0	= 0XB0;    /* 延时 50 ms */
	TR0	= 1;    /* 启动Timer0 */
	count++;
	if ( count == 20 ) /* 鸣叫 1 秒 */
	{
		bell	= ~bell;
		count	= 0;
		flag++;
	}
	if ( flag == 6 )
	{
		flag	= 0;
		TR0	= 0;    /* 关闭Timer0 */
	}
}

结论

通过本实验,我们成功设计并实现了一个基于STC89C52单片机的LCD12864显示的万年历和温度监测系统。系统具备时间显示、温度监测、整点报时和闹钟功能,硬件电路设计合理,软件程序逻辑清晰,能够稳定运行,满足设计需求。

资料

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
相关推荐
嵌联驰44 分钟前
【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM
单片机
Daemon.Chen1 小时前
【STM32开发之寄存器版】(五)-窗口看门狗WWDG
stm32·单片机·嵌入式硬件
嵌入式杂谈3 小时前
STM32中断编程详解:配置外部中断和中断服务例程
stm32·单片机·嵌入式硬件
光子物联单片机4 小时前
传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型
stm32·单片机·嵌入式硬件·mcu
嵌入式杂谈6 小时前
STM32中断编程指南:NVIC和中断优先级
stm32·单片机·嵌入式硬件
xiaobuding_QAQ7 小时前
自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)
单片机·嵌入式硬件·学习·proteus
zxfly20139 小时前
STM32的DMA技术介绍
stm32·单片机·嵌入式硬件
CV金科14 小时前
蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)
stm32·单片机·嵌入式硬件·算法·蓝桥杯
嵌入式详谈16 小时前
基于STM32的智能风扇控制系统设计
stm32·单片机·嵌入式硬件
小小怪大梦想16 小时前
RTC实时时钟
stm32·单片机·嵌入式硬件