- #include "ds1302.h"
- char ds1302_data_read()
- {
- return P22;
- }
- /***************************************************
- 程序驅動
- ****************************************************/
- void DS1302_Write(unsigned char D)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- ds1302_data(D&0x01);
- ds1302_sclk(1);
- ds1302_sclk(0);
- D=D>>1;
- }
- }
- //寫地址和數據
- void WDS1302(unsigned char ucAddr, unsigned char ucDat)
- {
- ds1302_rst(0);
- ds1302_sclk(0);
- ds1302_rst(1);
- DS1302_Write(ucAddr);
- DS1302_Write(ucDat);
- ds1302_sclk(1);
- ds1302_sclk(0);
- ds1302_data(1);
- }
- //讀一串數據
- unsigned char DS1302_Read()
- {
- unsigned char TempDat=0,i;
- for(i=0;i<8;i++)
- {
- TempDat>>=1;
- if(ds1302_data_read()) TempDat=TempDat|0x80;
- ds1302_sclk(1);
- ds1302_sclk(0);
- }
- return TempDat;
- }
- //寫地址然后讀數據
- unsigned char read1302(unsigned char ucAddr)
- {
- unsigned char ucDat;
- ds1302_rst(0);
- ds1302_sclk(0);
- ds1302_rst(1);
- DS1302_Write(ucAddr);
- ucDat=DS1302_Read();
- ds1302_sclk(1);
- ds1302_rst(0);
- ds1302_data(1);
- return ucDat;
- }
- /***************************************************
- ds1302程序初始化
- ****************************************************/
- void w_ram()
- {
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(0xc0,0x51); //ram里面的一個數據
- WDS1302(0x8e,0x80);//開保護
- }
- unsigned char g_ram()
- {
- unsigned char g_ram_data;
- g_ram_data=read1302(0xc1);
- return g_ram_data;
- }
- void init_time()
- {
- if(g_ram()!=0x51)
- {
- w_ram();
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(0x80,0x00);//set秒
- WDS1302(0x82,0x36);//set分
- WDS1302(0x84,0x20);//set時
- WDS1302(0x8A,0x03);//set星期
- WDS1302(0x86,0x16);//set日
- WDS1302(0x88,0x03);//set月
- WDS1302(0x8C,0x22);//set年
- WDS1302(0x90,0xa5);//充電
- WDS1302(0x8e,0x80);//開保護
- }
- }
- void w_nian(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(write_nian,b);//年
- WDS1302(0x8e,0x80);//開保護
- }
- void w_yue(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(write_yue,b);//年
- WDS1302(0x8e,0x80);//開保護
- }
- void w_ri(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(write_tian,b);//年
- WDS1302(0x8e,0x80);//開保護
- }
- void w_fen(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(0x82,b);//set分
- WDS1302(0x8e,0x80);//開保護
- }
- void w_shi(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(0x84,b);//set時
- WDS1302(0x8e,0x80);//開保護
- }
- void w_miao(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(write_second,b);//setmiao
- WDS1302(0x8e,0x80);//開保護
- }
- void w_zhou(unsigned char a)
- {
- unsigned char b;
- b=a/10*16+a%10;
- WDS1302(0x8e,0x00);//關閉保護寄存器
- WDS1302(write_zhou,b);//setmiao
- WDS1302(0x8e,0x80);//開保護
- }
- unsigned char get_fen()
- {
- unsigned char a,b;
- a=read1302(read_fen);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_shi()
- {
- unsigned char a=0,b=0;
- a=read1302(read_xiaoshi);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_miao()
- {
- unsigned char a=0,b=0;
- a=read1302(read_miao);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_nian()
- {
- unsigned char a=0,b=0;
- a=read1302(read_nian);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_yue()
- {
- unsigned char a=0,b=0;
- a=read1302(read_yue);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_ri()
- {
- unsigned char a=0,b=0;
- a=read1302(read_tian);
- b=a%16+a/16*10;
- return b;
- }
- unsigned char get_zhou()
- {
- unsigned char a=0,b=0;
- a=read1302(read_zhou);
- b=a%16+a/16*10;
- return b;
- }
復制代碼 源代碼免費提供給大家,直接使用
上圖2個文件下載 c代碼(請自行移植到各單片機平臺):
DS1302.zip
(1.48 KB, 下載次數: 39)
2022-3-23 11:05 上傳
點擊文件名下載附件
|