![]() |
1、貼上全部程序讓大家協助調試; 2、本站找類似的程序讀通后修改; 你粘圖片是讓大家按圖錄入后猜電路然后再找問題 ? |
而且這個屏幕的第二行壞掉了顯示不了任何東西 |
DS1302_WriteByte,寫入了2次command,沒有寫入data |
whwteng 發表于 2024-12-21 13:28 手邊沒有示波器 ![]() |
/***發送一個字節***/ void 1302Write(unsigned char dat) { unsigned char mask; for(mask= 0x01;mask!=0;mask <<= 1) //低位在前,逐位移出 { if((mask & dat) != 0) //首先輸出該位數據 DS1302_IO = 1; else DS1302_IO = 0; DS1302_CK = 1; //然后拉高時鐘 DS1302_CK = 0; //在拉低時鐘,完成一個位的操作 } DS1302_IO = 1; //最后確保釋放IO引腳 } /***讀取一個字節***/ unsigned char 1302Read() { unsigned char mask; unsigned char dat = 0; for(mask = 0x01;mask != 0; mask <<= 1) //低位在前,逐位讀取 { if(DS1302_IO != 0) //首先讀取此時IO引腳,并設置dat中的對應位 { dat |= mask; } DS1302_CK = 1; //然后拉高時鐘 DS1302_CK = 0; //再拉低時鐘,完成一個位的操作 } return dat; //最后返回讀到的字節數據 } 讀出1302數據DATA,LCD1602 加個‘0’ , 數碼管不用加‘0’ buf [0]=(DATA >> 4)+‘0’ ; 高 buf[1]=(DATA & 0X0F)+‘0’ ;低 |
先用示波器或者邏輯分析儀抓通信時序是否正常,再一步一步根據通信時序排查硬件和程序 |
試試把數據輸出代碼改為 if(Command & (0x01<<i)) DS1302_IO = 1; else DS1302_IO = 0; |