|
有哪位用DS1302調(diào)試顯示時間成功的,可不可以幫我看一下,或者有調(diào)試成功的可以給我參考一下,我現(xiàn)做的東西急需要顯示當(dāng)前時間,調(diào)試的時候讀不出時間,非常著急,求幫助,謝謝了
/***************************1302寫入操作*********************/
void write_byte(uchar dat)
{
uchar a;
ACC=dat;
for(a=8;a>0;a--) //循環(huán)8次 寫入數(shù)據(jù)
{
IO=ACC0; //每次傳輸?shù)妥止?jié)
SCLK=1; //錯誤,先為1后為0
SCLK=0;
ACC=ACC>>1; //右移一位
}
}
uchar read_byte()//讀一個字節(jié)
{
uchar a;
for(a=8;a>0;a--)
{
ACC=ACC>>1;
ACC7=IO;
SCLK=1;
SCLK=0;
}
return(ACC);
}
/***************************1302寫入數(shù)據(jù)*****************************/
void write_1302( uchar add,uchar dat ) //先寫地址,再寫數(shù)據(jù)
{
RST=0;
SCLK=0;
RST=1; //重新工作
write_byte(add); //發(fā)送地址
write_byte(dat); //發(fā)送數(shù)據(jù)
// SCLK=1;
RST=0;
}
/***************************1302讀出數(shù)據(jù)***********************************/
uchar read_1302(uchar add) //先送地址,再讀數(shù)據(jù)
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
//SCLK=1;
RST=0;
return(temp);
}
uchar BCD_Decimal(uchar bcd)//BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制
{
uchar Decimal;
Decimal=bcd>>4;
return(Decimal=Decimal*10+(bcd&=0x0F));
}
void ds1302_init() //1302芯片初始化子函數(shù)
{
if(read_1302(0xd1)==0x55) //判斷內(nèi)存單元的內(nèi)容,是否進(jìn)行初始化
{
return;
}
else
{
write_1302(0x8e,0x00); //關(guān)閉寫保護(hù)
write_1302(0x90,0x00); //電池充電設(shè)置
write_1302(0x80,0x00); //秒
write_1302(0x82,0x54); //分
write_1302(0x84,0x20); //時
write_1302(0xd0,0x55); //寫RAM
write_1302(0x8e,0x80); //打開寫保護(hù)
}
}
void read_data(void)
{
miao = BCD_Decimal(read_1302(0x81));
fen = BCD_Decimal(read_1302(0x83));
shi = BCD_Decimal(read_1302(0x85));
write_com(0x80);
write_data(shi/10+0x30);
write_data(shi%10+0x30);
write_data(':');
write_data(fen/10+0x30);
write_data(fen%10+0x30);
write_data(':');
write_data(miao/10+0x30);
write_data(miao%10+0x30);
}
void main()
{
lcd_init();
write_com(0x01);
lcd_display();
ds1302_init();
while(1)
{
read_data();
key();
delayms(5);
}
}
|
|