提問者:sbgauge2013-05-01 00:00
給個轉(zhuǎn)化的方法來把 謝謝了 我要詳細,再謝謝了
BCD碼(16進制數(shù))。參考下面的程序(取數(shù)后送1602顯示) //向LCM中填寫 年 數(shù)據(jù) void lcm_w_yy(void){ //if(read_clock(0x8d) != yy){ yy = read_clock(0x8d); lcm_w_test(0,0x83); lcm_w_word("20"); lcm_w_test(0,0x84); lcm_w_test(1,(yy/16)+0x30); lcm_w_test(1,yy%16+0x30); } //} /*****************************************************************************/ //向LCM中填寫 月 數(shù)據(jù) void lcm_w_mo(void){ //if(read_clock(0x89) != mo){ mo = read_clock(0x89); lcm_w_test(0,0x90); if(mo/16 != 0){lcm_w_test(1,(mo/16)+0x30);} //十位消隱 else{lcm_w_test(1,0x20);}//同上 lcm_w_test(1,mo%16+0x30); lcm_w_test(0,0x91); lcm_w_word("月"); } //} /*****************************************************************************/ //星期處理并送入LCM的指定區(qū)域 void lcm_w_xq(void){ unsigned char sel; //if(read_clock(0x8b) != xq){ xq = read_clock(0x8b); sel = (read_clock(0x8b))%16; //字節(jié)低4位的BCD碼放入sel lcm_w_test(0,0x97);//寫入指定區(qū)域(97H 第二行第8個字) if(sel==7) {lcm_w_word("日");} // if(sel==6) {lcm_w_word("六");} // if(sel==5) {lcm_w_word("五");} // if(sel==4) {lcm_w_word("四");} // if(sel==3) {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //此指令等于lcm_w_word("三"); 因為“三”的內(nèi)碼失效。 if(sel==2) {lcm_w_word("二");} // if(sel==1) {lcm_w_word("一");} //星期一 lcm_w_test(0,0x95); lcm_w_word("星期"); } //} /*****************************************************************************/ //向LCM中填寫 日 數(shù)據(jù) void lcm_w_dd(void){ // if(read_clock(0x87) != dd){ dd = read_clock(0x87); lcm_w_test(0,0x92); if(dd/16 != 0){lcm_w_test(1,(dd/16)+0x30);} //十位消隱 else{lcm_w_test(1,0x20);}//同上 lcm_w_test(1,dd%16+0x30); lcm_w_test(0,0x93); lcm_w_word("日 "); } //} /*****************************************************************************/ //向LCM中填寫 小時 數(shù)據(jù) void lcm_w_hh(void){ if(read_clock(0x85) != hh){ hh = read_clock(0x85); if (hh > 0x07 && hh < 0x22 && w == 0){ Beep();//整點報時音 } } lcm_w_test(0,0x88); lcm_w_test(1,(hh/16)+0x30); lcm_w_test(1,hh%16+0x30); } /*****************************************************************************/ //向LCM中填寫 分鐘 數(shù)據(jù) void lcm_w_mm(void){ if(read_clock(0x83) != mm){ mm = read_clock(0x83); } if(w == 0){ days();//節(jié)日顯示 } lcm_w_test(0,0x89); lcm_w_test(1,0x3a); //":" lcm_w_test(1,(mm/16)+0x30); lcm_w_test(1,mm%16+0x30); lcm_w_test(1,0x2e); //"." } /*****************************************************************************/ //刷新數(shù)據(jù) void updata (void){ lcm_w_mm();//刷新 分 lcm_w_hh();//刷新 小時 lcm_w_dd();//刷新 日 lcm_w_xq();//更新星期值 lcm_w_mo();//刷新 月 lcm_w_yy();//刷新 年 } /*****************************************************************************/ //向LCM中填寫 秒 數(shù)據(jù) void lcm_w_ss(void){ unsigned int i=0; unsigned char a=0,b=0,c=0; if(read_clock(0x81) != ss){ //判斷是否需要更新 ss = read_clock(0x81); //更新數(shù)據(jù) lcm_w_test(0,0x8b); //秒值在LCM上的寫入位置 lcm_w_test(1,(ss/16)+0x30); //寫十位 lcm_w_test(1,ss%16+0x30); //寫個位 lcm_w_word(" "); led_b = ~led_b; //LED閃爍 updata (); //刷新數(shù)據(jù) lcm_w_test(0,0x8d); //溫度在LCM上的寫入位置 i=ReadTemperature();//讀溫度并送顯 a=i/100; lcm_w_test(1,a+0x30); //顯示溫度十位 b=i/10-a*10; lcm_w_test(1,b+0x30); //個位 lcm_w_test(1,0x2e); //"." c=i-a*100-b*10; lcm_w_test(1,c+0x30); //小位1位 lcm_w_word("℃"); //度C } }
回答者:ddyyy6662016-05-01 00:00
這個簡單啊,DS1302不是有31字節(jié)的RAM嗎?你選擇任意一個或幾個空閑的字節(jié)單元,在初始設(shè)置時間的程序里加個判斷,如果RAM中的內(nèi)容與你預(yù)設(shè)的特定標(biāo)識內(nèi)容相同,就直接退出不要設(shè)置時間,否則才進入設(shè)置時間程序。在設(shè)置時
提問者:pouslaugj2013-11-02
實際上左右的 i2c都是通的 你可以看一下電路圖就明白
提問者:qwfoy2016-02-17
這個是晶振的問題,晶振的精度不夠。
提問者:yxvf41252015-08-19
檢查晶振,I2C驅(qū)動代碼,芯片手冊查看讀寫順序,注意12進制和24進制轉(zhuǎn)換,還有顯示部分。如果都OK還能出問題,要么是芯片壞了,要么是很初級的問題,找個會的人幫你調(diào)下吧。
提問者:q2894842852016-02-07
如果確認晶振損壞,建議更換。
提問者:gujian75382013-07-02
小時寄存器(85h、84h)的位7用于定義 DS1302是運行于12小時 模式還是24小時模式。當(dāng)為高時,選擇12小時模式。在12小時模式時, 位5是 ,當(dāng)為1時,表示 PM。在24小時模式時,位5是第二個10小時 位。
提問者:linda880882014-09-18