📄 ds1302串口显示秒.c
字号:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit CLK =P3^5;
sbit IO =P3^6;
sbit RST =P3^7;
/***********************************************************/
void delay(uint x)
{
uint i;
for(i=0;i<x;i++){
_nop_();
}
}
/******************WriteOneByteData*************************/
void WriteByte(uchar ucda)
{
uchar i;
for(i=8;i>0;i--)
{
IO=(bit)(ucda&0x01);
CLK=1;
CLK=0;
ucda>>=1;
}
}
/**************************ReadOneByteData*********************/
uchar ReadByte(void)
{
uchar i,a;
for(i=8;i>0;i--)
{
a>>=1;
if(IO)a|=0x80;
CLK=1;
CLK=0;
}
return(a);
}
/************WriteAddrFist,ThenWriteData**********************/
void write1302(uchar Addr,uchar Data)
{
RST=0;
CLK=0;
RST=1;
WriteByte(Addr);
WriteByte(Data);
CLK=1;
RST=0;
}
/**************WriteAddrFirst,ThenReadData*********************/
uchar read1302(uchar Addr)
{
uchar Data;
RST=0;
CLK=0;
RST=1;
WriteByte(Addr);
Data=ReadByte();
CLK=1;
RST=0;
return(Data);
}
////////////////ds1302初始化//////////////////
void csh1302(void)
{ CLK=0;
RST=0;
write1302(0x8e,0x00);//打开写保护
write1302(0x90,0x06);//禁止充电
/////////////////////////////////////////////////
write1302(0x80,0x00);//预置秒
write1302(0x82,0x08);//预置分
write1302(0x84,0x13);//预置时
write1302(0x86,0x21);//预置日期
write1302(0x88,0x11);//预置月
write1302(0x8a,0x02);//预置星期
write1302(0x8c,0x07);//预置年
////////////////////////////////////////////////
write1302(0x80,0x00);//启动时钟
write1302(0x8e,0x80);//关闭写保护
}
uchar sec10;
uchar sec;
main()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
csh1302(); //初始化
while(1)
{
sec=read1302(0x81);
SBUF=sec;
while(TI==0) ; //等待发送结束
TI=0; //软件清零
delay(5000); //延时
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -