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

📄 time.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
字号:
#include "public.h"
#include "p_main.H"

/* LF2407.H 的外部变量 */
/*IO端口B数据和方向控制寄存器*/
extern  unsigned int  *PBDATDIR;

/*bcd转二进制*/
uint Bcdtoer(uint us)
{
	uint temp1,temp2,temp;
	temp1=us&0x0f0;
	temp1>>=4;
	temp2=us&0x0f;
	temp=temp1*10+temp2;
	return(temp);
}

/*二进制转BCD*/
uint Ertobcd(uint us)
{
	uint temp1,temp2,temp;
	temp1=us/10;
	temp2=us%10;
	temp=temp1<<4;
	temp|=temp2;
	temp&=0x0ff;	
}

/*发送字节子程序*/
void Send_Dat(uint tran)
{
	uint flag,sz;
	uint tran_d;
	tran_d=tran;
	for(flag=0x00;flag<8;flag++)
	{
		sz=tran_d&0x0001;
		if(sz==0)*PBDATDIR=*PBDATDIR&0x0ff7f;     /*io=0;*/
			else *PBDATDIR=*PBDATDIR|0X80;        /*IO=1;*/
		Delay(8);
    tran_d>>=1;
		*PBDATDIR=*PBDATDIR|0X40;                 /*clk=1;*/
		Delay(8);
		*PBDATDIR=*PBDATDIR&0X0FFBF;              /*clk=0;*/
		Delay(8);
	}
}

/*读字节子程序*/
uint Read_Dat(void)
{
	uint r_data=0,sz,i;
	*PBDATDIR=*PBDATDIR&0X7FFF;           /*设置io为输入方式*/
	Delay(8);
  for(i=0;i<8;i++)
  {
  	r_data>>=1;
  	sz=*PBDATDIR&0X80;
  	if(sz==0)r_data&=0x0ff7f;
  		else r_data|=0x80;  
  	Delay(8);			
  	*PBDATDIR=*PBDATDIR|0X40;           /*CLK=1;*/  
  	Delay(8);
  	*PBDATDIR=*PBDATDIR&0x0ffbf;         /*clk=0*/             
  	Delay(8);
  }	
  *PBDATDIR=*PBDATDIR|0X8000;		          /*设置io为输出方式*/
  Delay(8);
  return(r_data);
}

/*字节写子程序*/
/***************************************************/
/*写保护使能   (0x8e,0x00)*/
/*禁止写保护   (0x8e,0x80)*/
/*时钟使能     (0x80,0x00)*/
/*时钟禁止工作 (0x80,0x80)*/
/***************************************************/
void Byte_Write(uint t_addr,uint t_dat)
{
	*PBDATDIR=*PBDATDIR&0X0FF9F;       /*clk=0; rst=0*/
	*PBDATDIR=*PBDATDIR|0X20;          /*rst=1*/
	Send_Dat(t_addr);
	Send_Dat(t_dat);
	*PBDATDIR=*PBDATDIR|0X40;          /*clk=1*/
	*PBDATDIR=*PBDATDIR&0X0FFDF;       /*rst=0*/
}

/**************************************************/
/*从1302里读一个字节数据。入口参数为这个字节的地址*/
/**************************************************/
uint Byte_Rd(uint byte_addr)
{
	uint k_dat=0;
	uint temp=0;
	*PBDATDIR=*PBDATDIR&0X0FF9F;       /*clk=0; rst=0*/
	*PBDATDIR=*PBDATDIR|0X20;          /*rst=1*/
	Send_Dat(byte_addr);
	k_dat=Read_Dat();
	*PBDATDIR=*PBDATDIR|0X40;          /*clk=1*/
	*PBDATDIR=*PBDATDIR&0X0FFDF;       /*rst=0*/	
	return(k_dat);
}

void Time_Init(void)
{
	Byte_Write(0x80,0x00);
	Delay(100);
	Byte_Write(0x8e,0x00);
	Delay(100);
	Byte_Write(0x90,0x99);      
}

