📄 ds1302.h.txt
字号:
uchar SEG_TBC[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59} ; //16进制转BCD码
sbit clock_dat = P1^1; //定义DS1302的I/O口
sbit clock_clk = P1^0;
sbit clock_rst = P1^2;
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
/********************************************************************************************
* 函数名称:Delay()
* 功 能:延时程序
* 入口参数:延时时间
* 出口参数:无
*********************************************************************************************/
void Delay (uint t)
{
uchar i;
while(t--)
{ for(i=0;i<125;i++) //延时1Ms
{;}
}
}
/********************************************************************************************
* 函数名称:clock_out
* 功 能:对DS1302写1字节的数据
* 入口参数:数据
* 出口参数:无
*********************************************************************************************/
void clock_out(unsigned char dd)//上跳沿写数据 先写入控制字,再写入数据
{
ACC=dd;
clock_dat=a0; clock_clk=1; clock_clk=0;
clock_dat=a1; clock_clk=1; clock_clk=0;
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
/********************************************************************************************
* 函数名称:clock_in()
* 功 能:读DS1302一字节的数据
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
uchar clock_in(void)//读数据 下跳沿
{
clock_dat=1;//这个是时序,读a0的时候就是直接是clock_dat=1,a0是个位,不是一个值,
//而读其他的就是先置1再为0,再a1=clkock—da
a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC);
}
/********************************************************************************************
* 函数名称:read_clock()
* 功 能:读DS1302的数据
* 入口参数:DS1302的控制字
* 出口参数:无
*********************************************************************************************/
unsigned char read_clock(unsigned char ord)
{
unsigned char dd=0;
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_out(ord);
dd=clock_in();//
clock_rst=0;
clock_clk=1;
return(dd);
}
/********************************************************************************************
* 函数名称:write_clock()
* 功 能:对DS1302写控制时钟数据
* 入口参数:DS1302的控制字和数据
* 出口参数:无
*********************************************************************************************/
void write_clock(unsigned char ord, unsigned char dd)
{
clock_clk=0;//
clock_rst=0;
clock_rst=1;
clock_out(ord); //先写入控制码
clock_out(dd); //再写入数据
clock_rst=0;
clock_clk=1;
}
/********************************************************************************************
* 函数名称:Init_1302()
* 功 能:初始化DS1302
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Init_1302(void)
{
write_clock(0x8e,0x00);//close_protect 0x8e--10001110 前一个参数为控制字,后一个为数据
write_clock(0x8c,0x07);//year 0x8c--10001100
write_clock(0x8a,0x04);//星期 0x8a--10001010
write_clock(0x88,0x07);//month 0x88--10001000
write_clock(0x86,0x31);//date 0x86--10000110
write_clock(0x84,0x07);//hour 0x84--10000100
write_clock(0x82,0x00);//minute 0x82--10000010
write_clock(0x80,0x00);//second 0x80--10000000
write_clock(0x90,0xa7);//supply_power 0x90--10010000 a5-10100101
write_clock(0x8e,0x80);//open_protect 0x8e--10001110
}
从1302收发都是BCD码!!!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -