万年历 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)
|