includetypedef unsigned char uint8;#define clrdp 0x01#define enmode 0x06#define curback 0x02#define ondp 0x0f#define offdp 0x08#define movd 0x14#define funset 0x38 #define bus P1#define contw 0x8e#define secw 0x80#define secr 0x81#define minw 0x82#define minr 0x83 #define hourw 0x84#define hourr 0x85#define datw 0x86#define datr 0x87#define monthw 0x88#define monthr 0x89#define dayw 0x8a#define dayr 0x8b#define yearw 0x8c#define yearr 0x8dsbit K1=P2^7;sbit K2=P2^5;sbit K3=P2^4;sbit RS=P3^7;sbit RW=P3^6;sbit EN=P3^5;sbit DIO=P2^1;sbit RST=P2^2;sbit SCK=P2^0;bit flag=0;uint8 sel;uint8 time[7]={0};uint8 time_disp[32]={0};void init_1602(void);void write_com(uint8 comd);void write_dat(uint8 wdata);void delay(void);void long_dleay(void);void init_1302(void);uint8 read_1302(uint8 addr);void write_1302(uint8 addr,uint8 wdata);void disp(void);void read_time(void);void sepr_time(void);void chk_key(void);uint8 bcd_dec(uint8 wdata);uint8 dec_bcd(uint8 wdata);void main(void){ init_1302(); init_1602(); while(1) { chk_key(); read_time(); sepr_time(); disp(); }}//1302初始化void init_1302(void){ write_1302(contw,0); write_1302(secw,0);}//写1302寄存器void write_1302(uint8 addr,uint8 wdata){ uint8 i; SCK=0; RST=1; for(i=0;i<8;i++) { DIO=addr&0x01; SCK=1; SCK=0; addr>>=1; } for(i=0;i<8;i++) { DIO=wdata&0x01; SCK=1; SCK=0; wdata>>=1; } RST=0;}//读1302寄存器uint8 read_1302(uint8 addr){ uint8 i; uint8 temp; SCK=0; RST=1; for(i=0;i<8;i++) { DIO=addr&0x01; SCK=1; SCK=0; addr>>=1; } for(i=0;i<8;i++) { temp>>=1; if(! DIO) { temp&=0x7f; } else { temp|=0x80; } SCK=1; SCK=0; } RST=0; return temp; } //读1302时间寄存器 void read_time(void) { uint8 i; uint8 temp; for(i=0;i<7;i++) { temp=read_1302(0x81+i*2); time[i]=temp; } time[0]&=0x7f;}//显示时间void disp(void){ uint8 i; write_com(0x80); for(i=0;i<16;i++) { write_dat(time_disp[i]); } write_com(0xc0); for(i=16;i<32;i++) { write_dat(time_disp[i]); }}//分离时间 void sepr_time(void){ time_disp[0]=-; time_disp[1]=-; time_disp[2]=2; time_disp[3]=0; time_disp[4]=(time[6]>>4)+0x30; time_disp[5]=(time[6]&0x0f)+0x30; time_disp[6]=-; time_disp[7]=(time[4]>>4)+0x30; time_disp[8]=(time[4]&0x0f)+0x30; time_disp[9]=-; time_disp[10]=(time[3]>>4)+0x30; time_disp[11]=(time[3]&0x0f)+0x30; time_disp[12]=-; time_disp[13]=-; time_disp[14]=(time[5]>>4)+0x30; time_disp[15]=(time[5]&0x0f)+0x30; time_disp[16]=-; time_disp[17]=-; time_disp[18]=-; time_disp[19]=-; time_disp[20]=(time[2]>>4)+0x30; time_disp[21]=(time[2]&0x0f)+0x30; time_disp[22]=-; time_disp[23]=(time[1]>>4)+0x30; time_disp[24]=(time[1]&0x0f)+0x30; time_disp[25]=-; time_disp[26]=(time[0]>>4)+0x30; time_disp[27]=(time[0]&0x0f)+0x30; time_disp[28]=-; time_disp[29]=-; time_disp[30]=-; time_disp[31]=-;}void init_1602(void){ write_com(offdp); write_com(funset); write_com(enmode); write_com(movd); write_com(ondp); write_com(clrdp);}void write_com(uint8 comd){ RS=0; RW=0; bus=comd; EN=1; EN=0; delay();}void write_dat(uint8 wdata){ RS=1; RW=0; bus=wdata; EN=1; EN=0; delay();}void delay(void){ uint8 t; for(t=0;t<250;t++);}void long_delay(void){ uint8 t; for(t=0;t<200;t++) { delay(); }}void chk_key(void){ uint8 buf; uint8 temp; if(!K1) { long_delay(); if(!K1) { if(flag) { if((sel>=0)&&(sel<8)) { sel++; } else if(sel==8) { temp=read_1302(secr); temp&=0x7f; write_1302(secw,temp); sel=0; flag=0; } else { sel=8; } } else { temp=read_1302(secr); temp|=0x80; write_1302(secw,temp); flag=1; } } } else if(!K2) { long_delay(); if(!K2) { switch(sel) { case 1:temp=read_1302(yearr); buf=bcd_dec(temp); if(buf<99) { buf++; temp=dec_bcd(buf); write_1302(yearw,temp); } break; case 2:temp=read_1302(dayr); buf=bcd_dec(temp); if(buf<7) { buf++; temp=dec_bcd(buf); write_1302(dayw,temp); } break; case 3:temp=read_1302(monthr); buf=bcd_dec(temp); if(buf<12) { buf++; temp=dec_bcd(buf); write_1302(monthw,temp); } break; case 4:temp=read_1302(datr); buf=bcd_dec(temp); if(buf<31) { buf++; temp=dec_bcd(buf); write_1302(datw,temp); } break; case 5:temp=read_1302(hourr); buf=bcd_dec(temp); if(buf<23) { buf++; temp=dec_bcd(buf); 。