⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 M8+1302+18b20+8位数码管的sch和gcc源程序
💻 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 + -