//調(diào)用頭文件//#include
本文引用地址:http://m.butianyuan.cn/article/201611/321021.htm__CONFIG(0x3F32); //芯片配置字
//__CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTDIS);//芯片配置字
//__CONFIG(0x3FFD&0x3FFF&0x3FF7&0x3FBF&0x3FFB);//芯片配置字
#define uchar unsigned char
#define uint unsigned int
//聯(lián)接DS1302的端口定義
#define ds1302_rst RC2 //定義1302的RST接在PC4
#define ds1302_io RC1 //定義1302的IO接在PC3
#define ds1302_sclk RC0 //定義1302的時(shí)鐘接在PC2
#define set_ds1302_rst_ddr() TRISC2=0 //復(fù)位端置為輸出
#define set_ds1302_rst() ds1302_rst=1 //復(fù)位端置1
#define clr_ds1302_rst() ds1302_rst=0 //復(fù)位端清0
#define set_ds1302_io_ddr() TRISC1=0 //數(shù)據(jù)端置為輸出
#define set_ds1302_io() ds1302_io=1 //數(shù)據(jù)端置1
#define clr_ds1302_io() ds1302_io=0 //數(shù)據(jù)端清0
#define clr_ds1302_io_ddr() TRISC1=1 //數(shù)據(jù)端置為輸入
#define in_ds1302_io() PORTC&0X02 //數(shù)據(jù)端輸入數(shù)據(jù)
#define set_ds1302_sclk_ddr() TRISC0=0 //時(shí)鐘端置為輸出
#define set_ds1302_sclk() ds1302_sclk=1 //時(shí)鐘端置1
#define clr_ds1302_sclk() ds1302_sclk=0 //時(shí)鐘端清0
#define ds1302_sec_add 0x80 //秒數(shù)據(jù)地址
#define ds1302_min_add 0x82 //分?jǐn)?shù)據(jù)地址
#define ds1302_hr_add 0x84 //時(shí)數(shù)據(jù)地址
#define ds1302_date_add 0x86 //日數(shù)據(jù)地址
#define ds1302_month_add 0x88 //月數(shù)據(jù)地址
#define ds1302_day_add 0x8a //星期數(shù)據(jù)地址
#define ds1302_year_add 0x8c //年數(shù)據(jù)地址
#define ds1302_control_add 0x8e //控制數(shù)據(jù)地址
#define ds1302_charger_add 0x90
#define ds1302_clkburst_add 0xbe
uchar timer[8]; //時(shí)鐘數(shù)據(jù)
//共陰數(shù)碼管0-F顯示代碼
uchar Table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
//轉(zhuǎn)換后的顯示數(shù)據(jù)
uchar s[4];
//定義掃描計(jì)數(shù)器
uchar sel=0;
uchar temp_pa=0xFF;
//寫入1302數(shù)據(jù)函數(shù):
//入口:add為寫入地址碼,data為寫入數(shù)據(jù)
//返回:無
void ds1302_write(uchar add,uchar data)
{
uchar i=0;
set_ds1302_io_ddr(); //配置IO為輸出
NOP();NOP();
clr_ds1302_rst(); //清復(fù)位,停止所有操作
NOP();NOP();
clr_ds1302_sclk(); //清時(shí)鐘,準(zhǔn)備操作
NOP();NOP();
set_ds1302_rst(); //置復(fù)位,開始操作
NOP();NOP();
for(i=8;i>0;i--) //此循環(huán)寫入控制碼
{
if(add&0x01)
set_ds1302_io(); //當(dāng)前位為1,置數(shù)據(jù)位
else
clr_ds1302_io(); //當(dāng)前位為0,清數(shù)據(jù)位
NOP();NOP();
set_ds1302_sclk(); //產(chǎn)生時(shí)鐘脈沖,寫入數(shù)據(jù)
NOP();NOP();
clr_ds1302_sclk();
NOP();NOP();
add>>=1; //移位,準(zhǔn)備寫入下1位
}
for(i=8;i>0;i--) //此循環(huán)寫入數(shù)據(jù)碼
{
if(data&0x01)
set_ds1302_io();
else
clr_ds1302_io();
NOP();NOP();
set_ds1302_sclk();
NOP();NOP();
clr_ds1302_sclk();
NOP();NOP();
data>>=1;
}
clr_ds1302_rst();
NOP();NOP();
clr_ds1302_io_ddr(); //清輸出狀態(tài)
NOP();NOP();
}
//從1302中讀出數(shù)據(jù):
//入口:add為讀數(shù)據(jù)所在地址
//返回:讀出的數(shù)據(jù)data
uchar ds1302_read(uchar add)
{
uchar data=0;
uchar i=0;
add+=1; //讀標(biāo)志
set_ds1302_io_ddr(); //端口輸出
NOP();NOP();
clr_ds1302_rst(); //清復(fù)位
NOP();NOP();
clr_ds1302_sclk(); //清時(shí)鐘
NOP();NOP();
set_ds1302_rst(); //置復(fù)位
NOP();NOP();
for(i=8;i>0;i--) //此循環(huán)寫入地址碼
{
if(add&0x01)
{set_ds1302_io();}
else
{clr_ds1302_io();}
NOP();NOP();
set_ds1302_sclk();
NOP();NOP();
clr_ds1302_sclk();
NOP();NOP();
add>>=1;
}
clr_ds1302_io_ddr(); //端口輸入
NOP();NOP();
for(i=8;i>0;i--) //此循環(huán)讀出1302的數(shù)據(jù)
{
data>>=1;
if(in_ds1302_io())
{data|=0x80;}
NOP();NOP();
set_ds1302_sclk();
NOP();NOP();
clr_ds1302_sclk();
NOP();NOP();
}
clr_ds1302_rst();
NOP();NOP();
return(data);
}
評(píng)論