××大学××学院××系××课程设计报告
行 Write_ds1302(0x80,0x00); //调整完毕后,启动时钟运
Write_ds1302(0x8e,0x80); //写保护控制字,禁止写
}
}
}
}
for(j=0; j<=i; j++) { if((time_hour[j] == time_buf[2]) && (time_min[j] == time_buf[1])) { flag = 1; TR0 = 1; t0 = 0; ON_Relay(); ON_Buzzer(); } }
if(flag == 1) { OFF_Relay(); OFF_Buzzer(); TR0 = 0; flag = 0;
}
}
}
/*******************************延时程序*****************************/ void Delay(uchar i) {
12
××大学××学院××系××课程设计报告
uchar j; for ( ; i>0; i--) { for (j=110; j>0; j--);
}
}
/***********************数码管**********************************/ void dula(void) //段选
{ P2_5 = 1; P2_6 = 1; P2_7 = 1;
}
/*---------------------------------------------------------------------------*/ void wela(void) //位选
{ P2_5 = 0; P2_6 = 1; P2_7 = 1;
}
/**************************蜂鸣器*******************************/ void ON_Buzzer(void) //打开蜂鸣器
{ P2_5 = 1; P2_6 = 0; P2_7 = 1; P0 = 0x40; P2_5 = 0; P2_6 = 0; P2_7 = 0;
}
13
××大学××学院××系××课程设计报告
/*---------------------------------------------------------------------------*/ void OFF_Buzzer(void) //关闭蜂鸣器
{ P2_5 = 1; P2_6 = 0; P2_7 = 1; P0 = 0; P2_5 = 0; P2_6 = 0; P2_7 = 0;
}
/****************************继电器*********************************/ void ON_Relay (void) //继电器打开
{ P2_5 = 1; P2_6 = 0; P2_7 = 1; P0 = 0x10; P2_5 = 0; P2_6 = 0; P2_7 = 0;
}
/*---------------------------------------------------------------------------*/ void OFF_Relay (void) //继电器关闭
{ P2_5 = 1; P2_6 = 0; P2_7 = 1; P0 = 0; P2_5 = 0;
P2_6 = 0;
14
××大学××学院××系××课程设计报告
P2_7 = 0;
}
/******************初始化DS1302函数***************************/ void init_ds1302(void) {
RST = 0; SCLK = 0;
Write_ds1302(0x80,0x00); //写秒寄存器 Write_ds1302(0x90,0xab); //写充电器
Write_ds1302(0x8e,0x80); //写保护控制字,禁止写 }
/******************定时器初始化***********************************/ void init_timer0(void) { TMOD |= 0x01;
TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) / 256; ET0 = 1; EA = 1; TR0 = 0;
}
/****************************写一个字节******************************/ void Write_byte(uchar inbyte) {
uchar i; for(i=0; i<8; i++) { SCLK = 0; //写时低电平改变数据 if(inbyte & 0x01)
{
IO = 1;
15
××大学××学院××系××课程设计报告
}
else {
IO = 0;
}
SCLK = 1; //高电平把数据写入DS1302 _nop_();
inbyte = inbyte >> 1;
} }
/*********************读一个字节*********************************/ uchar Read_byte(void) {
uchar i,temp=0; IO=1; for(i=0; i<7; i++) { SCLK = 0; if(IO == 1)
{ temp = temp | 0x80;
} else
{ temp = temp & 0x7f;
}
SCLK = 1; //产生下跳沿 temp = temp >> 1;
}
return (temp); }
16