隴西學(xué)做網(wǎng)站湖北搜索引擎優(yōu)化
目錄
1.管腳
2.時(shí)序&官方提供的讀寫函數(shù)
3.如何使用讀寫函數(shù)
4.如何在數(shù)碼管中顯示在DS1302中讀取出的數(shù)據(jù)?
1.管腳
2.時(shí)序&官方提供的讀寫函數(shù)
/* # DS1302代碼片段說明1. 本文件夾中提供的驅(qū)動(dòng)代碼供參賽選手完成程序設(shè)計(jì)參考。2. 參賽選手可以自行編寫相關(guān)代碼或以該代碼為基礎(chǔ),根據(jù)所選單片機(jī)類型、運(yùn)行速度和試題中對(duì)單片機(jī)時(shí)鐘頻率的要求,進(jìn)行代碼調(diào)試和修改。
*/ //
void Write_Ds1302(unsigned char temp)
{unsigned char i;for (i=0;i<8;i++) { SCK = 0;SDA = temp&0x01;temp>>=1; SCK=1;}
} //
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_(); Write_Ds1302(address); Write_Ds1302(dat); RST=0;
}//
unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302(address);for (i=0;i<8;i++) { SCK=0;temp>>=1; if(SDA)temp|=0x80; SCK=1;} RST=0; _nop_();SCK=0; _nop_();SCK=1; _nop_();SDA=0; _nop_();SDA=1; _nop_();return (temp);
}
3.如何使用讀寫函數(shù)
以時(shí)分秒為例
在寫中
void Set_Rtc(unsigned char* ucRtc)
{Write_Ds1302_Byte(0x8e,0x00);Write_Ds1302_Byte(0x84,ucRtc[0]);Write_Ds1302_Byte(0x82,ucRtc[1]);Write_Ds1302_Byte(0x80,ucRtc[2]);Write_Ds1302_Byte(0x8e,0x80);
}void Read_Rtc(unsigned char)
{unsigned char i;for(i=0;i<3;i++)ucRtc[i] = Read_Ds1302_Byte(0x85-2*i);
}
記得加入DS1302的驅(qū)動(dòng)中聲明函數(shù),并在變量聲明中定義數(shù)組
unsigned char ucRtc[3] = {0x23,0x59,0x55}? //上電顯示默認(rèn)時(shí)間? ?23 59 55
需要在初始化區(qū)域中調(diào)用Set_Rtc();函數(shù),參數(shù)寫ucRtc
在信息讀取區(qū)域中調(diào)用Read_Rtc();函數(shù),參數(shù)寫ucRtc
4.如何在數(shù)碼管中顯示在DS1302中讀取出的數(shù)據(jù)?
因?yàn)樵贒S1302中使用的是BCD碼,需要進(jìn)行處理
需要對(duì)十位和個(gè)位進(jìn)行相除和取余,11則是橫杠的顯示 在共陽極數(shù)碼管中為
1011 1111,0xbf,在數(shù)碼管數(shù)組中放入第11位
仿真顯示效果
在DS1302中均是先寫地址,再寫數(shù)據(jù),先打開保護(hù)再對(duì)需要操作的RTC進(jìn)行操作然后再關(guān)閉保護(hù)保證數(shù)據(jù)的穩(wěn)定性(保護(hù)只有寫的時(shí)候需要)?