chào các bác,
mình đang làm RTC với chú ds1307 gặp 1 vấn đề mà suy nghĩ mãi vẫn không tỏ,mong các huynh đệ chỉ giúp,
mình đang vọc ds1307 và hiển thị lên led 7 đoạn,led 7 đoạn test ok,có điều khi mình hiển thị thời gian lên led 7 đoạn thì tất cả đều ok,giờ,phút giây hay ngày tháng năm,tuy nhiên chỉ có 1 cái lỗi thôi đó là thay vì hiển thị số 8,9 thì nó lại hiên thị số 6,7 (5 thay cho 8 và 6 thay cho 9)ví dụ thay vì 08 thì 05,thay vì 59 thì 56,mình đang nghi ngờ chỗ hàm BCD2DEC
static
u8 I2C_BCD2DEC(u8 BCD){
u8 L,H;
L = (BCD & 0x0F);
H = (BCD >> 4)*10;
return ((u8)((H+L)-1)/2);
}
vì hắn chỉ trả về toàn số lẻ (1,3,5,7....)nên mình mới dùng ct ((H+L-1)/2)??????
hay là do cái hàm nhận data từ i2c của mình ta???haizzz khó hiểu quá,
mong các bác chỉ giúp.
thanks all
mình đang làm RTC với chú ds1307 gặp 1 vấn đề mà suy nghĩ mãi vẫn không tỏ,mong các huynh đệ chỉ giúp,
mình đang vọc ds1307 và hiển thị lên led 7 đoạn,led 7 đoạn test ok,có điều khi mình hiển thị thời gian lên led 7 đoạn thì tất cả đều ok,giờ,phút giây hay ngày tháng năm,tuy nhiên chỉ có 1 cái lỗi thôi đó là thay vì hiển thị số 8,9 thì nó lại hiên thị số 6,7 (5 thay cho 8 và 6 thay cho 9)ví dụ thay vì 08 thì 05,thay vì 59 thì 56,mình đang nghi ngờ chỗ hàm BCD2DEC
static
u8 I2C_BCD2DEC(u8 BCD){
u8 L,H;
L = (BCD & 0x0F);
H = (BCD >> 4)*10;
return ((u8)((H+L)-1)/2);
}
vì hắn chỉ trả về toàn số lẻ (1,3,5,7....)nên mình mới dùng ct ((H+L-1)/2)??????
hay là do cái hàm nhận data từ i2c của mình ta???haizzz khó hiểu quá,
mong các bác chỉ giúp.
thanks all
Comment