SPI驅(qū)動與DS1302_第1頁
SPI驅(qū)動與DS1302_第2頁
SPI驅(qū)動與DS1302_第3頁
SPI驅(qū)動與DS1302_第4頁
SPI驅(qū)動與DS1302_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、-作者xxxx-日期xxxxSPI驅(qū)動與DS1302【精品文檔】SPI驅(qū)動與DS1302#includeds1302.huchar code READ_RTC_ADDR7 = 0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d; uchar code WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c;/-DS1302時鐘初始化2016年1月1日星期二00點00分00秒。-/-存儲順序是秒分時日月周年,存儲格式是用BCD碼-/uchar TIME7 = 0, 0, 0x00, 0x01, 0x01,

2、 0x02, 0x16;void Ds1302Write(uchar addr, uchar dat)uchar n;RST = 0;_nop_();SCLK = 0;/SCLK置低電平。_nop_();RST = 1; /RST(CE)置高電平。_nop_();for (n=0; n= 1;SCLK = 1;/數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)_nop_();SCLK = 0;_nop_();for (n=0; n= 1;SCLK = 1;/數(shù)據(jù)在上升沿時,讀取數(shù)據(jù)_nop_();SCLK = 0;_nop_(); RST = 0;/傳送數(shù)據(jù)結(jié)束_nop_();uchar Ds1302Re

3、ad(uchar addr)uchar n,dat,dat1;RST = 0;_nop_();SCLK = 0;/將SCLK置低電平。_nop_();RST = 1;/將RST(CE)置高電平。_nop_();for(n=0; n= 1;SCLK = 1;/數(shù)據(jù)在上升沿時,讀取數(shù)據(jù)_nop_();SCLK = 0;/下降沿時,放置數(shù)據(jù)_nop_();_nop_();for(n=0; n1) | (dat17);/把dat1的最高位與dat 相或 即保留dat1 的最高位 SCLK = 1;/把dat1的數(shù)據(jù)付給dat _nop_();SCLK = 0;/DS1302下降沿時,放置數(shù)據(jù)_nop_

4、();RST = 0;_nop_();/以下為DS1302復(fù)位的穩(wěn)定時間,必須的。SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;void Ds1302Init()uchar n;Ds1302Write(0x8E,0X00); /地址+數(shù)據(jù) /禁止寫保護,就是關(guān)閉寫保護功能for (n=0; n7; n+) /寫入7個字節(jié)的時鐘信號:分秒時日月周年Ds1302Write(WRITE_RTC_ADDRn,TIMEn);Ds1302Write(0x8E,0x80); void Ds1302ReadTime()uchar n

5、;for (n=0; n7; n+ )/讀取7個字節(jié)的時鐘信號:分秒時日月周年TIMEn = Ds1302Read(READ_RTC_ADDRn);#ifndef _DS1302_H_#define _DS1302_H_#include#include#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/-定義ds1302使用的IO口-/sbit DSIO=P34;sbit RST=P35;sbit SCLK=P36;/-定義全局函數(shù)-/void Ds1302Writ

6、e(uchar addr, uchar dat);uchar Ds1302Read(uchar addr);void Ds1302Init();void Ds1302ReadTime();/-加入全局變量-/extern uchar TIME7;#endif#includelcd.hvoid Lcd1602_Delay1ms(uint c) /延時 uchar a,b;for (; c0; c-) for (b=199;b0;b-) for(a=1;a0;a-); #ifndef LCD1602_4PINS /當(dāng)沒有定義這個LCD1602_4PINS時void LcdWriteCom(ucha

7、r com) /寫入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /選擇發(fā)送命令LCD1602_RW = 0; /選擇寫入LCD1602_DATAPINS = com; /放入命令Lcd1602_Delay1ms(1); /等待數(shù)據(jù)穩(wěn)定LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5); /保持時間LCD1602_E = 0;#else void LcdWriteCom(uchar com) /寫入命令LCD1602_E = 0; /使能清零LCD1602_RS = 0; /選擇寫入命令LCD1602_RW = 0; /選擇寫入LCD160

8、2_DATAPINS = com;/由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;/Lcd1602_Delay1ms(1);LCD1602_DATAPINS = com 4; /發(fā)送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif#ifndef LCD1602_4PINS void LcdWriteData(uchar d

9、at)/寫入數(shù)據(jù)LCD1602_E = 0;/使能清零LCD1602_RS = 1;/選擇輸入數(shù)據(jù)LCD1602_RW = 0;/選擇寫入LCD1602_DATAPINS = dat; /寫入數(shù)據(jù)Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5); /保持時間LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)/寫入數(shù)據(jù)LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat; /由于4位的接線是接到P0

10、口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat 4; /寫入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif#ifndefLCD1602_4PINSvoid LcdInit() /LCD初始化子程序 LcdWriteCom(0x38); /開顯示LcdWriteCom(0x0c); /開顯示不顯示光標(biāo)L

11、cdWriteCom(0x06); /寫一個指針加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /設(shè)置數(shù)據(jù)指針起點#elsevoid LcdInit() /LCD初始化子程序LcdWriteCom(0x32); /將8位總線轉(zhuǎn)為4位總線LcdWriteCom(0x28); /在四位線下的初始化LcdWriteCom(0x0c); /開顯示不顯示光標(biāo)LcdWriteCom(0x06); /寫一個指針加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /設(shè)置數(shù)據(jù)指針起點#endif#ifndef _LCD_H_#define

12、_LCD_H_#define LCD1602_4PINS包含頭文件#include/-重定義關(guān)鍵詞-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endifPIN口定義#define LCD1602_DATAPINS P0sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;函數(shù)聲明/*在51單片機12MHZ時鐘下的延時函數(shù)*/void Lcd1602_Delay1ms(uint c); /誤差 0us/*

13、LCD1602寫入8位命令子函數(shù)*/void LcdWriteCom(uchar com);/*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/void LcdWriteData(uchar dat);/*LCD1602初始化子程序*/void LcdInit(); #endif#include#includelcd.h#includeds1302.hvoid LcdDisplay(); /液晶初始化函數(shù)void main()Ds1302Init(); /時鐘計數(shù)初始化LcdInit(); /液晶初始化while(1)Ds1302ReadTime();LcdDisplay();void LcdDispla

14、y()LcdWriteCom(0x80+0X40);LcdWriteData(0+TIME2/16);/時LcdWriteData(0+(TIME2&0x0f); LcdWriteData(-);LcdWriteData(0+TIME1/16);/分LcdWriteData(0+(TIME1&0x0f);LcdWriteData(-);LcdWriteData(0+TIME0/16);/秒LcdWriteData(0+(TIME0&0x0f);LcdWriteCom(0x80);LcdWriteData(2);LcdWriteData(0);LcdWriteData(0+TIME6/16);/年LcdWr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論