#include"delay.h"
#include"stc8.h"
#include"ds1302.h"
sbit SCK=P1^4;//DS1302的時鐘引腳
sbit SDA=P1^5;//DS1302的數據引腳
sbit RST=P1^6;//DS1302的片選引腳
int m,h;
int readm(){return m;}
int readh(){return h;}
/****************************************************************************/
void ds1302_byte_write(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)//共8位
{
SDA=(bit)(temp&0x01);//送出一位(從最低位開始)
SCK=1;//上升沿
delay_ms(15);//延時
SCK=0;//下降沿
temp>>=1;//移位
}
}
/******************************DS1302讀字節****************************************/
unsigned char ds1302_byte_read(void )
{
unsigned char i,temp=0;
for(i=0;i<8;i++)//共8位
{
SDA=1;//數據引腳置位
temp>>=1;//移位
if(SDA)//讀數據
temp|=0x80;
SCK=1;//上升沿
delay_ms(15);//延時
SCK=0;//下降沿
}
return(temp);//返回數據
}
/***********************************************************************************/
void ds1302_write( unsigned char add,unsigned char dat )
{
RST=0;//片選置0
SCK=0;//時鐘置0
RST=1;//片選置位
ds1302_byte_write(add);//寫地址
ds1302_byte_write(dat);//寫數據
RST=0;//片選置0
}
/************************************************************************************/
unsigned char ds1302_read (unsigned char add)
{
unsigned char dat;
RST=0;//片選置0
SCK=0;//時鐘置0
RST=1;//片選置位
ds1302_byte_write(add);//寫地址
dat=ds1302_byte_read();//讀數據
RST=0;//片選置0
return(dat);//返回數據
}
/****************************************************************************************/
void read(){
static int hh,mm;
mm=ds1302_read(0x83);//讀取分鐘
m=((mm&0x70)>>4)*10+(mm&0x0f);//轉換為10進制
hh=ds1302_read(0x85);//讀取小時
h=((hh&0x70)>>4)*10+(hh&0x0f);//轉換為10進制
}
/******************************************************************************************/
void ds1302_init(void)
{
ds1302_write(0x8e,0x00);//允許寫操作
ds1302_write(0x80,0x00);//初始化秒(00)
ds1302_write(0x82,0x00);//初始化分(00)
ds1302_write(0x84,0x12);//初始化時(12)
ds1302_write(0xc0,0x07);//初始化鬧鐘小時(07)
ds1302_write(0xc2,0x00);//初始化鬧鐘分鐘(00)
ds1302_write(0xc4,0x00);//初始化鬧鐘開關(關)
//ds1302_write(0x90,0xab); //二個二極管加8K電阻充電
ds1302_write(0x8e,0x80);//寫保護
}
/***************************************************************************************/
#include "stc8.h"
#include"delay.h"
#include"lcddriver.h"
#include"ds1302.h"
void main(void)
{
init();
ds1302_init();
while(1){ delay(2000);
diplaynum2(0,readh());//00
diplaynum2(4,readm());//00
}
}
哪個地方讀錯了怎么是00 00
求救
|