}
return;
uchar OutputByte() //1302-读单字节 { }
void write_ds1302(uchar add,uchar date)//1302-写子程序 {
rst=0; _nop_(); clk=0; _nop_(); rst=1; uchar i; for(i=8;i>0;i--) { }
return(ACC);
ACC=ACC>>1; ACC7=IO; clk=1; clk=0;
InputByte(add); }
uchar read_ds1302(uchar add)//1302-读子程序 {
uchar date;
32
_nop_(); InputByte(date); clk=1; _nop_(); rst=0;
}
rst=0; _nop_(); clk=0; _nop_(); rst=1;
InputByte(add); date=OutputByte(); clk=1; _nop_(); rst=0; return(date);
void write_time()//写DS1302时间子程序 {
write_ds1302(0x8e,0x00);
//写保护寄存器
nian1=((nian/10)<<4|(nian)); write_ds1302(0x8c,nian1);
//年
yue1=((yue/10)<<4|(yue)); write_ds1302(0x88,yue1); ri1=((ri/10)<<4|(ri)); write_ds1302(0x86,ri1); xq1=((xq/10)<<4|(xq)); write_ds1302(0x8A,xq1); shi1=((shi/10)<<4|(shi)); write_ds1302(0x84,shi1); //时 fen1=((fen/10)<<4|(fen)); write_ds1302(0x82,fen1); //分 miao1=((miao/10)<<4|(miao)); write_ds1302(0x80,miao1); //秒
//星期 //日 //月
33
}
write_ds1302(0x8e,0x80); //写保护寄存器
void read_time()//读DS1302时间子程序 { }
void write_sj1(uchar date)//1602时间的划分 { }
void dingwei()//1602年月日等的定位 {
writecom(0x80+0x02);
34
miao1=read_ds1302(0x81); //秒寄存器 miao=((miao1&0x70)>>4)*10+(miao1&0x0f); fen1=read_ds1302(0x83);
//分
fen=((fen1&0x70)>>4)*10+(fen1&0x0f); shi1=read_ds1302(0x85);
//时
shi=((shi1&0x70)>>4)*10+(shi1&0x0f); xq1=read_ds1302(0x8b);
//星期
xq=((xq1&0x70)>>4)*10+(xq1&0x0f); ri1=read_ds1302(0x87);
//日
ri=((ri1&0x70)>>4)*10+(ri1&0x0f); yue1=read_ds1302(0x89);
//月
yue=((yue1&0x70)>>4)*10+(yue1&0x0f); nian1=read_ds1302(0x8d);
//年
nian=((nian1&0xf0)>>4)*10+(nian1&0x0f);
uchar shi,ge; shi=date/10; ge=date; writedate(0x30+shi); writedate(0x30+ge);
}
write_sj1(nian); writecom(0x80+0x05); write_sj1(yue); writecom(0x80+0x08); write_sj1(ri);
writecom(0x80+0x4A); writedate(0x30+xq); writecom(0x80+0x40); write_sj1(shi); writecom(0x80+0x43); write_sj1(fen); writecom(0x80+0x46); write_sj1(miao);
void xianshi(uchar *s)//1602显示 { }
/************18b20的程序**********/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); }
void ds1820rst()/*ds1820复位*/ {
uchar x=0;
DQ = 1; //DQ复位 while(*s>0) { }
writedate(*s); s++;
35
delay_18B20(4); //延时 DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40);
}
uchar ds1820rd()/*读数据*/ { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1;
DQ = 1; //给脉冲信号 if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat); }
void ds1820wr(uchar wdata)/*写数据*/ { uchar i=0; for (i=8; i>0; i--) { DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
36