📄 time.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 + -