?? 164.txt
字號(hào):
#include <stdio.h>
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define unint unsigned int
/************************************/
sbit T_CLK=P2^4; /* 實(shí)時(shí)時(shí)鐘的時(shí)鐘線引腳*/
sbit T_IO=P3^1; /* 實(shí)時(shí)時(shí)鐘的數(shù)據(jù)線*/
sbit T_RST=P3^0; /* 實(shí)時(shí)時(shí)鐘的復(fù)位線引腳*/
sbit add_gw_sw=P3^2; /*總控制開(kāi)關(guān)*/
sbit dec_gw_sw=P3^3; /*位選控制*/
sbit add_bw_qw=P3^4; /*數(shù)字加1*/
sbit dec_bw_qw=P3^5; /*數(shù)字減1*/
sbit xsdat=P1^1; //定義驅(qū)動(dòng)74164的數(shù)據(jù)腳為p1.4
sbit xsclk=P1^0; //74164的時(shí)鐘
sbit choose=P3^6;
sbit gw=P2^3; //個(gè)位
sbit sw=P2^2; //十位
sbit bw=P2^1; //百位
sbit qw=P2^0; //千位
unint b[4];//={0,0,0,0}; /*位段的數(shù)字*/
unint a[4]={0,0,0,0};
uchar code ledk[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
uchar code ledk1[11]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF,0x00}; //加了小數(shù)點(diǎn)后
unint ucCurtime[7]={58,05,20,31,07,02,06}; // 秒 分 時(shí) 日 月 星期 年
unint temp;
uchar data BUFFER[1]={0};
void delay() /*延時(shí)*/
{
uchar m,n;
for(m=10;m>0;m--)
for(n=100;n>0;n--);
}
void v_RTInputByte(uchar ucDa)
{
uchar i;
ACC=ucDa;
for(i=8;i>0;i--)
{
if((ACC&0x01)==1)
//T_IO=ACC0; /* 相當(dāng)于匯編中的RRC */
T_IO=1;
else T_IO=0;//if((ACC&0x01)==0)
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
uchar uc_RTOutputByte(void)
{
uchar i,ACC;
ACC=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1; /*相當(dāng)于匯編中的RRC*/
if(T_IO==1)
ACC=ACC|0x80;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
void v_W1302(uchar ucAddr,uchar ucDa)
{
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
v_RTInputByte(ucDa); /*寫(xiě)1Byte數(shù)據(jù)*/
T_CLK=1;
T_RST=0;
}
uchar uc_R1302(uchar ucAddr)
{
unsigned char ucDa,k;
k=0x00;
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
ucDa=uc_RTOutputByte(); /*讀取1Byte數(shù)據(jù)*/
T_CLK=1;
T_RST=0;
k=ucDa/16;
ucDa=ucDa%16;
ucDa=ucDa+k*10;
return(ucDa);
}
void v_Set1302()//uchar *pSecDa)
{
uchar i,j;
uchar ucAddr=0x80;
v_W1302(0x8e,0x00); /* 控制命令,WP=0,寫(xiě)操作?*/
for(i=0;i<7;i++)
{
j=ucCurtime[i];
v_W1302(ucAddr,j); /* 秒 分 時(shí) 日 月 星期 年 */
ucAddr +=2;
}
v_W1302(0x8e,0x80); /* 控制命令,WP=1,寫(xiě)保護(hù)?*/
}
void v_Get1302()
{
uchar i;
uchar ucAddr=0x81;
for (i=0;i<7;i++)
{
ucCurtime[i]=uc_R1302(ucAddr);/*格式為: 秒 分 時(shí) 日 月 星期 年 */
ucAddr +=2;
}
}
void allout(uchar out)
{
uchar i;
for (i=8;i>=1;i--)
{
xsdat=out&0x80;
xsclk=0; //送數(shù)據(jù)到數(shù)據(jù)口
xsclk=1; //送一時(shí)鐘
out<<=1; //左移
}
}
void t2_10()
{
unint k;
b[3]=temp/1000;
k=temp%1000;
b[2]=k/100;
k=k%100;
b[1]=k/10;
b[0]=k%10;
}
/*顯示*/
void display1()
{
uchar c;
t2_10();
c=b[0];
allout(ledk[c]);
/* c=b[0];
P1=ledk[c];*/
gw=0;
delay();
gw=1;
c=b[1];
allout(ledk[c]);
// P1=ledk[c];
sw=0;
delay();
sw=1;
c=b[2];
allout(ledk1[c]);
//P1=ledk1[c];
bw=0;
delay();
bw=1;
c=b[3];
allout(ledk[c]);
//P1=ledk[c];
qw=0;
delay();
qw=1;
}
void display2()
{
uchar c;
t2_10();
c=b[0];
allout(ledk[c]);
//P1=ledk[c];
gw=0;
delay();
gw=1;
c=b[1];
allout(ledk[c]);
//P1=ledk[c];
sw=0;
delay();
sw=1;
c=b[2];
allout(ledk[c]);
//P1=ledk[c];
bw=0;
delay();
bw=1;
c=b[3];
allout(ledk[c]);
//P1=ledk[c];
qw=0;
delay();
qw=1;
}
void main1(void)
{ v_Get1302();
temp=ucCurtime[2]*100+ucCurtime[1];
display1();
}
void main2(void)
{ v_Get1302();
temp=ucCurtime[2]*100+ucCurtime[1];
display2();
}
void chooseplay(void)
{ v_Get1302();
temp=ucCurtime[4]*100+ucCurtime[3];
display1();
}
void main3(void)
{
BUFFER[0]=BUFFER[0]+1;
if(BUFFER[0]==101)
{
main1();
BUFFER[0]=0;
}
else main2();
}
void main4(void)
{
unint i,k;
for(i=0;i<7;i++)
{
k=ucCurtime[i]/10;
ucCurtime[i]=ucCurtime[i]%10;
ucCurtime[i]=ucCurtime[i]+16*k;
}
v_Set1302();
}
void main()
{ //unint i,j;
main4();
while(1)
{
main3();
if(add_gw_sw==0)
{
delay();
if(add_gw_sw==0)
{
ucCurtime[1]=ucCurtime[1]+1;
ucCurtime[0]=0;
if(ucCurtime[1]>59)ucCurtime[1]=ucCurtime[1]-60;
main4();
main3();
while(add_gw_sw==0)
main3();
}
}
if(dec_gw_sw==0)
{
delay();
if(dec_gw_sw==0)
{
ucCurtime[1]=ucCurtime[1]-1;
ucCurtime[0]=0;
{if(ucCurtime[1]>59)ucCurtime[1]=ucCurtime[1]-36;
ucCurtime[0]=0;}
main4();
main3();
while(dec_gw_sw==0)
main3();
}
}
if(add_bw_qw==0)
{
delay();
if(add_bw_qw==0)
{
ucCurtime[2]=ucCurtime[2]+1;
ucCurtime[0]=0;
if(ucCurtime[2]>23)
ucCurtime[2]=ucCurtime[2]-24;
ucCurtime[0]=0;
main4();
main3();
while(add_bw_qw==0)
main3();
}
}
if(dec_bw_qw==0)
{
delay();
if(dec_bw_qw==0)
{
ucCurtime[2]=ucCurtime[2]-1;
ucCurtime[0]=0;
if(ucCurtime[2]>23)
ucCurtime[2]=ucCurtime[2]-72;
ucCurtime[0]=0;
main4();
main3();
while(dec_bw_qw==0)
main3();
}
}
if(choose==0)
{
delay();
if(choose==0)
{
main4();
v_Get1302();
while(1)
chooseplay();
}
}
// while(choose==0)chooseplay();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -