【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
相关推荐
scan13 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu013 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
深圳市青牛科技实业有限公司5 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比6 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie6 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
西瓜籽@6 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988729 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张9 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_7393128712 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
徐嵌14 小时前
STM32项目---水质水位检测
stm32·单片机·嵌入式硬件