河南科技大学毕业论文
/*向ds1302写入一字节数?/
void ds1302_write_byte(uchar addr,uchar dat) { }
/*从ds1302读出一字节数据*/ uchar ds1302_read_byte(uchar addr) {
42
uchar i; DS1302_RST=1; addr=addr&0xfe; for(i=0;i<8;i++) {
if(addr&0x01)
DS1302_IO=1;
//写目标地址addr并最低位置零
else
DS1302_IO=0;
DS1302_CLK=1; DS1302_CLK=0; addr=_cror_(addr,1); }
//写入数据dat
for(i=0;i<8;i++) {
if(dat&0x01)
DS1302_IO=1;
else
DS1302_IO=0;
DS1302_CLK=1; DS1302_CLK=0; dat=_cror_(dat,1); ; }
//停止DS1302总线
DS1302_RST=0;
河南科技大学毕业论文
}
uchar i,temp; DS1302_RST=1; addr=addr|0x01; for(i=0;i<8;i++) {
if(addr&0x01)
DS1302_IO=1;
//写入目标地址addr并最低位置高
else
DS1302_IO=0;
DS1302_CLK=1; DS1302_CLK=0; addr=_cror_(addr,1); }
//输出数据:temp
for(i=0;i<8;i++) {
temp=_cror_(temp,1); if(DS1302_IO==1)
temp|=0x80;
else
temp&=0x7F;
DS1302_CLK=1; DS1302_CLK=0; }
//停止DS1302总线
DS1302_RST=0; return temp;
/*向ds1302写入时钟数*/ void ds1302_write_time() {
uchar i,temp;
for(i=0;i<8;i++) //BCD处理
43
河南科技大学毕业论文
}
{
temp=time_buf1[i]/10; time_buf[i]=time_buf1[i]; time_buf[i]=time_buf[i]+temp*16;
}
ds1302_write_byte(ds1302_control_addr,0x00); ds1302_write_byte(ds1302_sec_addr,0x80);
//关闭写保护 //暂停 //涓流充电
//ds1302_write_byte(ds1302_charger_addr,0xa9); ds1302_write_byte(ds1302_year_addr,time_buf[1]);
//年
//月 //日 //周 //时 //分 //秒 //周
//打开写保护
ds1302_write_byte(ds1302_month_addr,time_buf[2]); ds1302_write_byte(ds1302_day_addr,time_buf[3]); ds1302_write_byte(ds1302_week_addr,time_buf[7]); ds1302_write_byte(ds1302_hour_addr,time_buf[4]); ds1302_write_byte(ds1302_min_addr,time_buf[5]); ds1302_write_byte(ds1302_sec_addr,time_buf[6]); ds1302_write_byte(ds1302_week_addr,time_buf[7]); ds1302_write_byte(ds1302_control_addr,0x80);
/*从ds1302读出时钟数据*/ void ds1302_read_time() {
uchar i,temp;
time_buf[1]=ds1302_read_byte(ds1302_year_addr); //年
time_buf[2]=ds1302_read_byte(ds1302_month_addr); time_buf[3]=ds1302_read_byte(ds1302_day_addr); time_buf[4]=ds1302_read_byte(ds1302_hour_addr); time_buf[5]=ds1302_read_byte(ds1302_min_addr);
//月 //日
//时
//分
time_buf[6]=(ds1302_read_byte(ds1302_sec_addr))&0x7F; //秒 time_buf[7]=ds1302_read_byte(ds1302_week_addr);
//周
for(i=0;i<8;i++) //BCD处理
44
河南科技大学毕业论文
}
{
temp=time_buf[i]/16; time_buf1[i]=time_buf[i]; time_buf1[i]=time_buf1[i]+temp*10;
}
/*ds1302初始化*/ void ds1302_init() { }
DS1302_RST=0; DS1302_CLK=0;
ds1302_write_byte(ds1302_sec_addr,0x00);
45
河南科技大学毕业论文
附录三
单片机STC89C52-2 C程序如下:
/********************************************************************/ #include
#define uchar unsigned char #define uint unsigned int
#define AddWr 0x90 //写数据地址 #define AddRd 0x91 //读数据地址
sbit LEDON=P1^2; uint num; int pwm; uint cycle=500;
void delay(uint k) { uint i,j;
for(i=110;i>0;i--) { for(j=k;j>0;j--);
}
}
uchar ReadADC(unsigned char Chl) {
46
10010000