📄 ds1302.c
字号:
#define ds1302_c
#include "main.h"
void ds1302_write(uchar reg,uchar data)
{
uchar i=0;
set_ds1302_io_ddr();
asm("nop");
asm("nop");
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
set_ds1302_rst();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
if(reg&0x01) set_ds1302_io();
else clr_ds1302_io();
asm("nop");
asm("nop");
set_ds1302_sclk();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
reg>>=1;
}
for(i=8;i>0;i--)
{
if(data&0x01) set_ds1302_io();
else clr_ds1302_io();
asm("nop");
asm("nop");
set_ds1302_sclk();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
data>>=1;
}
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_io_ddr();
asm("nop");
asm("nop");
}
uchar ds1302_read(uchar reg)
{
uchar data=0;
uchar i=0;
reg+=1;//读标志
set_ds1302_io_ddr();
asm("nop");
asm("nop");
clr_ds1302_rst();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
set_ds1302_rst();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
if(reg&0x01) set_ds1302_io();
else clr_ds1302_io();
asm("nop");
asm("nop");
set_ds1302_sclk();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
reg>>=1;
}
clr_ds1302_io_ddr();
asm("nop");
asm("nop");
for(i=8;i>0;i--)
{
data>>=1;
if(in_ds1302_io()) data|=0x80;
asm("nop");
asm("nop");
set_ds1302_sclk();
asm("nop");
asm("nop");
clr_ds1302_sclk();
asm("nop");
asm("nop");
}
clr_ds1302_rst();
asm("nop");
asm("nop");
return(data);
}
uchar check_ds1302(void)
{
ds1302_write(ds1302_control_reg,0x80);
if(ds1302_read(ds1302_control_reg)==0x80) return 1;
return 0;
}
void ds1302_read_time(void)
{
year=ds1302_read(ds1302_year_reg); //年
month=ds1302_read(ds1302_month_reg);//月
day=ds1302_read(ds1302_date_reg); //日
week=ds1302_read(ds1302_day_reg); //周
hour=ds1302_read(ds1302_hr_reg); //时
minute=ds1302_read(ds1302_min_reg); //分
second=ds1302_read(ds1302_sec_reg); //秒
}
void ds1302_write_time(void)
{
ds1302_write(ds1302_control_reg,0x00); //关闭写保护
ds1302_write(ds1302_sec_reg,0x80); //暂停
ds1302_write(ds1302_charger_reg,0xa9); //涓流充电
ds1302_write(ds1302_year_reg,year); //年
ds1302_write(ds1302_month_reg,month); //月
ds1302_write(ds1302_date_reg,day); //日
ds1302_write(ds1302_day_reg,week); //周
ds1302_write(ds1302_hr_reg,hour); //时
ds1302_write(ds1302_min_reg,minute); //分
ds1302_write(ds1302_sec_reg,second); //秒
ds1302_write(ds1302_control_reg,0x80); //打开写保护
}
SIGNAL (SIG_OVERFLOW1)
{
TCNT1=t1_tcnt;
half_second++;
flash_var^=flash_control;
if(2==half_second)
{
half_second=0;
second++;
second_flag=1;
if(flag&(1<<buzzer_flag)) flash_buzzer();
else set_buzzer();
if((second&0x0f)>=0x0a)
{
second&=0xf0;
second+=0x10;
if((second&0xf0)>=0x60)
{
second=0;
minute++;
flag&=~(1<<buzzer_flag);
if((minute&0x0f)>=0x0a)
{
minute&=0xf0;
minute+=0x10;
if((minute&0xf0)>=0x60)
{
minute=0;
hour++;
flag|=1<<hour_flag;
}
}
}
}
}
}
void display_time(void)
{
uchar temp=0;
temp=(hour&0xf0)>>4;
display_buffer[0]=pgm_read_byte(display_code+temp);
temp=hour&0x0f;
display_buffer[1]=pgm_read_byte(display_code+temp);
display_buffer[2]=0x40;//-
temp=(minute&0xf0)>>4;
display_buffer[3]=pgm_read_byte(display_code+temp);
temp=minute&0x0f;
display_buffer[4]=pgm_read_byte(display_code+temp);
display_buffer[5]=0x40;//-
temp=(second&0xf0)>>4;
display_buffer[6]=pgm_read_byte(display_code+temp);
temp=second&0x0f;
display_buffer[7]=pgm_read_byte(display_code+temp);
}
void display_date(void)
{
uchar temp=0;
//月
temp=(month&0xf0)>>4;
display_buffer[0]=pgm_read_byte(display_code+temp);
temp=month&0x0f;
display_buffer[1]=pgm_read_byte(display_code+temp);
display_buffer[2]=0x08;//-
//日
temp=(day&0xf0)>>4;
display_buffer[3]=pgm_read_byte(display_code+temp);
temp=day&0x0f;
display_buffer[4]=pgm_read_byte(display_code+temp);
display_buffer[5]=0x00;//.
display_buffer[6]=0x00;//.
//周
temp=week&0x0f;
display_buffer[7]=pgm_read_byte(display_code+temp);
}
void display_year(void)
{
uchar temp=0;
display_buffer[0]=0;//空
display_buffer[1]=0;//空
display_buffer[2]=0;//空
display_buffer[3]=0;//空
display_buffer[4]=0x5b;//2
display_buffer[5]=0x3f;//0
//年
temp=(year&0xf0)>>4;
display_buffer[6]=pgm_read_byte(display_code+temp);
temp=year&0x0f;
display_buffer[7]=pgm_read_byte(display_code+temp);
}
void display_timer(uchar number,uchar timer_hour,uchar timer_minute)
{
uchar temp=0;
display_buffer[0]=pgm_read_byte(display_code+number);
display_buffer[1]=0x00;//空
display_buffer[2]=0x00;//空
//hour
temp=(timer_hour&0xf0)>>4;
display_buffer[3]=pgm_read_byte(display_code+temp);
temp=timer_hour&0x0f;
display_buffer[4]=pgm_read_byte(display_code+temp);
display_buffer[5]=0x40;//-
//minute
temp=(timer_minute&0xf0)>>4;
display_buffer[6]=pgm_read_byte(display_code+temp);
temp=timer_minute&0x0f;
display_buffer[7]=pgm_read_byte(display_code+temp);
}
void check_timer(void)
{
if(timer0_hour) flag|=1<<timer0_available;
else if(timer0_minute) flag|=1<<timer0_available;
else flag&=~(1<<timer0_available);
if(timer1_hour) flag|=1<<timer1_available;
else if(timer1_minute) flag|=1<<timer1_available;
else flag&=~(1<<timer1_available);
if(timer2_hour) flag|=1<<timer2_available;
else if(timer2_minute) flag|=1<<timer2_available;
else flag&=~(1<<timer2_available);
if(timer3_hour) flag|=1<<timer3_available;
else if(timer3_minute) flag|=1<<timer3_available;
else flag&=~(1<<timer3_available);
if(timer4_hour) flag|=1<<timer4_available;
else if(timer4_minute) flag|=1<<timer4_available;
else flag&=~(1<<timer4_available);
if(timer5_hour) flag|=1<<timer5_available;
else if(timer5_minute) flag|=1<<timer5_available;
else flag&=~(1<<timer5_available);
if(flag&(1<<timer0_available))
{
if(timer0_hour==hour)
{
if(timer0_minute==minute) flag|=1<<buzzer_flag;
}
}
if(flag&(1<<timer1_available))
{
if(timer1_hour==hour)
{
if(timer1_minute==minute) flag|=1<<buzzer_flag;
}
}
if(flag&(1<<timer2_available))
{
if(timer2_hour==hour)
{
if(timer2_minute==minute) flag|=1<<buzzer_flag;
}
}
if(flag&(1<<timer3_available))
{
if(timer3_hour==hour)
{
if(timer3_minute==minute) flag|=1<<buzzer_flag;
}
}
if(flag&(1<<timer4_available))
{
if(timer4_hour==hour)
{
if(timer4_minute==minute) flag|=1<<buzzer_flag;
}
}
if(flag&(1<<timer5_available))
{
if(timer5_hour==hour)
{
if(timer5_minute==minute) flag|=1<<buzzer_flag;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -