#ifndef __DS1302_H__ #define __DS1302_H__ #include "msp430x14x.h" #include "delay.h" #define uchar unsigned char #define uint unsigned int
#define sclk_in P2DIR&=~BIT5 #define sclk_out P2DIR|=BIT5 #define sclk_h P2OUT|=BIT5 #define sclk_l P2OUT&=~BIT5
#define dio_in P2DIR&=~BIT6 #define dio_out P2DIR|=BIT6 #define dio_h P2OUT|=BIT6 #define dio_l P2OUT&=~BIT6
#define ce_in P2DIR&=~BIT7 #define ce_out P2DIR|=BIT7 #define ce_h P2OUT|=BIT7 #define ce_l P2OUT&=~BIT7
static uchar shi,fen,miao,nian,yue,ri,xingqi; //写命令以及地址 void write(uchar add,uchar date) { uchar temp,t; ce_out; ce_l; sclk_out; sclk_l; ce_h; temp=add; dio_out; for(t=0;t<8;t++)//写地址命令 { if((temp&0x01)==1) dio_h; else dio_l; sclk_h; delay(5); sclk_l; temp=temp>>1; } temp=date; for(t=8;t>0;t--) //写数据 { if((temp&0x01)==1) dio_h; else dio_l; sclk_h; delay(5); sclk_l; temp=temp>>1; } } uchar read(uchar add) { uchar temp,t; ce_out; sclk_out; ce_l; sclk_l; ce_h; temp=add; dio_out; for(t=0;t<8;t++) { if((temp&0x01)==1) dio_h; else dio_l; sclk_h; sclk_l; temp>>=1; } temp=0; dio_in; for(t=0;t<7;t++) { if(P2IN&BIT6) temp=temp|0x80; else temp=temp&0x7f; sclk_h; sclk_l; temp>>=1; } //传送一个字节需要16个时钟 return temp/16*10+temp%16;//将BCD码转换成10进制码 } void init_time() { write(0x8e,0x00);//写保护,相当于初始化或者缓冲 write(0x80,0x00); //写秒 write(0x82,0x50);//写分 write(0x84,0x04); //写时 write(0x86,(ri/10<<4)|(ri%10)); //写日 write(0x88,(yue/10<<4)|(yue%10));//写月 write(0x8a,(xingqi/10<<4)|(xingqi%10)); //写星期 write(0x8c,(nian/10<<4)|(nian%10));//写年 } //显示时间 void get_time() { shi=read(0x85);//读出时间 时 fen=read(0x83);//读出时间 分 miao=read(0x81);//读出时间 秒 nian=read(0x8d);//读出时间 年 yue=read(0x89);//读出时间 月 ri=read(0x87);//读出时间 日 xingqi=read(0x8b);//读出时间 星期 } #endif
|