2024-09-01
售卖作品
00

目录

实验报告:基于单片机的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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!