引言
本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期、时间的校准。具有走时精确,功耗低,显示直观,调整简单方便等优点。
功能描述
基本显示:
第一行为日期,依次为:年-月-日-星期
第二行为时间,依次为:时:分:秒
说明:
每月的天数,闰年的天数可自动调整
蓝牙校准日期:
命令d+年月日星期+#,如设置2016年12月8日星期四,手机发送命令:d16120804
蓝牙校准时间:
命令t+时分秒+#,如设置15:11:46,手机发送命令:t151146#
硬件电路设计
硬件概述:
AT89S52单片机介绍:AT89S52_百度百科
DS1302时钟芯片介绍:DS1302_百度百科
LCD1602液晶模块介绍:LCD1602_百度百科
HC-05嵌入式蓝牙串口通讯模块介绍:HC-05
蓝牙通信原理:
硬件电路图:
程序设计:
主程序:main.c
1 #include <reg52.h> 2 #include <LCD1602.c> 3 #include <DS1302.c> 4 #include <bluetooth.c> 5 void serial_initial() 6 { 7 EA = 1; //开总中断 8 ES = 1; //开串口中断 9 TMOD = 0x20; //定时器1,方式2,8位自动重装,作波特率发生器 10 TH1 = 0xfa; //波特率9600 11 TL1 = 0xfa; 12 TR1 = 1; 13 SCON = 0x50; //串口工作方式1,允许接收 14 PCON = 0x80; //SMOD=1,bps倍增9600 15 } 16 void clock_initial() 17 { 18 lcd_initial(); //1602初始化 19 serial_initial(); //中断初始化 20 Set_DS1302_Time(0x80); //先写入寄存器起始地址设置时钟日历初值 21 dis_string(0x80,"Date:11-11-11-11"); 22 dis_string(0xc0,"Time: 11:11:11 "); 23 flag_date = 0; 24 flag_time = 0; 25 bt_flag = 0; 26 } 27 28 void main() 29 { 30 clock_initial(); 31 while(1) 32 { 33 if(flag_date == 1&&cmd_end==1) 34 date_set(); 35 if(flag_time == 1&&cmd_end==1) 36 time_set(); 37 Read_DS1302_Time(0x81); 38 dis_twonum (5, 0, TimeData[6]); //年 39 dis_twonum (8, 0, TimeData[4]); //月 40 dis_twonum (11, 0, TimeData[3]); //日 41 dis_twonum (14, 0, TimeData[5]); //星期 42 dis_twonum (6, 1, TimeData[2]); //时 43 dis_twonum (9, 1, TimeData[1]); //分 44 dis_twonum (12, 1, TimeData[0]); //秒 45 Delay_Ms(1000); //