一、项目功能简介
整个设计系统由STC89C52单片机+DS1302时钟芯片+DS18B20温度模块+LCD1602液晶显示+按键模块+电源模块组成。
具体功能:
1、显示和设置年、月、日、时、分、秒、星期;
2、显示农历、闰年、平年;
3、显示和设置闹钟;
4、整点报时;
二、系统构成图
![](https://img-blog.csdnimg.cn/e0821677ae8b45b8aa58ecc0010a5454.png)
三、仿真
本次项目采用proteus8.11软件实现仿真设计。由于proteus软件版本原因,不能确保proteus其他版本软件能够正常运行,请安装好对应软件版本(版本一致或者高于这个版本都可以)
![](https://img-blog.csdnimg.cn/bae2e56a111749c7a50219667a452aa9.png)
四、程序
void main()
{
LCD_Init(); //LCD的初始化
DS1302_Init(); //时间模块的初始化
Timer0_Init(); //定时器的初始化
// DS1302_SetTime(); //用于DS1302第一次启动,写入时间
DS1302_ReadTime(); //读取时间
ALAEM_Time[0] = DS1302_Time[0]; //先把时间的年月日填入闹钟里面
ALAEM_Time[1] = DS1302_Time[1];
ALAEM_Time[2] = DS1302_Time[2];
Temp_Buffer = Get_temp(); //读取DS18B20的值
Delay_ms(500); //等待1s等待DS18B20数据稳定。否则可能会出现85℃。
LCD_ShowString(1,1," - - "); //LCD先显示时间日期的标号
LCD_ShowString(2,1," : : ");
BUZZ_F();
while(1)
{
Delay_ms(10); //延时
KeyNumber = Key(); //检测哪个按键被按下
if(KeyNumber == 1 && SET_flag == 0 ) //按键1被按下
{
MODE++; //显示界面++
LCD_WriteCommand(0x01); //清理LCD显示屏幕
if(MODE > 2) //只有三个显示界面,0-1-2
{
MODE = 0 ;
}
if(MODE == 0 ) //显示时间日期
{
LCD_ShowString(1,1," - - "); //LCD先显示时间日期的标号
LCD_ShowString(2,1," : : ");
}
if(MODE == 1 ) //显示农历
{
LCD_ShowString(1,1,"NL: - - ");
LCD_ShowString(2,1," : : ");
}
if(MODE == 2 ) //显示闹钟
{
LCD_ShowString(1,1,"ALAEM_Time");
LCD_ShowString(2,1," - - : ");
}
}
switch(MODE) //显示选择模式
{
case 0: TimeShow();break; //时间日期
case 1: TimeNLShow();break; //农历
case 2: Alarm_Show();break; //闹钟
}
ShowSet(); //进入设置
ALAEM_CLOCK(); //闹钟检测
baoshi(); //整点报时
}
}
五、原理图
本原理图利用AD17软件设计。
![](https://img-blog.csdnimg.cn/5edd10113b5344bc9bd1f6f41f14dacd.png)
六、参考论文
论文仅限于参考,内容跟项目对应。
![](https://img-blog.csdnimg.cn/800a98f76665448abd217c1d4f872bdf.png)
七、全部资料
![](https://img-blog.csdnimg.cn/064fd4835c8c4cd3811d00ea6786d1f5.png)
八、资料获取
![](https://img-blog.csdnimg.cn/3c75da2f70f0463baaeb5dc7222452cb.png)
关注公众号,后台回复:51万年历
|