void LcdDisplay1() {
LCD12864_SetWindow(0, 0); LCD12864_WriteData('2'); LCD12864_WriteData('0');
LCD12864_WriteData('0'+CLK[6]/16); LCD12864_WriteData('0'+(CLK[6]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+CLK[4]/16); LCD12864_WriteData('0'+(CLK[4]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+CLK[3]/16); LCD12864_WriteData('0'+(CLK[3]&0x0f)); LCD12864_SetWindow(1, 0);
LCD12864_WriteData('0'+CLK[2]/16); LCD12864_WriteData('0'+(CLK[2]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+CLK[1]/16); LCD12864_WriteData('0'+(CLK[1]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+CLK[0]/16); LCD12864_WriteData('0'+(CLK[0]&0x0f)); LCD12864_SetWindow(2, 0); LCD12864_WriteData('w'); LCD12864_WriteData('e'); LCD12864_WriteData('e');
LCD12864_WriteData('k'); LCD12864_WriteData(' '); LCD12864_WriteData('0'+(CLK[5]&0x07)); DS18B20(); }
void setclock() { mn=1; while(1) { if(SetState!=0) { SetState=0;
21
break; } else { if(K2==0) { numb++; if(numb>=7) numb=0; while((i<50)&&(K2==0)) { Delay10ms(); i++; } i=0; } if(K3==0||K4==0) { if(K3==0) {CLK[numb]++; if((CLK[numb]&0x0f)>9) { CLK[numb]=CLK[numb]+6; } } else {CLK[numb]--; if((CLK[numb]&0x0f)>9) { CLK[numb]=CLK[numb]-6; } } if((CLK[numb]>=0x60)&&(numb<2)) { CLK[numb]=0; } if((CLK[numb]>=0x24)&&(numb==2)) { CLK[numb]=0; } if((CLK[numb]>=0x32)&&(numb==3))
22
{ CLK[numb]=0; } if((CLK[numb]>=0x13)&&(numb==4)) { CLK[numb]=0; } if((CLK[numb]>=0x8)&&(numb==5)) { CLK[numb]=1; } while((i<50)&&(K3==0)||(K4==0)) { Delay10ms(); i++; } i=0; LcdDisplay1(); } if(nm==0) { LcdDisplay1(); nm++; } } switch (numb) { case 0: y=4;x=1; break; case 1: y=2;x=1; break; case 2: y=0;x=1; break; case 3: y=5;x=0; break; case 4: y=3;x=0; break; case 5: y=2;x=2; break; case 6: y=1;x=0; break; } LCD12864_SetWindow(x,y); LCD12864_WriteCmd(0x0f); } }
uchar clock() { uint pi;
for (pi = 0; pi < 7; pi++) {
23
if (CLK[pi] != TIME[pi]) {
return 0; break;
} } return 1; }
ds1302.c(时钟控制)
#include\#include\
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
void Ds1302Write(uchar addr, uchar dat) {
uchar n; RST = 0; _nop_();
SCLK = 0; _nop_(); RST = 1; _nop_();
for (n=0; n<8; n++) { DSIO = addr & 0x01; addr >>= 1; SCLK = 1; _nop_(); SCLK = 0; _nop_(); }
for (n=0; n<8; n++) { DSIO = dat & 0x01; dat >>= 1;
24
SCLK = 1; _nop_(); SCLK = 0; _nop_(); } RST = 0; _nop_(); }
uchar Ds1302Read(uchar addr) {
uchar n,dat,dat1; RST = 0; _nop_();
SCLK = 0; _nop_(); RST = 1; _nop_();
for(n=0; n<8; n++) { DSIO = addr & 0x01; addr >>= 1; SCLK = 1; _nop_(); SCLK = 0; _nop_(); }
_nop_();
for(n=0; n<8; n++) { dat1 = DSIO; dat = (dat>>1) | (dat1<<7); SCLK = 1; _nop_(); SCLK = 0; _nop_(); }
RST = 0; _nop_(); SCLK = 1;
25