求助!時鐘芯片DS1802編程問題!
提問者:mldir2013-08-18 00:00
最佳答案
我給你個1302的吧,你參考下,1302初始化和讀寫部分都沒采用循環的,還是容易明白的
#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)//延時函數
{
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
}
/*******************主函數************************************/
void main(void)
{
//if(0x80 ==read_clock(0x81))
//{
Init_1302( );//初始化DS1302寄存器
//}
while(1)
{
P0=read_clock(0x81);
}
}
回答者:4j1sale391ak2016-08-18 00:00
DS 5相關問題
-
檢查晶振,I2C驅動代碼,芯片手冊查看讀寫順序,注意12進制和24進制轉換,還有顯示部分。如果都OK還能出問題,要么是芯片壞了,要么是很初級的問題,找個會的人幫你調下吧。
提問者:q2894842852016-02-07
-
小時寄存器(85h、84h)的位7用于定義 DS1302是運行于12小時 模式還是24小時模式。當為高時,選擇12小時模式。在12小時模式時, 位5是 ,當為1時,表示 PM。在24小時模式時,位5是第二個10小時 位。
提問者:linda880882014-09-18
-
這個是晶振的問題,晶振的精度不夠。
提問者:yxvf41252015-08-19
-
BCD碼(16進制數)。參考下面的程序(取數后送1602顯示)
//向LCM中填寫 年 數據
void lcm_w_yy(void){
//if(read_clock(0x8d) != yy){
yy =
提問者:sbgauge2013-05-01
-
實際上左右的 i2c都是通的 你可以看一下電路圖就明白
提問者:qwfoy2016-02-17
-
如果確認晶振損壞,建議更換。
提問者:gujian75382013-07-02
- DS 5熱門車型
- DS 5同品牌車系
- 上市新車
- 即將上市新車