//本程序实现测温+万年历显示;
#include <reg51.h>
#include <intrins.h>
#include<absacc.H>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS1302_CLK = P3^5;
sbit DS1302_IO = P3^6;
sbit DS1302_RST = P3^7;
sbit xing = P3^4;
sbit shanshuo = P1^0;
sbit jia = P1^1;
sbit jian = P1^2;
sbit DQ=P1^5;
sbit wei1=P1^6;
sbit wei2=P1^7;
sbit nao=P1^4;
sbit xa=P1^3;
uchar shanshuobz,jiabz, jianbz,flag,shanbz,naobz,naozhong;
uchar num=0,x,t1;
uchar tab[13];
uchar naotab[6];
uchar naobj[3],naojs,nz;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
float tp;
uchar disptab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};
uchar dispbuf[6];
unsigned char second,minute,hour,week,day,month,year,temp,t,t1,flag,shi,ge; //秒、分、时、星期、日、月、年
unsigned char time[]={0x22,0x12,0x31,0x06,0x23,0x59,0x45}; //初始时间数组11年12月31日23点59分45秒
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}
void InputByte(unsigned char byte1)
{ unsigned char i; // 向DS1302送一字节数据子程序
ACC=byte1;
for(i=8;i>0;i–)
{
DS1302_IO=ACC0;
DS1302_CLK=1;
DS1302_CLK=0;
ACC=ACC>>1;
}
return;
}
unsigned char OutputByte()
{ // 读DS1302一个字节子程序
unsigned char i;
for(i=8;i>0;i--)
{ ACC=ACC>>1;
ACC7=DS1302_IO;
DS1302_CLK=1;
DS1302_CLK=0;
}
return(ACC);
}
void write_ds1302(unsigned char addr,unsigned char TDat)
{
DS1302_RST=0; // 向DS1302某地址写一字节数据子程序
nop();
DS1302_CLK=0;
nop();
DS1302_RST=1;
InputByte(addr);
nop();
InputByte(TDat);
DS1302_CLK=1;
nop();
DS1302_RST=0;
}
unsigned char read_ds1302(unsigned char addr)
{ // 读DS1302地址子程序
unsigned char timedata,kk;
DS1302_RST=0;
nop();
DS1302_CLK=0;
nop();
DS1302_RST=1;
InputByte(addr);
timedata=OutputByte();
DS1302_CLK=1;
nop();
DS1302_RST=0;
kk=timedata>>4;
kk=kk*10+(timedata&=0x0f);
return(kk);
}
void initial_ds1302() // 初始化DS1302子程序
{
write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0
write_ds1302(0x8c,time[0]); //年
write_ds1302(0x88,time[1]); //月
write_ds1302(0x86,time[2]); //日
write_ds1302(0x8A,time[3]); //星期
write_ds1302(0x84,time[4]); //时
write_ds1302(0x82,time[5]); //分
write_ds1302(0x80,time[6]); //秒
wr