上一章-藍橋杯STC基礎代碼-串口通信
時鐘芯片-DS1302
時鐘芯片在比賽的時候使用基本沒有什麼難度,利用好主辦方給的函數
void Write_Ds1302_Byte(unsigned char temp) ;
void Write_Ds1302( unsigned char address,unsigned char dat ) ;
unsigned char Read_Ds1302 ( unsigned char address );
配置過程
一般來說,我們只需要配置 時 分 秒 這三個就可以了。
寫數據
根據芯片手冊上的寄存器。
可以看到 秒 - 0x80 ,分 - 0x82 ,秒 -0x84
在寫入寄存器的時候要把數據分成 個位跟十位 ,分別寫進寄存器的低位跟高位。
注意
在寫入數據之前要關閉寫保護。
寫完之後要打開寫保護。
void Set_time(u8 hour, u8 min ,u8 sec)
{
u8 temp;
Write_Ds1302(0x8e,0);
temp = ( hour / 10 ) << 4 | hour% 10;
Write_Ds1302(0x84,temp);
temp = ( min / 10 ) << 4 | min% 10;
Write_Ds1302(0x82,temp);
temp = ( sec / 10 ) << 4 | sec% 10;
Write_Ds1302(0x80,temp);
Write_Ds1302(0x8e,0x80);
}
寄存器記不住沒關係,打開芯片手冊一查就好了。
讀數據
在程序初始化的時候我們就把我們設定的時間寫入,之後需要用到時間就讀一下就好了。
在這裏,我用三個全局變量來存儲時間。
u8 d_hour,d_min,d_sec;
然後我們回到芯片手冊的寄存器
可以看到讀數據的話
秒-0x81,分-0x83,時-0x85
然後要注意的是讀取之後還要對讀取到的數據進行處理。
跟寫數據一樣,我們讀到的數據 十位對應高四位 ,個位對應低四位。
代碼如下
u8 d_hour,d_min,d_sec;
void Read_time(void)
{
u8 temp;
temp = Read_Ds1302(0x81);
d_sec = (temp >> 4 ) *10 + (temp & 0x0f);
temp = Read_Ds1302(0x83);
d_min = (temp >> 4 ) *10 + (temp & 0x0f);
temp = Read_Ds1302(0x85);
d_hour = (temp >> 4 ) *10 + (temp & 0x0f);
}