前兩節介紹了時鐘芯片DS1302的時間寄存器讀寫地址、單字節讀寫時序以及細流充電等,好玩的單片機——如何使用時鐘芯片DS1302(二)。這一節我們就具體在proteus中做一個電子表(DS1302的RST引腳,SCLK引腳和IO引腳最好接上拉電阻到5V),代碼用的是DS1302的單字節讀寫操作,爆發模式burst以後再講,用LCD1602液晶屏顯示,最終效果如下圖,其中第一行顯示日期年月日和星期,第二行顯示時間時分秒。因為這個程序相比之前的要複雜一些,因此下文截圖講下DS1302對應的單字節讀寫代碼,完整的程序如有需要可以留言郵箱。
先簡單的回顧下DS1302單字節讀寫操作的時序,其中單字節寫操作時序如下。首先說明一點,SCLK引腳電平拉低和RST引腳電平拉高放在另外一個函數Reset()中,在完整的單字節讀寫操作函數中會調用。
概括起來三點:RST電平需要一直拉高;SCLK上升沿時IO引腳上的某一位寫入DS1302;一個字節從低位開始依次寫入,完整的一個寫操作是先寫地址,再寫數據。
根據上圖的單字節寫時序,編寫的C代碼如下,其中Data是我們需要寫入的内容(地址或者數據)。有一點大家要注意,SCLK上電平為低時,IO引腳才能做好準備,當SCLK一拉高(也就是形成一個上升沿),IO引腳上的某一位就寫入DS1302了;寫入之後SCLK再次拉低,使得下一位能做好準備,如此反複就把一個字節的8位從低位到高位依次寫入了。
單字節讀操作時序如下圖,讀操作顧名思義就是要讀取某寄存器的數據,那麼我們首先得知道這個寄存器的地址,因此單字節讀操作其實就是先寫地址,再讀取該地址上的數據。
重點要理解“讀”這部分,首先RST高電平有效;其次SCLK下降沿時DS1302就把某寄存器的某位數據放到IO引腳上,這個時候我們隻需要在程序中把這一位賦值給定義好的變量即可。因為“讀”是SCLK下降沿有效,也就是說SCLK高電平時我們要做好準備。Data就是讀取出來的字節。
這兩個函數是最基本也是最重要的函數,完整的單字節寫操作函數就是調用兩次Write_Byte(unsigned char)即可,先寫入地址再寫入數據;而完整的單字節讀操作函數就是先調用Write_Byte(unsigned char)寫入地址,再讀取該地址上的數據賦值給聲明定義好的變量即可。
,