void Write_Time(void)
{
	uint num;
	num=Ertobcd(timer[4]);
	Byte_Write(0x80,num);     /*second*/
	num=Ertobcd(timer[4]);
	Byte_Write(0x82,num);      /*minute*/	
	num=Ertobcd(timer[3]);
  Byte_Write(0x84,num);        /*hour*/  
  num=Ertobcd(timer[2]);
	Byte_Write(0x86,num);      /*day*/	
	num=Ertobcd(timer[1]);
	Byte_Write(0x88,num);      /*month*/
	Byte_Write(0x8a,0x04);     /*week*/	
	num=Ertobcd(timer[0]);
	Byte_Write(0x8c,num);      /*year*/	
}

void Read_Time(void)
{
		uint p_time;
		p_time=Byte_Rd(0x81);	  
		p_time&=0x7f;
		p_second=Bcdtoer(p_time);	 
		p_time=Byte_Rd(0x83);		
		p_time&=0x7f;
		p_minute=Bcdtoer(p_time);		
		p_time=Byte_Rd(0x85);		
		p_time&=0x3f;
		p_hour=Bcdtoer(p_time);		
		p_time=Byte_Rd(0x87);		
		p_time&=0x3f;
		p_day=Bcdtoer(p_time);		
		p_time=Byte_Rd(0x89);		
		p_time&=0x1f;
		p_month=Bcdtoer(p_time);		
		p_time=Byte_Rd(0x8d);
		p_year=Bcdtoer(p_time);		
}

void Write_Ram(void)
{
	uint i;
	Byte_Write(0x0c0,set_yg[0]); 
	Delay(100);
	Byte_Write(0x0c2,set_yg[1]); 
	Delay(100);
	Byte_Write(0x0c4,set_yg[2]); 
	Delay(100);
	Byte_Write(0x0c6,set_yg[3]); 
	Delay(100);
	Byte_Write(0x0c8,set_wg[0]); 
	Delay(100);	
	Byte_Write(0x0ca,set_wg[1]); 
	Delay(100);
	Byte_Write(0x0cc,set_wg[2]); 
	Delay(100);
	Byte_Write(0x0ce,set_wg[3]); 	    
	Delay(100);
}

void Wr_tdtime(void)
{
	uint i;
	Byte_Write(0x0d0,p_year); 
	Delay(100);
	Byte_Write(0x0d2,p_month); 
	Delay(100);
	Byte_Write(0x0d4,p_day); 
	Delay(100);
	Byte_Write(0x0d6,p_hour); 
	Delay(100);
	Byte_Write(0x0d8,p_minute); 
	Delay(100);	
	Byte_Write(0x0da,p_second); 
	Delay(100);
}

void Read_Ram(void)
{
	uint i;
	set_yg[0]=Byte_Rd(0x0c1);  
	Delay(100);   
	set_yg[1]=Byte_Rd(0x0c3);     
	Delay(100);
	set_yg[2]=Byte_Rd(0x0c5);     
	Delay(100);
	set_yg[3]=Byte_Rd(0x0c7);     
	Delay(100);
	set_wg[0]=Byte_Rd(0x0c9);     
	Delay(100);
	set_wg[1]=Byte_Rd(0x0cb);     
	Delay(100);
	set_wg[2]=Byte_Rd(0x0cd);     
	Delay(100);
	set_wg[3]=Byte_Rd(0x0cf); 
	Delay(100);    
}

void Re_tdtime(void)
{
	uint i;
	flash_buffer[1]=Byte_Rd(0x0d1);  
	Delay(100);   
	flash_buffer[2]=Byte_Rd(0x0d3);     
	Delay(100);
	flash_buffer[3]=Byte_Rd(0x0d5);     
	Delay(100);
	flash_buffer[4]=Byte_Rd(0x0d7);     
	Delay(100);
	flash_buffer[5]=Byte_Rd(0x0d9);     
	Delay(100);
	flash_buffer[6]=Byte_Rd(0x0db);     
	Delay(100);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -