C51:用DS1302時鐘讀取和設置時間

因為在ds1302.c文件中包含了寫ds1302(51向ds1302寫數據)和讀ds1302(51從ds1302讀數據)的兩個函數,我們根據文件中提供的函數來寫讀取時間和設置時間的函數即可

ds1302.c文件源碼如下,需要的同學可以參考一下:

#include <reg52.h>
#include <intrins.h>
#define DecToBCD(dec) (dec/10*16)+(dec%10)
#define BCDToDec(bcd) (bcd/16*10)+(bcd%16)
sbit SCK=P1^7;		
sbit SDA=P2^3;		
sbit RST = P1^3;   										void Write_Ds1302(unsigned  char temp) 
{unsigned char i;for (i=0;i<8;i++)     	{ SCK=0;SDA=temp&0x01;temp>>=1; SCK=1;}
}   void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{RST=0;	_nop_();SCK=0;	_nop_();RST=1; 	_nop_();  Write_Ds1302(address);	Write_Ds1302(dat);		RST=0; 
}unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;RST=0;	_nop_();SCK=0;	_nop_();RST=1;	_nop_();Write_Ds1302(address);for (i=0;i<8;i++) 	{		SCK=0;temp>>=1;	if(SDA)temp|=0x80;	SCK=1;} RST=0;	_nop_();SCK=0;	_nop_();SCK=1;	_nop_();SDA=0;	_nop_();SDA=1;	_nop_();return (temp);			
}

程序解釋:

1.ds1302的寫保護操作:當WP位(寄存器的第七位)為1時,寫保護功能開啟,禁止對任何寄存器進行寫操作,防止誤改寄存器中的時間,日期或者其他數據。如果要對時鐘進行寫操作,需要將WP位設置為0,關閉寫保護功能

2.BCD碼:用4位二進制數來表示1位十進制數中的0~9的這10個數碼

十進制轉換為BCD碼宏定義:?

#define DecToBCD(dec)? ?(dec/10 *16) +(dec%10)

BCD碼轉換為十進制宏定義:?

#define BCDToDec(bcd)? ?(bcd/16* 10)+(bcd % 16)

用處:1.我們在讀取時間的時候,因為Read_DS1302_Byte()函數返回的是BCD碼,所以在讀取時需要轉換為十進制

2.同樣的,在設置時間時,我們也需要將十進制轉換為BCD碼


讀取時間的流程:

直接調用讀取ds1302的函數

ds1302讀取函數如下:

可以看到,讀到時間數據后,需要用BCDToDec宏定義轉換為十進制

unsigned char hour,minute,second;
void DS1302_process()
{second=BCDToDec(Read_Ds1302_Byte(0x81));minute=BCDToDec(Read_Ds1302_Byte(0x83));hour=BCDToDec(Read_Ds1302_Byte(0x85));
}

設置時間的流程:

1.關閉寫保護

2.寫入時鐘數據

3.打開寫保護

時鐘設置函數如下:

注意:函數需要使用的話,初始化一次就可以了,不需要一直執行。同樣將時間數據傳給Write_Ds1302_Byte()函數需要使用宏定義進行轉換,否則程序不能正常運行

void Clock_Set(unsigned char hour,	unsigned char minute,unsigned char second)
{Write_Ds1302_Byte(0x8e,0x00);  //關閉寫保護Write_Ds1302_Byte(0x80,DecToBCD(second));Write_Ds1302_Byte(0x82,DecToBCD(minute));Write_Ds1302_Byte(0x84,DecToBCD(hour));Write_Ds1302_Byte(0x8e,0x80);  //打開寫保護
}

程序示例:(如將初始時間設置為23時59分55秒)

void Clock_Set(unsigned char hour,	unsigned char minute,unsigned char second)
{Write_Ds1302_Byte(0x8e,0x00);  //關閉寫保護Write_Ds1302_Byte(0x80,DecToBCD(second));Write_Ds1302_Byte(0x82,DecToBCD(minute));Write_Ds1302_Byte(0x84,DecToBCD(hour));Write_Ds1302_Byte(0x8e,0x80);  //打開寫保護
}
int main()
{Clock_Set(23,59,55);
}

直接將函數放到main()函數即可,非常簡單。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90527.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

webrtc整體架構

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一套支持瀏覽器和移動應用進行實時音視頻通信的開源技術標準&#xff0c;其架構設計圍繞 “實時性”“低延遲”“跨平臺” 和 “安全性” 展開&#xff0c;整體可分為核心引擎層、API 層、支撐服務層三大部分&…

淺析PCIe 6.0 ATS地址轉換功能

在現代高性能計算和虛擬化系統中,地址轉換(Address Translation)是一個至關重要的機制。隨著 PCIe 設備(如 GPU、網卡、存儲控制器)直接訪問系統內存的能力增強,設備對虛擬內存的訪問需求日益增長。 為了提升性能并確保安全訪問,Address Translation Services(ATS) 應…

【前端】ikun-pptx編輯器前瞻問題二: pptx的壓縮包結構,以及xml正文樹及對應元素介紹

文章目錄PPTX文件本質&#xff1a;一個壓縮包核心文件解析1. 幻燈片內容文件 (ppt/slides/slideX.xml)2. 元素類型解析文本框元素 (p:sp)圖片元素 (p:pic)單位系統開發注意事項參考工具pptx渲染路線圖PPTX文件本質&#xff1a;一個壓縮包 PPTX文件實際上是一個遵循Open XML標準…

分布式任務調度實戰:XXL-JOB與Elastic-Job深度解析

告別傳統定時任務的局限&#xff0c;擁抱分布式調度的強大與靈活 在現代分布式系統中&#xff0c;高效可靠的任務調度已成為系統架構的核心需求。面對傳統方案&#xff08;如Timer、Quartz&#xff09;在分布式環境下的不足&#xff0c;開發者急需支持集群調度、故障轉移和可視…

Windows 11下純軟件模擬虛擬機的設備模擬與虛擬化(僅終端和網絡)

Windows 11下用GCC的C代碼實現的虛擬機需要終端輸入/輸出&#xff08;如串口或虛擬控制臺&#xff09;和網絡連接&#xff0c;但不需要完整的硬件設備&#xff08;如磁盤、顯卡、USB 等&#xff09;。在終端輸入/輸出方面&#xff0c;參考qemu的源代碼&#xff0c;但不調用qemu…

CCF-GESP 等級考試 2025年6月認證Python六級真題解析

1 單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09;第1題 下列哪一項不是面向對象編程&#xff08;OOP&#xff09;的基本特征&#xff1f;&#xff08; &#xff09;A. 繼承 (Inheritance) B. 封裝 (Encapsul…

C++中的deque

1. 什么是 Deque&#xff1f; 核心概念&#xff1a; Deque 是 “Double-Ended Queue”&#xff08;雙端隊列&#xff09;的縮寫。你可以把它想象成一個可以在兩端&#xff08;頭部和尾部&#xff09;高效地進行添加或刪除操作的線性數據結構。關鍵特性&#xff1a; 雙端操作&am…

GNU到底是什么,與Unix和Linux是什么關系

GNU&#xff08;發音為 /ɡnu?/&#xff0c;類似“革奴”&#xff09;是一個自由軟件操作系統項目&#xff0c;由理查德斯托曼&#xff08;Richard Stallman&#xff09;于1983年發起&#xff0c;目標是創建一個完全由自由軟件組成的類Unix操作系統。它的名字是一個遞歸縮寫&a…

雙指針算法介紹及使用(下)

在上一篇文章中我們已經對雙指針有了一定了解&#xff0c;接下來我們通過題目來對雙指針進行更好的理解。 1. leetcode 202. 快樂數 這道題使用的方法是快慢指針&#xff0c; 比如說一個數X&#xff0c;那么創建兩個變量X1和X2&#xff0c;然后X1每次變化兩次&#xff0c;X2變化…

Elasticsearch整合:Repository+RestClient雙模式查詢優化

Elasticsearch整合&#xff1a;RepositoryRestClient雙模式查詢優化Elasticsearch 雙模式查詢優化&#xff1a;Repository RestClient 整合指南一、架構設計&#xff1a;雙模式協同工作流二、Repository 模式&#xff1a;快速開發最佳實踐2.1 基礎配置2.2 高級特性&#xff1a…

Elasticsearch 高級查詢語法 Query DSL 實戰指南

目錄 1、DSL 概述 1.1 DSL按照查詢的結構層次劃分 1.2 DSL按照檢索功能的用途和特性劃分 1.3 示例數據準備 2、match_all ——匹配所有文檔 3、精確匹配 3.1 term——單字段精確匹配查詢 3.2 terms——多值精確匹配 3.3 range——范圍查詢 3.4 exists——是否存在查詢…

DNS 服務正反向解析與 Web 集成實戰:從配置到驗證全流程

DNS 服務正反向解析配置全流程指南 一、前言 在網絡環境中&#xff0c;DNS&#xff08;Domain Name System&#xff09;服務起著至關重要的作用&#xff0c;它負責將域名解析為 IP 地址&#xff0c;以及將 IP 地址反向解析為域名。本文將詳細介紹如何配置 DNS 服務的正反向解析…

2025.07.25【宏基因組】|PathoScope 安裝與使用指南

PathoScope 安裝與使用指南&#xff1a;微生物組數據分析利器 作為一名生物信息工程師&#xff0c;在微生物組數據分析中&#xff0c;我們常常需要高效、準確的工具來鑒定和量化樣本中的微生物組成。PathoScope 正是這樣一款強大的工具&#xff0c;它能夠幫助我們從高通量測序…

AI結對編程:分布式團隊的集體記憶外腦

AI結對編程:分布式團隊的集體記憶外腦 “當新人通過AI瞬間掌握三年積累的業務規則時,傳統‘傳幫帶’模式正式宣告過時——分布式團隊最珍貴的資產不再是代碼,而是被AI固化的集體經驗。” 一、人腦的帶寬困局 柏林新人加入新加坡支付團隊,面臨恐怖的知識迷宮: - …

棧----1.有效的括號

20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09; /** 括號特性: 左括號必定先出現,每個左括號都需要一個右括號與之匹配,后出現的左括號先匹配 解法: 依據后出現的左括號先匹配,很容易聯想到棧,即后進先出 遍歷字符串,遇到左括號就在棧中添加一個對應的右括號 遇到右括…

數據報表怎么自動填寫內容?總結了幾個方法

你有沒有遇到過這種情況&#xff1f;月底趕銷售報告&#xff0c;Excel里密密麻麻的數據要往Word里搬&#xff0c;光是復制粘貼就折騰半小時&#xff0c;好不容易搞完&#xff0c;老板突然說數據有更新…得&#xff0c;全白干&#xff01;更崩潰的是&#xff0c;這種重復勞動每個…

構造函數是否可以聲明成虛函數?

構造函數&#xff08;constructor&#xff09;不能被聲明為虛函數。? 原因解釋 構造函數的主要職責是創建并初始化對象本身&#xff0c;而虛函數機制是基于 虛表指針&#xff08;vptr&#xff09; 的&#xff0c;它只有在對象構造完成之后才會起作用。 所以&#xff1a; 在構造…

【Rust線程池】如何構建Rust線程池、Rayon線程池用法詳細解析

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

CAN總線網絡的參數協同:從一致性要求到容差邊界

CAN總線網絡的參數協同&#xff1a;從一致性要求到容差邊界 一、引言&#xff1a;CAN總線的“隱形契約”二、CAN通信的核心參數&#xff1a;不止于波特率三、參數一致性的必要性&#xff1a;為何波特率相同仍會失敗&#xff1f;四、容差范圍的科學界定&#xff1a;從理論計算到…

Activity 啟動模式

如何指定 Activity 的啟動模式&#xff1f;在 AndroidMainfest.xml 中通過給 <activity> 標簽指定 android:lauchMode 來選擇啟動模式。4種啟動模式standard&#xff08;默認&#xff09;&#xff1a;每當啟動一個 Activity&#xff0c;都會創建一個新的實例壓入返回棧。…