Microchip PIC18F4550 實時時鐘電路程式,程式是利用 I2C 總線,並設定 DS1307 內的寄存器,實時時鐘電路供電後,電路便會開始計時,並將時間放在時間寄存器,程式會讀取時間寄存器內的時間數據,然後在 LC1602 顯示屏顯示時間。
▲ 18F4550 + DS1307 實時時鐘程式流程圖 |
void main (void) { char LCD_name[]="BWS DS1307 v1.0"; ADCON0 = 0x00; // Disable the AD converter ADCON1 = 0x0F; // Set all ports to digital TRISA = 0b00000000; // Setup PORTB as output for LED's // Initialise LCD LcdOpen(); // See lcd.c OpenXLCD(FOUR_BIT&LINES_5X7); // Init the LCD Display BusyXLCD(); stdout = _H_USER; LcdSetLine1(); // Put cursor on start of line 1 putsXLCD(LCD_name); // Display Title wait_key(); LcdClear(); InitI2C(); DS1307_init(); DS1307_settime(hrs,min,sec); DS1307_setdate(year10,month,day,dayofweek); DS1307_setsqwe(sqwe); while(1){ LED0=1; DS1307_readstart(); sec=DS1307_readsecond(); min=DS1307_readminute(); hrs=DS1307_readhour(); dayofweek=DS1307_readdayodweek(); day=DS1307_readday(); month=DS1307_readmonth(); year10=DS1307_readyear(); DS1307_readstop(); year=year10+2000; LcdSetLine1(); printf("20%02i/%02i/%02i ", year10, month, day); LcdSetLine2(); // Put cursor on start of line 2 //printf("Time:%02i:%02i:%02i-%01i", hrs, min, sec, key); printf("%02i:%02i:%02i %01i ", hrs, min, sec, dayofweek); LED0=0; delay(); } // END While } // END main.c |
▲ 18F4550 + DS1307 實時時鐘運行開始 |
▲ 18F4550 + DS1307 實時時鐘運行中! |
問題:當 DS1307 實時時鐘電路,再插入 SD 記憶卡模塊,程式便不能運行,但單獨時,實時時鐘是可以運作。主要是兩個電阻 (R12,R13) 再加上SD 記憶卡模塊上的電阻 (R7, R10),使到電壓偏低在 SCL 訊號上,不能夠設定 DS1307 實時時鐘,變成程式不能啟到 DS1307,所以要再設計 SD 記憶卡模組電路。
▲ DS1307實時時鐘加入SD 記憶卡模塊 |
▲ DS1307實時時鐘 SCK 波型 |
▲ DS1307實時時鐘加入SD 記憶卡模塊SCK 輸出 (2V) |
氣溫:28.5 度 @ 22:00
相對濕度:百分之80%
天氣:多雲
相關網頁:
沒有留言:
張貼留言