51单片机项目设计:时钟万年历、闹钟(lcd1602显示)

基于51单片机的时钟万年历项目设计

资料下载链接:51单片机时钟设计.rar

一、项目功能:
1、能够显示年、月、日、星期、时间、实时温度。
2、能够按键实现修改当前时间与日期。
3、能够同时设定闹钟,在指定时间蜂鸣器发出滴滴声响。
4、掉电走时,掉电闹钟设置数据不丢失,断开电源再上电依然是上一次设置的闹钟状态

二、项目思路:
利用STC89C52RC单片机作为主控芯片,LCD1602显示数据,DS1302提供日期时间信息,DS18B20作为温度传感器,利用纽扣电池提供DS1302掉电走时电源,利用单片机内部eeprom存储闹钟数据信息。用户输入电路采用4个按键,输出电路采用一个蜂鸣器。

三、主要的芯片与传感器介绍:
STC89C52RC:是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
在这里插入图片描述
LCD1602: 是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形
在这里插入图片描述
DS1302: 是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
在这里插入图片描述
DS18B20: 是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
在这里插入图片描述
在这里插入图片描述
四、准备材料
STC89C52RC、DS18B20、DS1302、LCD1602、洞洞板、三极管、电容、电阻、晶振、纽扣电池、蜂鸣器、按键、开关、LED、电位器、排座、芯片底座、电源插座、电源线等。

五、用proteus绘制仿真电路
由于纽扣电池掉电保存等功能不能仿真,这里没有画出,实物连接图参考下面DXP绘制的原理图为准
在这里插入图片描述
六、DXP原理图绘制
在这里插入图片描述
七、编写代码
由于代码过长只提供部分核心代码:

/********显示日期、时间、星期***********/
void display_data(void)
{
	LcdWriteCom(0x80);
	LcdWritestr("20");	
	LcdWriteData(TIME[6]/16+0x30);	  //年
	LcdWriteData(TIME[6]%16+0x30);
	LcdWriteData('-');
	LcdWriteData(TIME[4]/16+0x30);	  //月
	LcdWriteData(TIME[4]%16+0x30);
	LcdWriteData('-');
	LcdWriteData(TIME[3]/16+0x30);	  //日
	LcdWriteData(TIME[3]%16+0x30);

	LcdWritestr("  ");
	switch(TIME[5])					   //显示星期
	{		
		case 0:LcdWritestr("Mon"); break;
		case 1:LcdWritestr("Tue"); break;
		case 2:LcdWritestr("Wed"); break;
		case 3:LcdWritestr("Thu"); break;
		case 4:LcdWritestr("Fri"); break;
		case 5:LcdWritestr("Sat"); break;
		case 6:LcdWritestr("Sun"); break;
	}
	if(alarmswitch==ON)LcdWriteData('.');
	else LcdWriteData(' ');

	LcdWriteCom(0xC0);
	LcdWriteData(' ');
	LcdWriteData(TIME[2]/16+0x30);	  //时
	LcdWriteData(TIME[2]%16+0x30);
	LcdWriteData(':');
	LcdWriteData(TIME[1]/16+0x30);	  //分
	LcdWriteData(TIME[1]%16+0x30);
	LcdWriteData(':');
	LcdWriteData(TIME[0]/16+0x30);	  //秒
	LcdWriteData(TIME[0]%16+0x30);
	LcdWritestr(" ");
}
/**************main函数**************/
void main(void)
{
	LcdInit();	 		//lcd初始化
	//Ds1302Init();		  //时钟初始化
	Ds18b20Init();		  //温度传感器初始化
	SectorErase(0x2001);  //擦除扇区

	alarm_hour=byte_read(0x2601);//获取上一次保存的闹钟数据
	alarm_min=byte_read(0x2201);
	alarmswitch=byte_read(0x2401);
	while(1)		
	{
		switch(mode)	//模式选择
		{
			case DISPLAYDATA:		//时间显示模式
				Ds1302ReadTime(); //更新时间
				display_data();		  //显示时间 	 秒分时日月周年
				displaytemp(Ds18b20ReadTemp());//显示温度
	   			keypros(); 				//按键检测
				if(alarmswitch==ON && alarm_hour==TIME[2] && alarm_min==TIME[1])  //闹钟
				{
					mode = ALARMCLOCK; 
				}
				break;
			case MODIFYDATA:			  //时间修改模式
				modify();
				break;
			case SETALARMCLOCK:			   //设置闹钟模式
				setalarmclock();
				break;
			case ALARMCLOCK:			   //闹钟模式
				alarmclock();
				break;
		}
		
	}				
}

八、实物展览
做了一两天,总算做好了,由于博主性子急,不想浪费时间和焊锡,就用了许多跳线,稍微有点不美观,但不影响使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资料下载链接:51单片机时钟设计.rar

由于下载csdn资料需要积分 ,需要资料的发送 “51单片机时钟设计”
到我的邮箱:[email protected]

我就会把资料给你发过来。
在这里插入图片描述
代码文件:
在这里插入图片描述
原理图文件:
在这里插入图片描述
仿真文件:
在这里插入图片描述
博主能力有限,不到之处还请批评指正。
求支持。

END…

猜你喜欢

转载自blog.csdn.net/mbs520/article/details/106099739