|
- #include "reg51.h"
- #include "intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit k2=P1^1;
- sbit sclk=P2^6;
- sbit io=P2^7;
- sbit ce=P2^5;
- int ts;
- uchar disp[6];
- uchar time_data[]={20,3,4,19,16,43,2};
- uchar wirte_add[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
- uchar read_add[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
- uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
- void delay(uchar x)
- {
- uchar a,b;
- for(a=x;a>0;a--)
- for(b=200;b>0;b--);
- }
- void write_ds1302_byte(uchar add) //д×Ö½Ú
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- sclk=0;
- io=add&0x01;
- add=add>>1;
- sclk=1;
- }
- }
- void write_ds1302(uchar add,dat)
- {
- ce=0;
- sclk=0;
- ce=1;
- _nop_();
- write_ds1302_byte(add);
- write_ds1302_byte(dat);
- ce=0;
- _nop_();
- io=1;
- sclk=1;
- }
- uchar read_ds1302(uchar add)
- {
- uchar i,value;
- ce=0;
- sclk=0;
- ce=1;
- _nop_();
- write_ds1302_byte(add);
- for(i=0;i<8;i++)
- {
- value=value>>1;
- sclk=0;
- if(io)
- {
- value=value|0x80;
- }
- sclk=1;
- }
- ce=0;
- _nop_();
- sclk=0;
- _nop_();
- sclk=1;
- io=1;
- return value;
- }
- void set_rtc()
- {
- uchar i,j,k;
- for(i=0;i<7;i++)
- {
- j=time_data[i]/10;
- k=time_data[i]%10;
- time_data[i]=k+j*16;
- }
- write_ds1302(0x8e,0x00);//È¥³ýд±£»¤
- for(i=0;i<7;i++)
- {
- write_ds1302(wirte_add[i],time_data[i]);
- }
- write_ds1302(0x8e,0x80);//д±£»¤
- }
- void read_rtc()
- {
- uchar i;
- for(i=0;i<7;i++)
- {
- time_data[i]=read_ds1302(read_add[i]);
- }
- }
- void time_pros()
- {
- disp[0]=time_data[4]/16;//ʱʮλ
- disp[1]=time_data[4]%16;//ʱ¸öλ
- disp[2]=time_data[5]/16;//·Öʮλ
- disp[3]=time_data[5]%16;//·Ö¸öλ
- disp[4]=time_data[6]/16;//Ãë
- disp[5]=time_data[6]%16;//MIAO
- }
- void display()
- {
- uchar i;
- for(i=0;i<6;i++)
- {
- switch(i)
- {
- case(0):
- LSA=0;LSB=0;LSC=0; break;//
- case(1):
- LSA=1;LSB=0;LSC=0; break;//ÏÔʾµÚ1λ
- case(2):
- LSA=0;LSB=1;LSC=0; break;//ÏÔʾµÚ2λ
- case(3):
- LSA=1;LSB=1;LSC=0; break;//ÏÔʾµÚ3λ
- case(4):
- LSA=0;LSB=0;LSC=1; break;//
- case(5):
- LSA=1;LSB=0;LSC=1; break;//
- if(i==1|i==3)
- P0=table_du[disp[i]]|0x80;
- else
- P0=table_du[disp[i]];//
- delay(3); //
- P0=0x00;//ÏûÒþ
- }
- }
- void change()
- {
- if(k2==0)
- delay(100);
- {
- if(k2==0)
- ts=read_ds1302(0x83);
- ts=(ts>>4)*10+ts&0x0f;
- ts++;
- if(ts>59)
- {
- ts=0;
- }
- ts=(ts/10)<<4+(ts%10)&0x0f;
- write_ds1302(0x8e,0x00);
- write_ds1302(0x82,ts);
- write_ds1302(0x8e,0x80);
- }
- }
- void main()
- {
- while(1)
- {
- change();
- read_rtc();
- time_pros();
- display();
- }
- }
復(fù)制代碼
|
-
-
時(shí)鐘.zip
2020-4-27 17:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
93.75 KB, 下載次數(shù): 2, 下載積分: 黑幣 -5
|