【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
相关推荐
猫猫的小茶馆3 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆3 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭3 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原4 小时前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯5 小时前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网6 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
贝塔实验室7 小时前
新手如何使用Altium Designer创建第一张原理图(三)
arm开发·单片机·嵌入式硬件·fpga开发·射频工程·基带工程·嵌入式实时数据库
@good_good_study7 小时前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件
Darken037 小时前
什么是“位带”?;在STM32单片机中有什么作用?
stm32·单片机·嵌入式硬件
清风6666668 小时前
基于单片机的智能豆浆机设计(加热打浆熬煮自动控制与防干溢保护)
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业