萬年歷 Tiny RTC 12C Modules時鐘模塊
單片機源程序如下:
- #include "ds1307.h"
- void DS1307_start()
- {
- int i=0;
- SDA=1;
- SCL=1;
- i++;i++;
- SDA=0;
- i++;i++;
- }
- void DS1307_stop()
- {
- int i=0;
- SDA=0;
- SCL=1;
- i++;i++;
- SDA=1;
- i++;i++;
- }
- void DS1307_ack()
- {
- int i=0;
- SCL=1;
- while((SDA==1)&&(i<50))
- i++;
- SCL=0;
- }
- void DS1307_write(unsigned char slave_write_address,unsigned char byte_address,unsigned char wdata)
- {
- int i,j,z=0;
- unsigned char tdata1,tdata2;
- DS1307_start();
- for(i=0;i<3;i++)
- {
- if(i==0)
- {
- tdata1=slave_write_address;
- tdata2=slave_write_address;
- }
- else if(i==1)
- {
- tdata1=byte_address;
- tdata2=byte_address;
- }
- else if(i==2)
- {
- tdata1=wdata;
- tdata2=wdata;
- }
- for(j=0;j<8;j++)
- {
- SCL=0;
- z++;z++;z++;//延時
- tdata1=tdata2;
- tdata1=tdata1&0x80;
- if(tdata1==0x80)
- SDA=1;
- else
- SDA=0;
- z++;z++;z++;//延時
- SCL=1;
- z++;z++;z++;;//延時
- SCL=0;
- z++;z++;z++;;//延時
- tdata2=tdata2<<1;
- }
- SCL=1;
- while(z<25)
- z++;
- SDA=1;
- while(z<35)
- z++;
- DS1307_ack();
- }
- DS1307_stop();
- }
- uchar DS1307_read(unsigned char slave_write_address,unsigned char byte_address,unsigned char slave_read_address)//讀一個數據
- {
- uchar tdata1,tdata2,i,j,x,rdata,z=0;
- DS1307_start();//開始
- for(i=0;i<3;i++)//
- {
- if(i==0)
- {
- tdata1=slave_write_address;//送 器件寫地址
- tdata2=slave_write_address;
- }
- else if(i==1)
- {
- tdata1=byte_address;//送 字節地址
- tdata2=byte_address;
- }
- else if(i==2)
- {
- DS1307_start();//開始
- tdata1=slave_read_address;//送 器件讀地址
- tdata2=slave_read_address;
- }
- for(j=0;j<8;j++)//
- {
- SCL=0;
- z++;z++;z++;//延時
- tdata1=tdata2;
- tdata1=tdata1&0x80;
- if(tdata1==0x80)
- SDA=1;
- else
- SDA=0;
- z++;z++;z++;
- SCL=1;
- z++;z++;z++;
- SCL=0;
- z++;z++;z++;;
- tdata2=tdata2<<1;
- }
- SCL=1;
- while(z<25)
- z++;
- SDA=1;
- while(z<32)
- z++;
- DS1307_ack();
- }
- SDA=1;
- z++;z++;z++;
- SCL=0;
- z++;z++;z++;//延時
- for(x=0;x<8;x++)
- {
- rdata=rdata<<1;//向左移入1位
- SCL=1;
- z++;z++;z++;;//延時
- if(SDA==1)//判斷 數據線是否是高電平
- rdata|=0x01;//把讀到的數據 或 0X01
- SCL=0;
- }
- DS1307_ack();//應答
- DS1307_stop();//停止
- return rdata;//返回讀到的數據
- }
- void DS1307_init()
- {
- DS1307_write(0xd0,0x00,0x00);//miao 00
- DS1307_write(0xd0,0x01,0x38);//fen 00
- DS1307_write(0xd0,0x02,0x11);//shi 11:38:00
- DS1307_write(0xd0,0x03,0x06);//xingqi 6
- DS1307_write(0xd0,0x04,0x12);//ri 12
- DS1307_write(0xd0,0x05,0x10);//yue
- DS1307_write(0xd0,0x06,0x19);//nian 2019-10-12_XY6
- }
復制代碼
所有程序51hei提供下載:
萬年歷.rar
(57.72 KB, 下載次數: 41)
2019-10-24 15:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|