![]() |
發布時間: 2019-6-17 15:13
正文摘要:char l_tmpdate[3]={0,9,12}; char l_tmpdisplay[8]; void Write_Ds1302( unsigned char address,unsigned char dat ) { RST=0; _nop_(); & ... |
l_tmpdate[1]=((l_tmpdate[1]+1)/16)*10 + ((l_tmpdate[1]+1)%16); //分加1 if(l_tmpdate[1]>59) l_tmpdate[1]=0; //判斷 第一行把10進制的l_tmpdate[1]+1后,轉成16進制格式數據,結果第二行中又和10進制數據比較,你確定要這么做?對于10進制的60,在你的第一行處理中將變成30+12,變成了十進制的42了,然后去和10進制的59比,結論肯定是錯的,與你想要的到59分后再加1變成0的結果是不一致的。要么改成if(l_tmpdate[1]>41),要么第一行不要做轉換處理,改成l_tmpdate[1]++; 另外:l_tmpdate[1]=((l_tmpdate[1]+1)/16)*10 + ((l_tmpdate[1]+1)%16); //分加1 這樣的處理不好,轉換成機器碼的時候,會多出許多代碼。 //加處理 l_tmpdate[1]++; if(l_tmpdate[1]>59) l_tmpdate[1]=0; //判斷 減處理: if (l_tmpdate[1]==0) l_tmpdate[1]=59; else l_tmpdate[1]--; 這是不是和你想要的是一樣的結果? 數據在寫入DS1302的時候,再轉換為16進制數據即可。之前的判斷用十進制的處理就行。 |