Hiện tôi đang làm một cái real time clock sử dụng con DS1307. Tôi đang gặp khó khăn khi xử lý dữ liệu lấy ra từ IC này. Không biết sau khi đã lấy dữ liệu ra rồi làm thế nào để gửi nó ra LCD đúng được? Tôi viết bằng mikroC. Tôi thấy mọi người bảo viết bằng assembly thì chỉ việc cộng 30h vào các thanh ghi khi gửi ra LCD là nó hiện ra số . Nhưng tôi viết bằng mikroC nên không biết là việc chuyển đổi BCD này như thế nào? Dưới đây là đoạn code tôi viêt:
void READ_RTC() {
I2C_Start();
I2C_Wr(0xD1);
*second = I2C_Rd(0x00);
*minute = I2C_Rd(0x01);
*hour = I2C_Rd(0x02);
*day = I2C_Rd(0x03);
*date = I2C_Rd(0x04);
*month = I2C_Rd(0x05);
*year = I2C_Rd(0x06);
I2C_Stop();
}
/* XU LY DU LIEU RTC */
void TRANSFORM_RTC() {
switch (*day) {
case 01: day_txt = "SUN";
case 02: day_txt = "MON";
case 03: day_txt = "TUE";
case 04: day_txt = "WED";
case 05: day_txt = "THU";
case 06: day_txt = "FRI";
default: day_txt = "SAT";
}
....
Mong mọi người chỉ giáo.
Thanks!
void READ_RTC() {
I2C_Start();
I2C_Wr(0xD1);
*second = I2C_Rd(0x00);
*minute = I2C_Rd(0x01);
*hour = I2C_Rd(0x02);
*day = I2C_Rd(0x03);
*date = I2C_Rd(0x04);
*month = I2C_Rd(0x05);
*year = I2C_Rd(0x06);
I2C_Stop();
}
/* XU LY DU LIEU RTC */
void TRANSFORM_RTC() {
switch (*day) {
case 01: day_txt = "SUN";
case 02: day_txt = "MON";
case 03: day_txt = "TUE";
case 04: day_txt = "WED";
case 05: day_txt = "THU";
case 06: day_txt = "FRI";
default: day_txt = "SAT";
}
....
Mong mọi người chỉ giáo.
Thanks!
Comment