📄 1302.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit T_CLK = P1^0;
sbit T_IO= P1^2;
sbit T_RST = P1^1;
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
if(ACC&0x01)
T_IO=1;
else
T_IO=0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
if(T_IO==1)
ACC|=0x80;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock+=1;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
void Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
void display(uchar *a)
{uchar i,j=0;
uchar ledvalue[10]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09};
uchar temp;
uchar atime[14] ;
for(i=0;i<7;i++)
{atime[j]=a[i]%16;
j+=1;
atime[j]=a[i]/16;
j+=1;
}
SCON=0x00;
ES=0;
for(i=0;i<6;i++)
{ if(i==2)
{SBUF=0x7f;
while(!TI);
TI=0;
}
if(i==4)
{ SBUF=0x7f;
while(!TI);
TI=0;}
temp=ledvalue[atime[i]];
SBUF=temp;
while(!TI);
TI=0;
}
}
void main(void)
{uchar ptime[7]={0x23,0x36,0x10,0x31,0x01,0x06,0x07}; //设置的秒,分,时,日,月,星期,年
uchar ad[7];
Set1302(ptime);
while(1)
{
Get1302(ad);
display(ad);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -