?? gsm-
字號:
#ifndef DS1302_H
#define DS1302_H
#include "common.h"
//設(shè)置時間,time[0]-time[6]數(shù)據(jù)存放順序為:秒,分,時,日,月,星期,年
unsigned char times[7]={00,30,23,12,6,6,10};
sbit SCLK=P2^5;
sbit IO=P2^6;
sbit RST=P2^7;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;
/*================================================================*/
/* 向1302當前地址處寫入1字節(jié)數(shù)據(jù) */
/*================================================================*/
void write_1302_byte(unsigned char d)
{
unsigned char i;
ACC=d; //將8位數(shù)據(jù)寫入ACC
for(i=8;i>0;i--) //循環(huán)8次將ACC8位數(shù)據(jù)從低位到高位寫入1302
{
IO=ACC0; //將ACC的最低位轉(zhuǎn)送到IO口
SCLK=1; //上升沿寫入1位數(shù)據(jù)
SCLK=0;
ACC=ACC>>1; //將ACC次低位變?yōu)樽畹臀? }
}
/*=================================================================*/
/*=================================================================*/
/* 從1302的當前地址處讀出1字節(jié)數(shù)據(jù) */
/*=================================================================*/
unsigned char read_1302_byte(void)
{
unsigned char i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=IO;
SCLK=1; //時鐘下降沿讀1位數(shù)據(jù)
SCLK=0;
}
return (ACC);
}
/*=================================================================*/
/*================================================================*/
/* 將數(shù)據(jù)Data寫入1302寄存器add處 */
/*================================================================*/
void write_1302_reg(unsigned char add,unsigned char d)
{
RST= 0;
SCLK=0;
RST= 1;
write_1302_byte(add); //將1302的指針移到add處
write_1302_byte(d); //往add處寫入數(shù)據(jù)
SCLK=1;
RST=0; //停止寫數(shù)據(jù)
}
/*=================================================================*/
/*==================================================================*/
/* 讀寄存器add處的值 */
/*==================================================================*/
unsigned char read_1302_reg(unsigned char add)
{
unsigned char d;
RST=0;
SCLK=0;
RST=1;
write_1302_byte(add);
d=read_1302_byte();
SCLK=1;
RST=0;
return (d);
}
/*=================================================================*/
/*===========================================================================================*/
/* 設(shè)置時間,time[0]-time[6]數(shù)據(jù)存放順序為:秒,分,時,日,月,星期,年 */
/*===========================================================================================*/
void write_1302_time(unsigned char *time)
{
unsigned char add=0x80; //地址add初值(秒),偶數(shù)地址為只寫
unsigned char i;
unsigned char timeBCD[7]; //用以存放time數(shù)據(jù)的BCD碼值
bdata unsigned char l,h; //單位變量,分別存放時間數(shù)據(jù)(8421BCD碼)的低4位和高4位
//bdata 變量保存在ram的位尋址區(qū),范圍0-7
for(i=0;i<7;i++) //將時間數(shù)據(jù)轉(zhuǎn)為BCD碼放入timeBCD中
{
l=time[i]%10;
h=time[i]/10;
timeBCD[i]=h*16+l;
}
write_1302_reg(0x8e,0x00); //禁止寫
for(i=0;i<7;i++)
{
write_1302_reg(add,timeBCD[i]); //將時間數(shù)據(jù)寫入1302對應(yīng)的寄存器
add+=2; //地址移動,確保地址為偶數(shù)
}
write_1302_reg(0x8e,0x80); //允許寫
}
/*===========================================================================================*/
/*=================================================================================================*/
/* 讀取當前時間 */
/*=================================================================================================*/
void read_1302_time(unsigned char time[])
{
unsigned char i;
unsigned char add=0x81; //設(shè)置地址add初值(秒),奇數(shù)為只讀
bdata unsigned char l,h; //單位變量,分別存放時間數(shù)據(jù)(8421BCD碼)的低4位和高4位,用以進行十進制轉(zhuǎn)換
write_1302_reg(0x8e,0x00); //禁止寫
for(i=0;i<7;i++)
{
time[i]=read_1302_reg(add); //將時間數(shù)據(jù)(8421BCD碼)從1302對應(yīng)的寄存器中讀出
l=time[i]&0x0f; //l存放time的低4位,即個位
h=(time[i]>>4)&0x0f; //h存放time的高4位,即十位
time[i]=h*10+l; //時間數(shù)據(jù)以十進制形式放進time[i]中
add+=2; //地址移動,確保地址為奇數(shù)
}
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -