#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Tab_Num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit T_CLK=P3^7;
sbit T_IO =P3^6;
sbit T_RST=P3^5;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
void delay(uint k)
{
uchar m,n;
for(m=0;m<k;m++)
for(n=0;n<121;n++);
}
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; //每次都是把第一位给IO 然后再右移
T_CLK = 1;
T_CLK = 0; //只跟CLK有关
ACC = ACC >> 1;
}
}
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = T_IO; //每次都是把IO给ACC第七位 然后ACC右移
T_CLK = 1; //只跟CLK有关
T_CLK = 0;
}
return(ACC);
}
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1; //写入的时候RST一定是高电平 CLK 是上升沿
RTInputByte(ucAddr);
RTInputByte(ucDa);
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();
T_CLK = 1;
T_RST = 0;
return(ucData);
}
void Initial(void)
{
W1302 (0x8e,0X00); //禁止写保护
W1302 (0x80,0x55); //秒位初始化
delay(50);
W1302 (0x82,0x58); //分钟初始化
delay(50);
W1302 (0x84,0x15); //小时初始化
delay(50);
W1302(0x90,0xa5);
W1302 (0x8e,0x80); //允许写保护
}
void show(void)//显示和闪烁函数
{
unsigned char d, e;
unsigned int i;
for(i=0;i<1000;i++)
{
d=R1302(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;
P0 = Tab_Num[ d ];//秒十位
P1=0xfd;
delay(5);
P0 = Tab_Num[ e ];//秒各位
P1=0xfc;
delay(5);
d=R1302(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
P0=Tab_Num[ d ];//分十位
P1=0xff;
delay(5);
P0 = Tab_Num[ e ];//分各位
P1=0xfe;
delay(5);
d=R1302(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
P0 = Tab_Num[ d ];//小时十位
P1=0xf9;
delay(5);
P0 = Tab_Num[ e ];//小时各位
P1=0xf8;
delay(5);
}
}
void main()
{
Initial();
while(1)
{
show();
}
}
文章评论(0条评论)
登录后参与讨论