|
不知道芯片怎么了,兩個型號都這個問題。不走時或時間秒亂跳5-85-99-83等。。。亂碼。
亂碼.jpg (118.18 KB, 下載次數: 61)
下載附件
2022-5-30 17:26 上傳
兩次重啟串口打印的信息
兩次重啟串口打印的信息.jpg (227.93 KB, 下載次數: 65)
下載附件
2022-5-30 17:26 上傳
模塊.jpg (101.46 KB, 下載次數: 61)
下載附件
2022-5-30 17:26 上傳
單片機源程序如下:
#include "DS1302.h"
u8 DS1302sec=1,DS1302min=1,DS1302hour=8;
u8 DS1302day=26,DS1302month=4,DS1302week,DS1302year=20;
/**********向1302寫某一地址和數據(指令)**************/
void Write_Byte_1302(u8 add,u8 dat)
{
u8 i;
DS1302SCL = 0;
DS1302RST = 1;
add = add & 0xfe; //將控制指令的最低位清零,數據能夠輸入
for(i=0;i<8;i++)
{
DS1302SDA = add &0X01;
DS1302SCL = 1; //上升沿輸入數據
DS1302SCL = 0;
add >>= 1;
}
for(i=0;i<8;i++)
{
DS1302SDA = dat &0X01;
DS1302SCL=1; //上升沿輸入數據
DS1302SCL=0;
dat>>=1;
}
DS1302RST = 0; //寫完數據后將rst清零,終止數傳輸
}
/*************讀取1302的數據**********/
u8 Read_Byte_1302(u8 add)
{
u8 i,dat;
DS1302SCL = 0;
DS1302RST = 1; //開啟數據傳輸
add = add |0x01; //將最低位置一,保證數據是輸出
for(i=0;i<8;i++)
{
DS1302SDA = add &0X01;
DS1302SCL=1;
DS1302SCL=0;
add >>=1;
}
for(i=0;i<8;i++)
{
dat >>=1;
if(DS1302SDA) dat = dat | 0x80;
else dat = dat & 0x7f;
DS1302SCL=1;
DS1302SCL=0;
}
DS1302RST = 0; //終止數據傳輸
dat=dat/16*10+dat%16;
return dat;
}
void Write_1302()
{
Write_Byte_1302(0x8e,0x00); //關閉寫保護
Write_Byte_1302(0x80,0x80);
Write_Byte_1302(0x80,DS1302sec/10*16+DS1302sec%10);
Write_Byte_1302(0x82,DS1302min/10*16+DS1302min%10);
Write_Byte_1302(0x84,DS1302hour/10*16+DS1302hour%10);
Write_Byte_1302(0x86,DS1302day/10*16+DS1302day%10);
Write_Byte_1302(0x88,DS1302month/10*16+DS1302month%10);
Write_Byte_1302(0x8c,DS1302year/10*16+DS1302year%10);
Write_Byte_1302(0x8e,0x80); //開啟寫保護
}
/***********************顯示周*********************/
//=====計算2000~2099年任一天星期幾
// year:00-99
// month:01-12
// day:01-31
u8 GetWeekFromDay(u8 y,u8 m,u8 d)
{
u8 value;
if(m==1||m==2)
{
m+=12;
if(y>0) y--;
else y=4;
}
value=(d+2*m+3*(m+1)/5+y+y/4)%7;
return value;
}
void Read_1302()
{
DS1302sec =Read_Byte_1302(0x80);
DS1302min =Read_Byte_1302(0x82);
DS1302hour =Read_Byte_1302(0x84);
DS1302day =Read_Byte_1302(0x86);
DS1302month =Read_Byte_1302(0x88);
DS1302year =Read_Byte_1302(0x8c);
DS1302week = GetWeekFromDay(DS1302year,DS1302month,DS1302day);
}
|
-
芯片.jpg
(802.61 KB, 下載次數: 130)
下載附件
2022-5-30 17:26 上傳
|