求助!時鐘芯片DS1802編程問題!
提問者:mldir2013-08-18 00:00
最佳答案
我給你個1302的吧,你參考下,1302初始化和讀寫部分都沒采用循環(huán)的,還是容易明白的
#include
sbit clock_clk = P1 ^ 7;//ds1302_clk
sbit clock_dat = P1 ^ 6;//ds1302_dat
sbit clock_rst = P1 ^ 5;//ds1302_rst
//為了編程方便定義的位變量
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
/*****************************************************************/
void Delay(int num)//延時函數(shù)
{
while(num--) ;
}
/*************************1 3 0 2 *****************************/
void clock_out(unsigned char dd)
{
ACC=dd;
clock_dat=a0; clock_clk=1; clock_clk=0;
clock_dat=a1; clock_clk=1; clock_clk=0;
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
unsigned char clock_in(void)
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC);
}
unsigned char read_clock(unsigned char ord)
{
unsigned char dd=0;
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
dd=clock_in();
clock_rst=0;
clock_clk=1;
return(dd);
}
void write_clock(unsigned char ord, unsigned char dd)
{
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
clock_out(dd);
clock_rst=0;
clock_clk=1;
}
/*--------------------時鐘的初始化---------------------------*/
void Init_1302(void)
{
write_clock(0x8e,0x00);//close_protect
write_clock(0x8c,0x05);//year
write_clock(0x8a,0x04);//week_day
write_clock(0x88,0x10);//month
write_clock(0x86,0x20);//date
write_clock(0x84,0x12);//hour
write_clock(0x82,0x34);//minute
write_clock(0x80,0x56);//second
write_clock(0x90,0xa5);//supply_power
//write_clock(0x8e,0x80);//open_protect
}
/*******************主函數(shù)************************************/
void main(void)
{
//if(0x80 ==read_clock(0x81))
//{
Init_1302( );//初始化DS1302寄存器
//}
while(1)
{
P0=read_clock(0x81);
}
}
回答者:4j1sale391ak2016-08-18 00:00
DS 5相關(guān)問題
-
這個簡單啊,DS1302不是有31字節(jié)的RAM嗎?你選擇任意一個或幾個空閑的字節(jié)單元,在初始設(shè)置時間的程序里加個判斷,如果RAM中的內(nèi)容與你預(yù)設(shè)的特定標(biāo)識內(nèi)容相同,就直接退出不要設(shè)置時間,否則才進(jìn)入設(shè)置時間程序。在設(shè)置時
提問者:pouslaugj2013-11-02
-
小時寄存器(85h、84h)的位7用于定義 DS1302是運行于12小時 模式還是24小時模式。當(dāng)為高時,選擇12小時模式。在12小時模式時, 位5是 ,當(dāng)為1時,表示 PM。在24小時模式時,位5是第二個10小時 位。
提問者:linda880882014-09-18
-
void Set_RTC(void) //設(shè)定 日歷
{
unsigned char i,*p,tmp,flag=0;
flag = Read_Ds1302(0xc1);
if(flag != 0
提問者:blissfulpuppy2013-06-09
-
BCD碼(16進(jìn)制數(shù))。參考下面的程序(取數(shù)后送1602顯示)
//向LCM中填寫 年 數(shù)據(jù)
void lcm_w_yy(void){
//if(read_clock(0x8d) != yy){
yy =
提問者:sbgauge2013-05-01
-
檢查晶振,I2C驅(qū)動代碼,芯片手冊查看讀寫順序,注意12進(jìn)制和24進(jìn)制轉(zhuǎn)換,還有顯示部分。如果都OK還能出問題,要么是芯片壞了,要么是很初級的問題,找個會的人幫你調(diào)下吧。
提問者:q2894842852016-02-07
-
實際上左右的 i2c都是通的 你可以看一下電路圖就明白
提問者:qwfoy2016-02-17
- DS 5熱門車型
- DS 5同品牌車系
- 上市新車
- 即將上市新車