DS1302实现可调时钟
本代码以DS1302、定时器、独立按键、LCD1602实现了可调时钟。
原理图上的DS1302
按键在上一讲讲过了
LCD1602的代码以后再写
下面展示一些 内联代码片
。
main.c
#include<STC15F2K60S2.H>
#include "DS1302.h"
#include "LCD1602.h"
#include "Key.h"
#include "Timer0.h"
//分别是键值 模式 时间类型设置选择 数据闪烁指示
unsigned char KeyNumber,Mode,TimeSetSelect,TimeSetFlag;
/**
* @brief 时间显示
* @param 无
* @retval 无
*/
void TimeShow(void)
{
//读取时间 把DS1302中的数据读取到DS1302_Time[]中 一直读取 一直更新
DS1302_ReadTime();
//把年月日时分秒显示到LCD1602上
LCD_ShowNum(1,1,DS1302_Time[0],2);
LCD_ShowNum(1,4,DS1302_Time[1],2);
LCD_ShowNum(1,7,DS1302_Time[2],2);
LCD_ShowNum(2,1,DS1302_Time[3],2);
LCD_ShowNum(2,4,DS1302_Time[4],2);
LCD_ShowNum(2,7,DS1302_Time[5],2);
}
/**
* @brief 时间设置
* @param 无
* @retval 无
*/
void TimeSet()
{
//如果键值为2 时间设置选择加一 最多到5
if(KeyNumber==2)
{
TimeSetSelect++;
TimeSetSelect%=6;
}
//如果键值为3 时间设置选择对应的数据加一 如果溢出 专门设置下一个值
if(KeyNumber==3)
{
DS1302_Time[TimeSetSelect]++;
if(DS1302_Time[0]>99){
DS1302_Time[0]=0;}
if(DS1302_Time[1]>12){
DS1302_Time[1]=1;}
if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||DS1302_Time[1]==7||
DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12)
{
if(DS1302_Time[2]>31){
DS1302_Time[2]=1;}
}
else if(DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9||DS1302_Time[1]==11)
{
if(DS1302_Time[2]>30){
DS1302_Time[2]=1;}
}
else if(DS1302_Time[1]==2)
{
if((DS1302_Time[0]%4==0)&&(DS1302_Time[0]%100!=0))
{
if(DS1302_Time[2]>29){
DS1302_Time[2]=1;}
}
else
{
if(DS1302_Time