📄 ds1302_402.c
字号:
/*-----------------头文件------------*/
#include <reg52.h>
/*----------------宏定义------------*/
#define uchar unsigned char
#define uint unsigned int
sbit DS1302_SCLK=P1^5;
sbit DS1302_IO=P1^6;
sbit DS1302_RST=P1^7;
sbit beep=P3^5;
uchar data_buffer[20];
/*---------------延时程序--------------*/
void delayus(void)
{
uint i;
for(i=0;i<250;i++){;}
}
/*-----------------向DS1302写数据或地址------------*/
void write(uchar aa)
{
uint i;
for(i=8;i>0;i--)
{
if((aa&0x01)==0x01)
DS1302_IO=1;
else
DS1302_IO=0;
DS1302_SCLK=1;
DS1302_SCLK=0;
aa>>=1;
}
}
/*-----------------从DS1302读数据或地址------------*/
read(void)
{
uint i;
uchar date=0;
for(i=8;i>0;i--)
{
date>>=1;
if(DS1302_IO==1)
date|=0x80;
else
date&=0x7f;
DS1302_SCLK=1;
DS1302_SCLK=0;
}
return date;
}
/*-----------------写数据和地址------------*/
void write_1302(uchar address,uchar date)
{
DS1302_RST=0;
delayus();
DS1302_SCLK=0;
DS1302_RST=1;
write(address);
write(date);
DS1302_RST=0;
}
/*-----------------读数据和地址------------*/
read_1302(uchar address)
{
DS1302_RST=0;
delayus();
DS1302_SCLK=0;
DS1302_RST=1;
write(address);
data_buffer[0]=read();
DS1302_RST=0;
}
/*-----------------写液晶初值------------*/
void write_init()
{
write_1302(0x8e,0);
write_1302(0x8c,0x09);
write_1302(0x88,0x04);
write_1302(0x86,0x02);
write_1302(0x84,0x11);
write_1302(0x82,0x58);
write_1302(0x80,0x20);
write_1302(0x8e,0x80);
}
/*-----------------主函数------------*/
main()
{
P1=0xff;
P3=0xff;
write_init();
while(1)
{
read_1302(0x85);
data_buffer[1]=data_buffer[0];
read_1302(0x83);
data_buffer[2]=data_buffer[0];
read_1302(0x81);
data_buffer[3]=data_buffer[0];
if(data_buffer[1]==0x12)
{
beep=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -