//main.c
#include "stm32f10x.h"
#include <1302.h>
#include <1602.h>
//#include <jianpen.h>
#include <delay.h>
__IO uint32_t TimingDelay;
__IO uint32_t ReadTime_1302;
uint8_t i;
//uint8_t table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //
uint8_t num;
uint8_t table[]="TIME : : W ";
uint8_t table1[]="DATE 2013-06-25";
uint8_t flag;
int8_t miao;
int8_t fen;
int8_t shi;
int8_t Year;
uint8_t Month,Day,Week;
GPIO_InitTypeDef init_gpioa;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
init_gpioa.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
init_gpioa.GPIO_Mode = GPIO_Mode_Out_OD;
init_gpioa.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&init_gpioa);
init_gpioa.GPIO_Pin = GPIO_Pin_All;
init_gpioa.GPIO_Mode = GPIO_Mode_Out_PP;
init_gpioa.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&init_gpioa);
init_gpioa.GPIO_Pin = GPIO_Pin_All;
init_gpioa.GPIO_Mode = GPIO_Mode_Out_PP;
init_gpioa.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&init_gpioa);
init();//1602显示初始化
for(num=0;num<17;num++)
{
write_data(table[num]);
}
write_com(0x80+0x40);
for(num=0;num<17;num++)
{
write_data(table1[num]);
}
while(1)
{
miao=Read1302(0x81); //从1302里读回秒钟的数
dislay(0x0B,miao); //送到1602上显示秒钟的读数
fen=Read1302(0x83);
dislay(8,fen);
shi=Read1302(0x85);
dislay(5,shi);
Year=Read1302(0x8d);
dislay(0x47,Year);
Month=Read1302(0x89);
dislay(0x4a,Month);
Day=Read1302(0x87);
dislay(0x4d,Day);
Week=Read1302(0x8b); //从1302里读回星期的数
write_com(0x8f); //在1602的0x8f的位置显示星期
write_data(0x30+Week); //给1602送星期要显示的数
}
//DS1302.c
#include <1302.h>
void Write1302(u8 dat) //void writeds1302_dat(u8 dat) //DS302.c
{
u8 i;
for(i=0;i<8;i++)
{
GPIOA->ODR&=0xffef; //GPIOA->ODR&=0<<4;
GPIOA->ODR&=0xfff7; //GPIOA->ODR&=0<<3; //sclk=0;
if(dat&0x01)
GPIOA->ODR|=1<<4; //io=dat&0x01;
dat=dat>>1;
GPIOA->ODR|=1<<3; //sclk=1;
}
}
/***********************/
void WriteByte1302(u8 add,u8 dat)
{
GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5; //res=0;????????????
delayms(1); //_nop_();
GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3; //sclk=0;
delayms(1); //_nop_();
GPIOA->ODR|=1<<5; //GPIOA->ODR|=1<<5; //res=1;
delayms(1); //_nop_();
Write1302(add);
Write1302(dat);
GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5; //res=0;
delayms(1); //_nop_();
}
/***************************/
u8 ReadByte1302(u8 dat)
{
u8 i,temp,dat0,dat1,dat2;
GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5; //res=0;
delayms(1); //_nop_();
GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3;//sclk=0;
delayms(1); //_nop_();
GPIOA->ODR|=1<<5; //res=1;
delayms(1); //_nop_();
for(i=0;i<8;i++)
{
GPIOA->ODR&=0xffef;//GPIOA->ODR&=0;
GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3; //sclk=0;
if(dat&0x01)
GPIOA->ODR|=1<<4; //io=dat&0x01;
dat=dat>>1;
GPIOA->ODR|=1<<3; //sclk=1;
}
for(i=0;i<8;i++)
{
temp=temp>>1;
GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3; //sclk=0;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4))
temp=temp|0x80;
GPIOA->ODR|=1<<3; //sclk=1;
}
GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5; //res=0;
delayms(1); //_nop_();
//dat0=temp;
dat1=temp/16;
dat2=temp%16;
dat0=dat1*10+dat2;
return(dat0);
u8 Read1302(u8 addr)
{
uint8_t dat;
dat=ReadByte1302(addr);
return dat;
} |