#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "flash.h"
#define FLASH_START_ADDR 0x0801f000 //写入的起始地址
//READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};//读取时间的命令地址,已经通过读写操作来直接实现这些地址
//WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//写时间的命令地址
my_time TIME = {0}; //显示时间的结构体
u8 smgduan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
u8 nz[2]={8,20};
u8 b=0,c=0x00,d=0x00;
u8 k1=0,k4=0,w=4,num=0;
u8 key1,key4;
u16 j,i,a;
//---DS1302时钟初始化2016年5月7日星期六12点00分00秒。------DS1302时钟初始化2016年5月7日星期六12点00分00秒。---//
u8 init_time[] = {0,0X18,0x20,0x25,0x11,0x07,0x18}; //初始化时间:秒 分 时 日 月 周 年
u8 write[]= {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写秒void display_real_time(void);
u8 setime[7];
u8 timedata[8];
u8 weixian[8]={0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08};
static void ds1302_gpio_init(void);
static void ds1302_writebyte(u8 byte_1);//写一个字节; byte是保留字,不能作为变量
static void ds1302_writedata(u8 addr,u8 data_);//给某地址写数据,data是c51内部的关键字,表示将变量定义在数据存储区,故此处用data_;
static u8 ds1302_readbyte(void);//读一个字节
static u8 ds1302_readdata(u8 addr);//读取某寄存器数据;
static void DS1302_delay_us(u16 time); //简单延时1us
void changetime(void);//改变显示内容
char switchkey1(void);//判断KEY1按下的时间
char switchkey4(void);//判断KEY4按下的时间
void shiftout(u8 num);//595函数
void putOut(char a,char b,char c);//595函数2
void setimeput1(char w);//日期显示
void setimeput(char w);//SETMODE 显示
void setimes(void);//设置时间函数
void clok(void); //闹钟
void nzs(u8 a);//闹钟开关
void fs(char w);
int main()
{
ds1302_gpio_init();
//USART1_Init(115200);
//DS1302_Init();
while(1)
{
//while(!GPIO_ReadInputDataBit(DS1302_PORT,KEY1));
//while(!GPIO_ReadInputDataBit(DS1302_PORT,KEY4));
key1=0;
key4=0;
d=0xff;
c=0xff;
a=FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASH
b=a&1;
key1=switchkey1();
key4=switchkey4();
display_real_time();
setimeput1(4);
if(key1>=99)
setimes();
if(key1>10&&key1<50)
changetime();
if(key4<90&&key4>=30)
clok();
if(GPIO_ReadInputDataBit(DS1302_PORT,KEY2)==0)
{delay_ms(20);
if( GPIO_ReadInputDataBit(DS1302_PORT,KEY2)==0)
b=!b;
while(!GPIO_ReadInputDataBit(DS1302_PORT,KEY2));
a=nz[0]*1000+nz[1]*10+b;
delay_ms(10);
FLASH_W(FLASH_START_ADDR,a);
}
nzs(b&1);
GPIO_WriteBit(GPIOA,LIGHT,(BitAction)(b));
}
}
void feng()
{
GPIO_WriteBit(DS1302_PORT,DEEP,(BitAction)(0));
delay_ms(100);
GPIO_WriteBit(DS1302_PORT,DEEP,(BitAction)(1));
delay_ms(20);
}
void nzs(u8 b)
{
if(b==1)
{
nz[0]=a/1000;
nz[1]=(a-(nz[0]*1000))/10;
if(setime[4]==nz[0]&&setime[5]==nz[1])
{
while(setime[4]=