C語言程式》DS1302

2021-09-30 10:01:41 字數 3389 閱讀 3354

#include

#include

#include "ds1302.h"

/* ds1302 io口定義 */

#define clk     pc0    

#define data    pc1

#define rst     pc6

#define ds1302_data_ddr_out() ddrc |= (1<#define ds1302_data_set()  portc |= (1<#define ds1302_clk_set()  portc |= (1<#define ds1302_rst_set()  portc |= (1#define cmd_second   0x80 //秒

#define cmd_minute   0x82 //分

#define cmd_hour   0x84 //時

#define cmd_day    0x86 //日

#define cmd_month   0x88 //月

#define cmd_week   0x8a //星期 date

#define cmd_year   0x8c //年

#define cmd_control   0x8e //控制(寫保護)

#define cmd_trickle_charge 0x90 //涓流充電

#define cmd_clock_burst  0xbe //連續讀取

//時鐘配置常量

#define cfg_clock   0x00 //開始時鐘控制位    second bit7

#define cfg_unclock   0x80 //停止時鐘控制位    second bit7

#define cfg_12h    0x80 //12/24小時值選擇位 hour bit7

#define cfg_24h    0x00 //12/24小時值選擇位 hour bit7

#define cfg_protect   0x80 //寫保護控制位      control bit7

#define cfg_unprotect  0x00 //寫保護控制位      control bit7

//涓流充電控制常量

#define cfg_tc_d1r2   0xa5 //high 1 diode +2k resistors 

#define cfg_tc_d2r8   0xab //low  2 diodes+8k resistors 

#define cfg_tc_disabled  0x00 //disabled(tcs<>1010 or ds=00 or rs=00)

//ram 命令

#define cmd_ram_base  0xc0 //ram0~ram30<<1 位址需左移一位

#define cmd_ram_burst  0xfe //連續讀取

#define ds1302_wp_dis       ds1302_write_data(cmd_control,cfg_unprotect)

#define ds1302_wp_en  ds1302_write_data(cmd_control,cfg_protect)

#define ds1302_ch_dis  ds1302_write_data(cmd_second,cfg_unclock)

#define ds1302_ch_en  ds1302_write_data(cmd_second,cfg_clock)

#define ds1302_24h   ds1302_write_data(cmd_hour,cfg_24h)

#define ds1302_trickle(x) ds1302_write_data(cmd_trickle_charge,x)

/* bcd換成十進位制數 */

unsigned char bcd_d(unsigned char x)

/* 十進位制轉換成bcd */

unsigned char d_bcd(unsigned char x)

/* ds1302寫一位 */

static void ds1302_write_byte(unsigned char data)

else

temp = temp >> 1;

ds1302_clk_set();

_delay_us(2); 

ds1302_clk_cle();

_delay_us(2);  } }

/* ds1302讀一位 */

static unsigned char ds1302_read_byte(void)

ds1302_clk_set();

_delay_us(2); 

ds1302_clk_cle();

_delay_us(2);  

}ds1302_data_ddr_out();

return temp; 

}/* ds1302寫一位資料 */

static void ds1302_write_data(unsigned char cmd,unsigned char data)

/* ds1302讀一位資料 */

static unsigned char ds1302_read_data(unsigned char cmd)

/* ds1302讀時間 */

void ds1302_read_time(volatile unsigned char *pbuf)

/* ds1302寫時間  */

void ds1302_write_time(volatile unsigned char *pbuf)

ds1302_ch_en;

ds1302_wp_en;

ds1302_init();

}/* 初始化ds1302 */

void ds1302_init(void)

#ifndef _ds1302_h_

#define _ds1302_h_

/* 初始化ds1302 */

void ds1302_init(void);

/* 檢測ds1302 */

unsigned char ds1302_check(void);

/* ds1302讀時間 */

void ds1302_read_time(volatile unsigned char *pbuf);

/* ds1302寫時間  */

void ds1302_write_time(volatile unsigned char *pbuf);

/* bcd換成十進位制數 */

unsigned char bcd_d(unsigned char x);

/* 十進位制轉換成bcd */

unsigned char d_bcd(unsigned char x);

#endif

藍橋杯ds1302程式小問題

寫乙個修改ds1302時間的程式時,對定義的陣列進行加減時發現,修改的資料無法寫入ds1302.程式片段 shijian dsinit 錯誤原因 1.對所存的時間資料的陣列定義為code。code 指定資料是儲存在 區,資料是在程式設計的時候跟 一起寫入 儲存器,執行過程中不能改變 2.初始化時間所...

ds1302的應用問題

define rtc ok1 操作成功 define rtc fail0 操作失敗 define second invalid40 秒值無效 define minute invalid41 分鐘值無效 define hour invalid42 小時值無效 define week invalid43...

DS1302實時時鐘晶元

ds1302 是 dallas 達拉斯 公司推出的一款涓流充電時鐘晶元,2001 年 dallas 被 maxim 美信 收購,因此我們看到的 ds1302 的資料手冊既有 dallas 的標誌,又有 maxim 的標誌,大家了解即可。ds1302 實時時鐘晶元廣泛應用於 傳真 可攜式儀器等產品領域...