|
時(shí)鐘芯片驅(qū)動(dòng)文件ds1302.h文件下載:
DS1302.rar
(1.82 KB, 下載次數(shù): 225)
2017-1-12 02:31 上傳
點(diǎn)擊文件名下載附件
部分內(nèi)容預(yù)覽:
- /*
- 把我一直珍藏的程序全部拿出來,給大家共享,這也讓我想起來,我剛學(xué)的時(shí)候,搜集資料是那么辛苦,而且找不到完整的資料,我將把我整理的和自己制作的H文件共享出來,只要修改定義端口,便可以隨意的調(diào)用,以后我還會(huì)慢慢完善我的C資料,也希望大家給我指出程序的漏洞和缺點(diǎn),已達(dá)到相互學(xué)習(xí)目地。
- */
- #ifndef __DS1302_h__
- #define __DS1302_h__
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- //寫指令宏定義地址
- #define WRITE_SECOND 0x80//秒鐘
- #define WRITE_MINUTE 0x82//分鐘
- #define WRITE_HOUR 0x84//小時(shí)
- #define WRITE_DATE 0x86//日
- #define WRITE_MONTH 0x88//月
- #define WRITE_WEEK 0x8a//星期
- #define WRITE_YEAR 0x8c//年
- //讀指令宏定義地址
- #define READ_SECOND 0x81//秒鐘
- #define READ_MINUTE 0x83//分鐘
- #define READ_HOUR 0x85//小時(shí)
- #define READ_DATE 0x87//日
- #define READ_MONTH 0x89//月
- #define READ_WEEK 0x8b//星期
- #define READ_YEAR 0x8d//年
- //讀寫保護(hù)宏定義地址
- #define WRITE_PROTECT 0x8E//寫保護(hù)
- uchar data tab[]={"0123456789"};
- char *p;//定義一個(gè)指針處理星期字符串
- //位尋址寄存器定義
- sbit ACC_7 = ACC^7;
- //管腳定義
- sbit SCLK = P2^0; // DS1302時(shí)鐘信號(hào)7腳
- sbit DIO= P2^1; // DS1302數(shù)據(jù)信號(hào)6腳
- sbit CE = P2^2; // DS1302片選5腳
- uchar second,minute,hour;//時(shí)分秒
- uint second_1,second_0,minute_1,miunte_0,hour_1,hour_0;
- uchar week;//星期
- uchar date,month,year;//年月日
- uint date_1,date_0,month_1,month_0,year_1,year_0;
- /**************************地址、數(shù)據(jù)發(fā)送子程序*************************/
- void Write1302 ( unsigned char addr,dat )//寫子程序
- {
- unsigned char i,temp;
- CE=0; //CE引腳為低,數(shù)據(jù)傳送中止
- SCLK=0; //清零時(shí)鐘總線
- CE = 1; //CE引腳為高,邏輯控制有效
- //發(fā)送地址
- for ( i=8; i>0; i-- ) //循環(huán)8次移位
- {
- SCLK = 0;
- temp = addr;
- DIO = (bit)(temp&0x01); //每次傳輸?shù)妥止?jié)
- addr >>= 1; //右移一位
- SCLK = 1;
- }
- //發(fā)送數(shù)據(jù)
- for ( i=8; i>0; i-- )
- {
- SCLK = 0;
- temp = dat;
- DIO = (bit)(temp&0x01);
- dat >>= 1;
- SCLK = 1;
- }
- CE = 0;
- }
- /****************************數(shù)據(jù)讀取子程序********************************/
- unsigned char Read1302 ( unsigned char addr )//讀子程序
- {
- unsigned char i,temp,dat1,dat2;
- CE=0;
- SCLK=0;
- CE = 1;
- //發(fā)送地址
- for ( i=8; i>0; i-- ) //循環(huán)8次移位
- {
- SCLK = 0;
- temp = addr;
- DIO = (bit)(temp&0x01); //每次傳輸?shù)妥止?jié)
- addr >>= 1; //右移一位
- SCLK = 1;
- }
- //讀取數(shù)據(jù)
- for ( i=8; i>0; i-- )
- {
- ACC_7=DIO;
- SCLK = 1;
- ACC>>=1;
- SCLK = 0;
- }
- CE=0;
- dat1=ACC;
- dat2=dat1/16; //數(shù)據(jù)進(jìn)制轉(zhuǎn)換
- dat1=dat1%16; //十六進(jìn)制轉(zhuǎn)十進(jìn)制
- dat1=dat1+dat2*10;
- return (dat1);
- }
- /*******************************初始化DS1302***********************************/
- void Initial(void)//上電初始化化模塊2010年12月26號(hào)22點(diǎn)10分00秒星期日
- {
- Write1302 (WRITE_PROTECT,0X00); //禁止寫保護(hù)
- Write1302 (WRITE_SECOND,0x30); //秒位初始化
- Write1302 (WRITE_MINUTE,0x59); //分鐘初始化
- Write1302 (WRITE_HOUR,0x23); //小時(shí)初始化,默認(rèn)24小時(shí)制
- Write1302 (WRITE_DATE,0x26); //日期初始化
- Write1302 (WRITE_MONTH,0x12); //月初始化
- Write1302 (WRITE_WEEK,0x07); //星期初始化,01-07
- Write1302 (WRITE_YEAR,0x10); //年初始化00-99
- Write1302 (WRITE_PROTECT,0x80); //允許寫保護(hù)
- }
- /*******************************校時(shí)初始化*************************************/
- /*void correct()//校時(shí)模塊
- {
- Write1302 (WRITE_PROTECT,0X00); //禁止寫保護(hù)
- Write1302 (WRITE_SECOND,0x00); //秒位初始化
- Write1302 (WRITE_MINUTE,0x30); //分鐘初始化
- Write1302 (WRITE_HOUR,0x21); //小時(shí)初始化,默認(rèn)24小時(shí)制
- Write1302 (WRITE_DATE,0x26); //日期初始化
- Write1302 (WRITE_MONTH,0x12); //月初始化
- Write1302 (WRITE_WEEK,0x07); //星期初始化,01-07
- Write1302 (WRITE_YEAR,0x10); //年初始化00-99
- Write1302 (WRITE_PROTECT,0x80); //允許寫保護(hù)
- }
- /*******************************星期轉(zhuǎn)化程序***********************************/
- void week_c()//星期轉(zhuǎn)化
- {
- char *pp;//定義一個(gè)局部指針
- switch(week)
- {
- case 1:pp="Mon 1";break;
- case 2:pp="Tue 2";break;
- case 3:pp="Wed 3";break;
- case 4:pp="Tur 4";break;
- case 5:pp="Fri 5";break;
- case 6:pp="Sat 6";break;
- case 7:pp="Sun 7";break;
- default:pp="error";break;
- }
- p=pp;//函數(shù)地址賦值
- }
- /*******************************數(shù)據(jù)刷新DS1302*********************************/
- void freshtime()//讀取時(shí)間
- {
- second=Read1302 (READ_SECOND);//讀取十進(jìn)制數(shù)
- minute=Read1302 (READ_MINUTE);
- hour=Read1302 (READ_HOUR);
- date=Read1302 (READ_DATE);
- month=Read1302 (READ_MONTH);
- week=Read1302 (READ_WEEK);
- year=Read1302 (READ_YEAR);
- second_1=second/10;//高位賦值
- second_0=second-second_1*10;//低位賦值
- minute_1=minute/10;
- miunte_0=minute-minute_1*10;
- hour_1=hour/10;
- hour_0=hour-hour_1*10;
- date_1=date/10;
- date_0=date-date_1*10;
- month_1=month/10;
- month_0=month-month_1*10;
- year_1=year/10;
- year_0=year-year_1*10;
- }
- #endif
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|