冰楓論壇

標題: EM78P153,DS1302 [打印本頁]

作者: 洪嵐峰    時間: 2023-4-11 06:19
標題: EM78P153,DS1302

這兩種元件可以結合在一起用來製作帶有時鐘功能的電子產品,例如計時器、時鐘、定時開關等。

以下是製作基於EM78P153和DS1302的時鐘模組所需的零件

連接腳位和程式碼:

所需零件:

EM78P153單片機
DS1302實時時鐘模組
32.768kHz的晶體振盪器
3V電池
LCD顯示器
電容和電阻等其他零件
連接腳位:
EM78P153與DS1302可以通過SPI介面進行通訊,具體的連接腳位如下:

EM78P153的P1.5(SCK)與DS1302的SCLK連接
EM78P153的P1.6(MISO)與DS1302的IO連接
EM78P153的P1.7(MOSI)與DS1302的RST連接
此外,還需要連接32.768kHz晶體振盪器的兩個腳位到DS1302上。

以下是EM78P153和DS1302搭配製作時鐘模組的範例程式碼:


#include <REG_EM78P153.h>
#include <DS1302.h>

#define DS1302_RST P0.0 // DS1302 RST腳位
#define DS1302_DAT P0.1 // DS1302 DAT腳位
#define DS1302_CLK P0.2 // DS1302 CLK腳位

#define LCD_DATA P2    // LCD資料腳位
#define LCD_RS P1.0     // LCD RS腳位
#define LCD_RW P1.1     // LCD RW腳位
#define LCD_EN P1.2     // LCD EN腳位

void main()
{
    // 初始化DS1302時鐘模組
    ds1302_init(DS1302_RST, DS1302_DAT, DS1302_CLK);
    ds1302_set_time(0, 0, 12, 7, 10, 4, 2023); // 設定初始時間

    // 初始化LCD顯示器
    lcd_init(LCD_DATA, LCD_RS, LCD_RW, LCD_EN);

    while(1)
    {
        // 讀取DS1302時鐘模組時間
        int hour, min, sec, day, month, dow, year;
        ds1302_get_time(&hour, &min, &sec, &day, &month, &dow, &year);

        // 顯示時間到LCD上
        lcd_clear();
        lcd_print("Time:");
        lcd_goto(0x40);
        lcd_print_num(hour, 2);
        lcd_print(":");
        lcd_print_num(min, 2);
        lcd_print(":");
        lcd_print_num(sec, 2);

        // 延遲1秒
        delay_ms(1000);
    }
}
這段程式碼中,首先定義了DS1302的RST、DAT、CLK腳位以及LCD的資料、RS、RW、EN腳位,接著在主函式中初始化DS1302時鐘模組和LCD顯示器。

接著進入無窮迴圈,不斷讀取DS1302的時間,然後將時間顯示到LCD上,最後延遲1秒後再次讀取時間,重複執行此動作。




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